Trouble with custom platform movement

This forum is currently in read-only mode.
From the Asset Store
Run and Jump in 3 Dimensions! Take your platformer to the next level!
  • How do you make a platform character effectively jump, fall, and land using the custom movement behavior when using timedelta?

    I've come up with like 3 different ways to implement gravity & pixel perfect landing, but every time I add timedelta it gets messed up (the player sometimes lands 1 pixel above the ground, hovers there for a bit, then falls down..or lands inside of the platform) I've tried collision offset, floor detectors, loops, and none of it works once timedelta is added.

    I would greatly appreciate some help with this. I've already wasted all morning trying to figure this out

  • Eh..? Should I post a .cap?

  • Doesn't the Custom Movement behavior already use timedelta?

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Sorry I was really tired when I made that post.

    What I meant was "How do you make a platform character effectively jump, fall, and land using a custom platform movement and timedelta, or the custom movement behavior."

    I've gotten the same results with both - player lands inside platforms or lands a pixel or two above platforms (preventing jumping) then falls down seconds later.

    I tried using a loop in the same way you would for pixel-perfect or instant-hit bullets, but for whatever reason it has no affect.

    I checked out other custom platform movements on the forums, but not a single one of them uses timedelta or the custom movement behavior, and the platform behavior is too wonky with low res games.

  • It's pretty hard to get the precision your looking for using timedelta, and collision detection.

    If you want to go with your own movement I'd suggest not using collision detection at all, and just compare the x, and y values for everything.

    Like if player y is greater than this, set .y to clamp(int(.y+ speed* timedelta),lowest y, highest y) for a fall.

    Even then you might want to use the corner x, and y values, as just setting the hot spot to a corner may cause issues.

  • I have tried and failed with this sort of thing also. A friend of mine made a little example for me yonks ago that I do not have anymore, but what he was doing was banking the timedelta value to a variable that was locked to whole numbers (abs() I think) and setting the movement off that variable.

    Something along those lines anyhow.

  • I find it amusing how the smaller and more straightforward my games get, the more complicated it becomes to make them.

    Anyway, I'm whipping up a .cap with a couple of the platform movements I've tried. Hopefully we can go over them and figure something out, because having problems making the most basic, low-res, framerate independent platform engine

    y'know, those things that have been around since '87

    in Scirra Construct in the year 2011 is just..well, ridiculous.

  • Ok here's the platform movement I came up with using the custom movement behavior. I managed to bring the problems I was having earlier to a minimum, but now I have some new questions.

    Problem 1 is the player will occasionally land a pixel or 2 inside of the platform. I "fixed" it by using the "push out" action, but I'd like it to not go inside the platform at all. I know, I know, it's hardly even noticeable, but it's a still a bug, and it needs to go. *It's easier to see while moving, as the player will stop for just a second when it lands too far into a platform.

    Also, you will see in event 2 that I round the player's x and y positions every tick. I did this because it results in smoother movements and scrolling, and is essential with such a small resolution. Problem is, now the player won't move at all when I use unlimited framerate mode. I'm not sure if this will be a problem for those with higher refresh rates, as I'll be using V-sync mode, so I thought I'd ask you guys about it.

    Finally, take a look at the action in event 14. When entering a value for "Add to vertical speed" it says at the top that the value is in pixels per second, so I wouldn't need to add time delta to it right? Well, switch to unlimited framerate mode and note that jumping no longer works. If you change the 10 to something like 500*timedelta, then jumping works, but now landing is broken. What's up with that? It's as if the value for this action is NOT in pixels per second, as it states.

    Anyhow, you can download the .cap HERE

    Thanks for any help.

  • [quote:1hdneyrp]Problem 1 is the player will occasionally land a pixel or 2 inside of the platform.

    One solution would be to not use "Custom Movement" and just move the Sprite manually.

    Use "overlapping at offset" to check if it will collide after the next move. If it doesn't, move it. If it does then do a loop moving 1 pixel at a time in the direction of motion until it is right against the obstacle.

    [quote:1hdneyrp]Also, you will see in event 2 that I round the player's x and y positions every tick. I did this because it results in smoother movements and scrolling, and is essential with such a small resolution. Problem is, now the player won't move at all when I use unlimited framerate mode.

    Unlimited framerate makes tiny steps in position, which end up getting rounded away every tick.

    For example.

    say Player's X is 100 and horizontal speed is 50 pixels/sec.

    newposition = oldposition + speed * time

    Vsync 60 fps, time=1/60 sec

    newposition = 100 + 50 * 1/60

    =100.83 which rounds to 101

    Unlimited ~ 900 fps, time=1/900 sec

    newposition = 100 + 50 * 1/900

    =100.05 which rounds to 100. No motion.

    Here is your cap modified with a no behavior approach:

    http://dl.dropbox.com/u/5426011/examples4/nobehavior%20platform.cap made in 0.99.97

  • Wow this is a great platform engine. Thanks a lot R0j0!

    ONE MORE THING, then I'll never ask about platform engines ever again The reason I rounded the player's position is because it results in smoother movements and scrolling. For whatever reason, even though you rounded the player's position, it's movements and scrolling are still "jaggy". Swap the actions in event 32 and you'll see how much smoother it is. Again, this 'breaks' the platform engine when in unlimited framerate mode, so I'm assuming it might not work for some people. Is there anything I can do about this?

  • By reversing the actions in event 32 fine changes of movement aren't remembered. In which case unlimited framerate will not work because any small changes in motion will be rounded out, so the object won't move. One thing you could try is use "int" instead of "round" and see if that reduces the jagginess.

  • :T No luck. Int() seems to have the exact same effect as round().

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)