Optimisation for simultaneous AE calls

Create fast, sprite powered games with Animation Engine, co-developed with DerBrill Software!

Moderators: heatherlaine, kevinmiller, robinmiller, malte

Optimisation for simultaneous AE calls

Postby donbrae » Sun Feb 02, 2014 12:57 pm

Hey,

I'm experiencing a drop in frame rate when performing two AE animations simultaneously. Here's an example of code I'm using to create an effect of on-screen elements "evaporating":

Code: Select all
aeLockMoves
aeMoveTo the long id of group "app_controls", item 1 of the loc of this card, tStartingPoint, 350 -- Move controls up
aeFadeOut the long id of group "app_controls", 300 -- Fade controls out
aeUnlockMoves

I've played around with the frame rate (setting it to anywhere between 30 and 100) but the "juddery-ness" persists. All elements in the group have their Layer Mode set to Dynamic, and have their size and position locked.

It tends to be slightly better in the simulator but is really noticeable on my 5s.

Before I go digging into the AE code a bit more, I thought I'd check whether anyone here has experienced and overcome this issue already?

Many thanks,

Jamie
Jamie Smith
Composer, web dev, LiveCoder
www.donbrae.co.uk - Donbrae Studios: Music for games, film, TV, web
jamieonkeys.tumblr.com - My game development blog
donbrae
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
 
Posts: 19
Joined: Sun Feb 22, 2009 9:49 pm
Location: Edinburgh, Scotland, UK

Re: Optimisation for simultaneous AE calls

Postby dave.kilroy » Sun Feb 02, 2014 3:22 pm

Hi Jamie

Yes I had a similar issue (moving a group containing quite a few controls) and what I did in the end was to take a snapshot of the group prior to moving, move the snapshot image with AE, and once it had reached it's final position I'd move the group into place under the image and finally delete the snapshot

Maybe you or someone else can come up with a better way (I'd love to hear it) but that was the only way I could get round a slight 'judder' on moving the group on an app for iPads

Dave
"...this is not the code you are looking for..."
dave.kilroy
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
 
Posts: 824
Joined: Wed Jun 24, 2009 1:17 pm
Location: Plymouth, UK

Re: Optimisation for simultaneous AE calls

Postby dave.kilroy » Sun Feb 02, 2014 3:24 pm

Also, I found that simply resetting the blend level in a repeat loop gave better performance than aeFadeOut...
"...this is not the code you are looking for..."
dave.kilroy
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
 
Posts: 824
Joined: Wed Jun 24, 2009 1:17 pm
Location: Plymouth, UK

Re: Optimisation for simultaneous AE calls

Postby donbrae » Mon Feb 03, 2014 8:12 pm

Many thanks, Dave. Will go ahead and try animating a snapshot.
Jamie Smith
Composer, web dev, LiveCoder
www.donbrae.co.uk - Donbrae Studios: Music for games, film, TV, web
jamieonkeys.tumblr.com - My game development blog
donbrae
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
 
Posts: 19
Joined: Sun Feb 22, 2009 9:49 pm
Location: Edinburgh, Scotland, UK

Re: Optimisation for simultaneous AE calls

Postby dave.kilroy » Mon Feb 03, 2014 11:16 pm

Hi Jamie - this is the guts of how I arrange the snapshot stuff...

What I'm moving is a group which acts as the basis for a scroller (made up of 52 fields and 52 images - and depending on user play/progress up to a further 52 smaller images) - I also have a button (an image) which usually sits on the edge of the iPad screen and the user presses to slide the scroller out into view and later on can be pressed again to slide the scroller away out of sight

So I'm moving the group plus the button image plus the scroller itself (I delete it once it is out of sight and recreate it when the scroller is next called)

First from the image button's mouseUp handler I call the swapImage handler to take a screenshot of the current state of the scroller and the group behind it and put the name of this new image into sReplacementImage. Back in the mouseUp I then use aeMoveTo to move the snapshot and button image - and if I'm moving the scroller out into view get the scrollerPanelExtended handler to call itself every quarter second to see if it has reached its fully open position - if it has then I move the group and scroller out to be under the snapshot and then delete the snapshot leaving a functioning scroller in it's place.

If the scroller is in the open position and it is being called to slide out of view the process is similar except this time I get the scrollerPanelHidden to check whether it is fully hidden - and then deal with tidying up...

I have other handlers that create and recreate the scroller, make sure the controls in the group are properly positioned and contain the correct text, image files etc but the 'meat-and-potatoes' of the image substitution is in the following three handlers:

Code: Select all
on swapImage
   lock screen
   import snapshot from grp "grpScrlGames" of grp "grpScrollerModule"
   
   if gHideScroller = true then--scroller is hidden, about to come out
      set the name of the last img to "imgHiddenGoingToSlideOut"
      put "imgHiddenGoingToSlideOut" into sReplacementImage
   else--scroller is out, about to slide in
      set the name of the last img to "imgOutGoingToSlideIn"
      put "imgOutGoingToSlideIn" into sReplacementImage
   end if
   
   set the loc of img sReplacementImage to the loc of grp "grpScrlGames"
   unlock screen
end swapImage


on scrollerPanelExtended
   put item 1 of the loc of image "imgShowHideSlider" of group "grpScrollerModule" into tLeft
   put item 1 of gLocShowHideScrollerShow into tLeft2
   
   --once scroller panel is fully extended change the button to 'up' status
   if tleft < tLeft2 then
      send scrollerPanelExtended to me in 250 millisecs
   else
      lock screen
      set the filename of image "imgShowHideSlider" of this card to "images/buttons/" & sImgNameUp
      set the loc of grp "grpScrlGames" to the loc of the last image
      delete img sReplacementImage--the last image
      show grp "grpScrlGames"
      put empty into sMouseUp
      unlock screen
   end if
end scrollerPanelExtended


on scrollerPanelHidden
   put item 1 of the loc of the last image into tLeft
   put item 1 of gLocgrpScrlGamesHide into tLeft2
   
   --once scroller panel is fully hidden change the button to 'up' status
   if tleft > tLeft2 then
      send scrollerPanelHidden to me in 250 millisecs
   else
      set the loc of grp "grpScrlGames" to gLocgrpScrlGamesHide
      set the filename of image "imgShowHideSlider" of this card to "images/buttons/" & sImgNameUp
     
      set the vscroll of group grpScrlGames to 0
     
      put the short name of the last image into tN
      if tN <> "imgGettingStarted" then
         delete img sReplacementImage--the last image
      end if
      put empty into sMouseUp
   end if
end scrollerPanelHidden


I'd be really interested to hear how you get on - and of course if anyone has suggestions for improving my lashed-together code I'd be delighted to read that too :)

Kind regards

Dave
"...this is not the code you are looking for..."
dave.kilroy
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
 
Posts: 824
Joined: Wed Jun 24, 2009 1:17 pm
Location: Plymouth, UK


Return to Animation Engine

Who is online

Users browsing this forum: No registered users and 1 guest