Animation freeze

Scott Rossi scott at tactilemedia.com
Mon Mar 17 03:26:01 EST 2003


Recently, erik hansen wrote:

>> When moving many individual objects, I've found
>> it's effective to give the
>> objects their own "intelligence": give each
>> object it's own script (based on
>> a master script) that allows it to determine
>> where it is at all times and
>> how it should behave; don't try to control many
>> objects from a central
>> script.
> 
> is there an example anywhere?
> sounds like neural networking.
> or artificial life.

It can be.  Here's a simple example that demonstrates the "intelligence"
principle -- a stack that brings five graphic objects to life and kills them
with the push of a button.

1) Create a new stack

2) Create two buttons: "Master" and "Give Life"; position these at the
bottom of the card

3) Create 5 small oval draw graphics and position them at various locations
on the card

4) Place this script in button "Master":
on mouseUp
  # THIS ALLOWS EASY EDITING OF THE MASTER SCRIPT FOR ALL SPRITE OBJECTS
  if short name of me is "master" then edit script of me
end mouseUp

on activateMe
  set the uAllowLife of me to true
  set the uRate of me to "3,3"
  set the uLimits of me to rect of this cd
  moveMe
end activateMe

on moveMe
  if not the uAllowLife of me then exit moveMe
  # MANAGE HORIZONTAL MOVEMENT
  if item 1 of the uRate of me > 0 then
    if right of me > item 3 of the uLimits of me then
      set the uRate of me to ("-3," & item 2 of the uRate of me)
    end if
  else
    if left of me < item 1 of the uLimits of me then \
       set the uRate of me to "3," & item 2 of the uRate of me
  end if
  # MANAGE VERTICAL MOVEMENT
  if item 2 of the uRate of me > 0 then
    if bottom of me > item 4 of the uLimits of me then
      set the uRate of me to (item 1 of the uRate of me & ",-3")
    end if
  else
    if top of me < item 2 of the uLimits of me then \
       set the uRate of me to (item 1 of the uRate of me & ",3")
  end if
  put the loc of me into tLoc
  add item 1 of the uRate of me to item 1 of tLoc
  add item 2 of the uRate of me to item 2 of tLoc
  set loc of me to tLoc
  send "moveMe" to me in 10 milliseconds
end moveMe

on killMe
  set the uAllowLife of me to false
end killMe


5) Place this script in button "Give Life":
on mouseUp
  set the uLife of me to not the uLife of me
  if the uLife of me then
    repeat with x = 1 to 5
      set script of grc x to script of btn master
      send "activateMe" to grc x in (x*200) milliseconds
    end repeat
  else
    repeat with x = 1 to 5
      send "killMe" to grc x
    end repeat
  end if
end mouseUp

-----

Click the "Give Life" button.  You should see the ball "sprites" come to
life one at a time and bounce.  When each ball senses the edge of the screen
it will change direction.  Click the "Give Life" button again to kill all
movement.  By adding random/changing values to the move rates and timing,
you can create some intricate/organic movement that is handled individually
by each sprite being "self aware".

Regards,

Scott Rossi
Creative Director

Tactile Media, Multimedia & Design
Email: scott at tactilemedia.com
Web: www.tactilemedia.com




More information about the use-livecode mailing list