Circle Collisions

The Actionscript
FlashJunkie
This user is yet to take control of their account and provide a biography. If you are the author of this article, please contact us via support AT actionscript DOT org.
View all articles by FlashJunkieThe actions in the second frame provide the driving force behind the circle collisions .FLA. I've placed comments along the way to help you understand what's happening.
Comment: ----------------------------------------------
Comment: start move
Comment: ----------------------------------------------
Set Variable: "my_radius" = (GetProperty ("", _width) / 2)
Comment: 'n' is always 'name' of circle.
Set Variable: "my_x" = GetProperty("",_x)
Set Variable: "my_y" = GetProperty("",_y)
Set Variable: "my_n" = GetProperty("",_name)
If (ymov="")
Comment: *********************************
Comment: ----------------------------------------------
Comment: first run through code,
Comment: this will initialize circle
Comment: ----------------------------------------------
Comment: *********************************
Comment: pick a distance:
Set Variable: "ymov" = Random(/:speed)+1
Set Variable: "xmov" = Random(/:speed)+1
Comment:
Comment: pick a direction:
Set Variable: "ysign" = random(2)-1
If (ysign=0)
Set Variable: "ysign" = 1
End If
Set Variable: "xsign" = random(2)-1
If (xsign=0)
Set Variable: "xsign" = 1
End If
Comment: adjust x and y movement
Set Variable: "xmov" = xmov*xsign
Set Variable: "ymov" = ymov*ysign
Comment: ----------------------------------------------
End If
Comment: *********************************
Comment: ----------------------------------------------
Comment: check edges
Comment: ----------------------------------------------
If (my_x<=my_radius+/:speed)
Set Variable: "xmov" = xmov*-1
Set Variable: "my_x" = my_radius+/:speed
End If
If (my_y<=my_radius+/:speed)
Set Variable: "ymov" = ymov*-1
Set Variable: "my_y" = my_radius+/:speed
End If
If (my_x>=/:movie_width-my_radius-/:speed)
Set Variable: "xmov" = xmov*-1
Set Variable: "my_x" = /:movie_width-my_radius-/:speed
End If
If (my_y>=/:movie_height-my_radius-/:speed)
Set Variable: "ymov" = ymov*-1
Set Variable: "my_y" = /:movie_height-my_radius-/:speed
End If
Comment: ----------------------------------------------
Comment: check for collision
Comment: ----------------------------------------------
Set Variable: "n" = 1
Comment: start checking for collisions
Loop While (n<=/:total_circles)
//Comment: don't check myself
If (n ne my_n)
Set Variable: "n_x" = GetProperty("../"&n,_x)
Set Variable: "n_y" = GetProperty("../"&n,_y)
Set Variable: "n_radius" = (GetProperty ("../"&n, _width) / 2)
Set Variable: "delta_x" = (my_x+xmov)-(n_x)
Set Variable: "delta_y" = (my_y+ymov)-(n_y)
If ((delta_x * delta_x + delta_y * delta_y) < ((my_radius + n_radius) * (my_radius + n_radius)))
Comment: ----------------------------------------------
Comment: handle collisions
Comment: ----------------------------------------------
Comment: I collided with circle 'n'.
Set Variable: "nx" = Eval("../"&n&":xmov")
Set Variable: "ny" = Eval("../"&n&":ymov")
Comment: swap travel values with it.
Set Variable: "tempx" = xmov
Set Variable: "xmov" = nx
Set Variable: "../"&n&":xmov" = tempx
Set Variable: "tempy" = ymov
Set Variable: "ymov" = ny
Set Variable: "../"&n&":ymov" = tempy
Set Variable: "../"&n&":collision" = my_n
Else
End If
End If
Set Variable: "n" = n+1
End Loop
Comment: ----------------------------------------------
Comment: move me
Comment: ----------------------------------------------
Set Property ("", X Position) = my_x + xmov
Set Property ("", Y Position) = my_y + ymov
Comment: ----------------------------------------------
Finally, the action in the third frame loops back to the second to keep the movie flowing and checking for collisions.
Go to and Play (_currentframe-1)
It's that easy. It's a really simple concept with lots of potential, especially in games. I hope this has inspired you! Good luck and happy flashing.

