How to move sprites smoothly using Schedule(...)?

Hello!

In my app a small sprite moves constantly, which means sprite position changes with every small time. To do so, I use:

Schedule (LoopAnimation);

And in LoopAnimation I change sprite coordinates every time the function is called. The issue is that sprite does not move smoothly. Once in a few seconds the function call is delayed for ~200msec, seems to be, so the sprite goes to "pause" state and visually it does not look good. CPU load is almost 0%, the app is not heavy at all and the sprite is small too. I found that in "Debug" mode of the app, it works more smooth, actually. I do not see "pauses" at all, while in "Release" mode I see a lot. Any help is appreciated!

Posts

  • HeikofantHeikofant USUniversity ✭✭

    What do you exactly do in your LoopAnimation ?
    Would it be an option to use CCMoveTo or CCBezierTo instead?

  • FedorBushlanovFedorBushlanov VNMember

    What do you exactly do in your LoopAnimation ?

    Inside it I have something very similar to:

    void LoopAnimation(float frameTimeInSeconds) { ... i++; spriteSign.PositionX += a[i]; spriteSign.PositionY += b[i]; ... }

    So I simply change sprite position every time, by adding to its X and Y coordinates fixed values from predefined array. Again, I have "pauses" not at some specific coordinates or time, but very randomly. So it's definitely not an issue of a[] or b[] values.

    Would it be an option to use CCMoveTo or CCBezierTo instead?

    I haven't tried it yet, will do. But in theory, if it's a problem of LoopAnimation "fickle"calls, then my CCMoveTo will be called in the same scenario and will not help.

  • kjpou1kjpou1 LUMember, Xamarin Team Xamurai

    Fedor

    Could something like this work from the Smooth Follow code?

  • Could something like this work from the Smooth Follow code?

    I tried to study, but failed unfortunately. I can't get the point of EventDispatcher mechanism. I understand that we create an event, which is "sprite needs a move" in our case, by creating of public class SmoothFollowTest : EventDispatcherTest class with some methods (the methods are easy to get). But when the event suppose to happen, and how to setup the event schedule? More, it must happen on a periodic basis, I would even say "more" periodic than by using of Schedule(). Is there any simple example of how to work with such events - to schedule them, create and delete, and how to "connect" them with main application classes?

  • kjpou1kjpou1 LUMember, Xamarin Team Xamurai

    Fedor

    There are quite a few specific simple examples here. There are also spread throughout the CocosSharp tests where you can see specific uses.

    Still not exactly sure what you are after if the Smooth Follow code did not help.

  • FedorBushlanovFedorBushlanov VNMember
    edited November 2015

    Hello! I'm finally almost happy as I found out the issue, or better say the reason of explained strange (for me) behavior. So I thought that my problem is that method given to Schedule() is not invoking evenly, say with exact constant time between invokes. And it looked so, because in that method I move some sprites, and they don't move smoothly. I commented Schedule() and moved my invoke to CCApplication.Update(), because Update() invoked always, many times per second and basically I made it the point to start my investigation from. Nothing changed, literally, I even thought I forgot to recompile. So it's how I realized my method given to Schedule() is finally invoked from Update(), somehow. And it means Update() is not invoking evenly! Okay, so I decided to debug the app. Ooops!!! In debug mode it works superb! No any delays in my sprites moves! So I started to change my "release" project settings to those values in "debug" mode, in order to find which setting causes the behavior. And I found it:

    This setting marked in red is checked in debug mode and unchecked in release. And it causes my problem. I checked it in release and the problem is gone. Next step is to understand why...

  • kjpou1kjpou1 LUMember, Xamarin Team Xamurai

    You can also try the latest v1.7.0.0 to see if that smooths things out. There was some work done in the revamp that may help with this as well.

Sign In or Register to comment.