Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Kenox

Pages: [1]
1
Graphics / Re: Collision of two sprites is very weird
« on: April 27, 2019, 11:15:45 am »
You didn't show how you draw your objects, but I would guess you're splitting up your player movement and collision response into separate frames, causing your object to alternate between collision and non-collision each frame. Basically, your logic probably flows something like:
1. Move object
2. Draw frame
3. If object is colliding, move object back.
4. Draw frame
5. Repeat

What you probably want is something more like:
1. Move object
2. If object is colliding, move object back.
3. Draw frame
4. Repeat

By the way, now might be a good time to learn how to use a debugger if you haven't already  ;) . These types of problems are usually pretty easy to spot when using one

Thanks again!! Now it's working. For others who maybe need help: I've changed the collision checker in my Update Method:
            pos += vel * dt;
            sprite.Position = pos;

            bool IsCollision = collision();
            Program.collisionText.DisplayedString = "Collision: " + IsCollision.ToString();
            if (IsCollision)
            {
                sprite.Position = oldPos;
                pos = sprite.Position;
            }
            else
            {
                oldPos = sprite.Position;
            }

:)

2
Graphics / Re: Collision of two sprites is very weird
« on: April 26, 2019, 09:41:27 pm »
During a collision you seem to reset you sprite's position back to 'oldPos', but you never reset the variable you used to calculate the position, 'pos'.
Ohh, right. What a big mistake from me. - Thanks, now it works a bit.

Another question: Is it possible to let it look cleaner and better without that flickering (because of setting the position) while colliding with (in this example) the resource?

Video: https://streamable.com/zorot

Greetings

3
Graphics / Collision of two sprites is very weird
« on: April 26, 2019, 06:39:02 pm »
Hello Community,

I'm new in this forum and I need some help from you, because I'm currently hanging on some collision stuff.
I can't explain it in words, so watch this video, so you can understand what I mean with it's weird: https://streamable.com/k5frd

Code (C#):
// UPDATE
bool canMove = true;
            if(collision())
            {
                canMove = false;
            }
            else
            {
                oldPos = sprite.Position;
            }

            if(canMove)
            {
                pos += vel * dt;
                sprite.Position = pos;
            }
            else
            {
                sprite.Position = oldPos;
                canMove = true;
            }

// INPUT HANDLER
if(Keyboard.IsKeyPressed(Keyboard.Key.W) || Keyboard.IsKeyPressed(Keyboard.Key.Up)) {
                dir.Y -= 1.0f;
            }
            if (Keyboard.IsKeyPressed(Keyboard.Key.A) || Keyboard.IsKeyPressed(Keyboard.Key.Left))
            {
                dir.X -= 1.0f;
                sprite.Origin = new Vector2f(sprite.GetLocalBounds().Width, 0);
            }
            if (Keyboard.IsKeyPressed(Keyboard.Key.S) || Keyboard.IsKeyPressed(Keyboard.Key.Down))
            {
                dir.Y += 1.0f;
            }
            if (Keyboard.IsKeyPressed(Keyboard.Key.D) || Keyboard.IsKeyPressed(Keyboard.Key.Right))
            {
                dir.X += 1.0f;
                sprite.Origin = new Vector2f(0, 0);
            }

            if(dir.X == 0.0f && dir.Y == 0.0f)
            {
                dir = new Vector2f(0.0f, 0.0f);
            }
            else
            {
                dir = dir / (float)Math.Sqrt(2.0f);
            }

            SetDirection(dir);

// SET DIRECTION

private void SetDirection(Vector2f dir)
        {
            vel = dir * speed;
        }

// COLLISION CHECK

private bool collision()
        {
            if(Program.map != null)
            {
                foreach (Resource resource in Program.map.resources)
                {
                    if (CollisionTester.PixelPerfectTest(sprite, resource.sprite, 0))
                    {
                        return true;
                    }
                }
            }
            return false;
        }

Appreciate all kind of help. Thanks :)

Pages: [1]
anything