Asynchronous control of many objects

Jim Hurley jhurley at infostations.com
Thu May 13 09:42:46 EDT 2004


Message: 21
Date: Wed, 12 May 2004 22:24:02 -0700
From: Scott Rossi <scott at tactilemedia.com>
Subject: Re: Asynchronous control of many objects
To: How to use Revolution <use-revolution at lists.runrev.com>
Message-ID: <BCC85482.DAEF%scott at tactilemedia.com>
Content-Type: text/plain; charset="US-ASCII"

Recently, "Jim Hurley" wrote:

>  I have a question about asynchronous movement of a large number of
>  graphic objects.
>
>  For example, consider a window with 50 graphic objects, perhaps 50
>  small spheres--balls.
>
>  I want to have all these objects moving asynchronously. The stack in
>  which this comes up can be seen by running the following in the
>  message box:
>
>  go url "http://home.infostations.net/jhurley/MultipleBalls.rev"
>
>  My problem is that I use the *identical handler* in *each* of the 50
>  balls. That seems inefficient. Is there a way to control a large
>  number of objects asynchronously without duplicating the handler in
>  each of the objects?

>There are many ways.  Here's one (type the following in your message box):
>
>   go url "http://www.tactilemedia.com/download/overkill.rev"
>
>See the card script for details.
>
>Snowglobe anyone?
>
>-----
>
>FWIW, in my experience, I've found that:
>
>1) Enabling each object to track its own position via its own code requires
>much heavier processor use than using one master script to move everything
>simultaneously.  I've locked up several Windows systems doing what you
>describe above, crashing Rev.  YMMV.
>
>2) Interestingly, locking the screen between each call to position multiple
>objects can also place a high demand on the processor; removing the lock
>screen is surprisingly less demanding and, if your objects are small enough,
>you won't notice much delay if any between the move of the first and last
>objects.
>
>3) Look at balancing the frequency of the message used to move the objects
>versus the actual distance moved.  Sometimes you can employ longer interval
>between moves with a longer distance moved to cut down on processor use, but
>too long a distance may produce jittery, unacceptable results.
>
>Depending on the size/type of objects, you may not be happy with performance
>beyond about 30 to 40 objects or so.  The above demo does indeed use 50
>objects and seems to perform acceptably on Mac OSX, but also appears to near
>max out the processor.  Watch out for this on Windows (on my systems, Macs
>seem to be more forgiving).  Again, YMMV.
>
>Regards,
>
>Scott Rossi
>Creative Director
>Tactile Media, Development & Design

Scott,

Thank you for the example and the analysis. It was a revelation! I 
had no idea that it was possible to sequentially move so many objects 
without it appearing that they were moving in sequence. It was for 
that reason that I gave each object its own code. That was probably 
naive since the processor must, in some sense, act sequentially on 
the objects.

I tried locking and unlocking the screen at the beginning and end of 
the repeat loop without noticeable effect. After the speed 
constraints of HC, I continue to be amazed at how quick RR is.

Jim



More information about the Use-livecode mailing list