Alex, Eagerly awaiting news of your progress! — Scott Morrow
Elementary Software (Now with 20% less chalk dust!) web https://elementarysoftware.com/ email sc...@elementarysoftware.com booth 1-800-615-0867 ------------------------------------------------------ > On Jun 30, 2020, at 6:40 PM, Alex Tweedly via use-livecode > <use-livecode@lists.runrev.com> wrote: > > Hi David, > > I had a quick look at this (for slightly selfish reasons - I will be doing > some simple animation soon, so this piqued my interest to look at it sooner > :-) > > [ all comments on performance or timing here are on an aging (2011) Macbook > Pro, LC 9.6.0 ] > > So, there's good news, and there's bad news :-) > > 1. Bad news. > > It is slow (surprisingly, disappointingly slow) to move graphic objects in > LC. Moving small simple objects (unfilled circle graphics <20 pixels across) > over an uncomplicated background. Each move takes between 1 and 2.6 msecs. > (Yes, that's for one object !!) > > [ Puts on 'grumpy old man' hat = that's about the same time as it took on my > old Atari ST - 34 years ago!! Where's Moore's Law when I need it :-). ] > > 2. Good news. > > Although disappointing performance, it is (probably) good enough for your > described example. Around 30 simple, small objects moving, 20 fps ~= 700ms > within a second; it should just be doable. > > 3. Bad News. > > You're on the edge !! The timings above were for moving objects in a simple, > tight loop. (see sample code below my sig.) You have a little bit of spare > CPU left over to handle overhead, object management, new co-ord calculation, > etc., but not very much. > > Animation Engine. > > It's a powerful library - has lots of good stuff to do fading, morphing, > collision detection, input constraint, color changes, animated scrolls > (bounce, overshoot, ...), and then it has two methods of just *moving* LC > controls. > > The 'classic' version requires the developer to set up a timer/loop handler, > and use the various aeMovexxx handlers; because of the timer handling it's > tricky and needs care from the developer. > > The other version is only for straight line moves (aeMoveTo); this is much > simpler to use, can handle multiple shapes moving in synch and does it very > efficiently. (The older equivalent was aeMoveLinear, which is deprecated). If > all your moving is (or can be cast into) using this version, you might have > no problems. Note Malte describes aeMoveTo as 'frame-perfect' - all the moves > done by aeMoveTo happen perfectly aligned by the (single) frame timer, so > moves can be precisely coordindated to start and/or finish at exactly the > same time. > > If it can't be, then you might think about adding new functionality to AE to > provide a similar capability , using the same single timer that aeMoveTo uses. > > My needs are slightly different:- > 1. linear and "hop" moves only (*) > 2. need to string together multiple moves within a 'frame-perfect' setting > > btw - this 'stringing together' is exactly what you would need for hand-drawn > curve following; you'd form a points-list from the hand-drawing, then > construct a series of linear moves along each edge. > > I decided the easiest way to achieve what I need was a simple > purpose-specific library, that has just these features. It's simple to use, > understand and debug - currently < 200 lines, and likely to finish up around > 250 lines by the time I'm done adding features. > > (*) What's a "hop" move? > Think of a child's board game (Ludo, S&Ladders, ...) When you move a piece, > you don't (if you're playing with a child) usually just pick it up and move > it (say) 5 squares, instead you go "...1...2...3...4...5", while touching the > piece in or near each square in turn. That's a hop move (or a series of > hop-moves. :-) > > Anyway - I have that working now, so with luck I'll get a chance to work on > it this week and get it tidied up, and release a first version by the > weekend, so if you (or anyone) is interested they can try it out. > > Alex. > > Simple benchmark: > > I finished up with a pretty trivial example bit of code: > > > > put the loc of grc "g1" into tmp > > repeat 100 times > > add 1 to item 1 of tmp > > set the loc of grc "g1" to tmp > > wait 0 with messages > > end repeat > > Notes: > > 0. Graphic "g1" is a simple, small circle. > > 1. if the graphic wanders off screen (out of window) the time taken drops to > 0. > > 2. If you remove the "add 1 to item 1 of tmp" (i.e. the graphic remains in > the same place), then again the time drops to effectively 0. > > So with this simple code, I find that (on my aging Macbook Pro), those 100 > moves take between 125 and 275 ms (i.e. just about 1 to 2.5 ms per shape to > move). And that variation is easily matched against the complexity of the > surroundings the piece is moving through - if it moves over (or under) many > other graphic objects, it takes clearly longer. > > Good luck. > > On 28/06/2020 01:09, David Bovill via use-livecode wrote: > >> I made a quick test - creating and animating small graphic circles along a >> complex curve with many points. It works fine with one or two animated >> spheres but I’d like to be able to animate >30 and it slows to a crawl after >> 4 or 5. I tried setting the layer mode appropriately for all the objects - >> but I’m doing this on a new MacBook Pro - and it does not make a difference. >> >> Does anyone have an example stack with multiple animated objects that I can >> compare / test for speed? >> _______________________________________________ >> use-livecode mailing list >> use-livecode@lists.runrev.com >> Please visit this url to subscribe, unsubscribe and manage your subscription >> preferences: >> http://lists.runrev.com/mailman/listinfo/use-livecode _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode