STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228116
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2561 · P5121

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/49391291?noj=FRM49391291-10DC" width="1" height="1"></div>

2D Physics Tutorial.swf

This is the info page for
Flash #41309

(Click the ID number above for more basic data on this flash file.)


Text
Loading...

%

Play

2D Physics Tutorial

Start from...

See what we're actually trying to make

Start from beginning

Section 1 - The Ball

Section 2 - Varying Collisions

Section 3 - The Ground

Section 4 - The Variable slope

Section 5 - Labels and Controls

Section 6 - Further Notes

Next

Previous

Back to main menu

Before we begin...

Just a couple of notes,
1 - Through this I've added coding in dynamic text, so you can copy and paste it.
However in the little chunks through each section I've actually put lots of spaces in
to make the code look like it does when it is in flash, formatted with indents. So just
be aware of that, but at the end of each section there's a copy of the full code from
each MC, in raw flash formatted form.
2 - Throughout keep in mind that flash measures its cartesian co-ordinates from the
top-left hand corner with x increasing left to right and y increasing top to bottom!
3 - Also remember, Flash always uses radians to calculate trigonometric functions.
4 - Hope you enjoy it and maybe even learn a little too!

So, a good place to start here would probably be by taking what we want to be
applying general physics of movement to. Here in the example it's just a simple ball.
Balls really are the simplest things to apply physics to here because they have a fixed
radius from the central point.

So we've got our ball, simple enough.

Section 1: The Ball

Now we need to give it some variables to allow it to move and also accelerate
according to its position in the world. These actions have been put into the MC of
the ball itself.

I've given it 6 variables so far. Acceleration is simply how quickly it will gain speed. In
the model of acceleration I've used in this engine, this will need to be a very low
number. Terminal velocity is the maximum speed the ball will go when travelling in
freefall. Depending on the frame rate of the movie (I normally use 100fps) and the
mass of the object in question, you can play around with this figure to get it to how
you like it. x and y velocities are as they sound, just the speed of the ball in the 2
dimensions. e is the coefficient of restitution. This means the multiplier used for the
velocity if the ball collides with something, but only in the component of velocity that
is towards the wall. So if the ball collided with a wall with head-on speed of

onClipEvent (load) {
var acceleration = 0.005;
var termVelocity = 20;
var yVel;
var xVel;
var e = 0.8;
var f = 0.8;
}

5ms
-1
and e was 0.5 then the velocity going away from the wall after the collision
would be 2.5 ms
-1
. f is along the same principles, standing for friction. But this time it
affects the velocity that is parallel to the surface of what you hit.
Normally, f and e are between 0 and 1. 0 meaning the ball stops if it touches
anything, 1 meaning all speed is conserved, or above 1 will mean the ball speeds up
when it hits things.

Now we need to constrain the ball to be withing the screen, unless of course you
want the ball to be able to go off the screen, but let's assume you don't want that.
First I add a new variable to the list of variables that I started with, called dragged.

This basically means whether the ball is being dragged by the mouse or not, 0
meaning no it isn't and 1 meaing it is, so that if you want to click on the ball and drag
it around, it won't start moving around when you want it to stick to the cursor.

onClipEvent (load) {
var acceleration = 0.005;
var termVelocity = 20;
var yVel;
var xVel;
var e = 0.8;
var f = 0.8;
var dragged = 0;
}

The first bit of constraint we add to the ball MC is that if the ball is above the
absolute ground level (this being the bottom of the movie in this case) then it
accelerates downwards.

What this does is tests to see if the ball is above the floor with the first 'if'
statement, then tests that it isn't being dragged, and if both these tests pass then the
y velocity is increased by the difference between the velocity and the terminal y
velocity, multiplied by our very small number, acceleration. If acceleration were
much bigger, then the ball would reach terminal velocity much quicker, giving the
effect of gravity being stronger, which you can play around with until you get your
desired effect.

onClipEvent(enterFrame){
if (this._y<380) {
if (dragged == 0) {
yVel += (termVelocity-yVel)*acceleration;
}
}
}

Now to the preceeding code we add the next chunk.

onClipEvent(enterFrame){
if (this._y<380) {
if (dragged == 0) {
yVel += (termVelocity-yVel)*acceleration;
}
} else if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}
if (this._x>
530) {
xVel *= -1*e;
yVel *= f;
this._x = 530;
} else if (this._x<20) {
xVel *= -1*e;
yVel *= f;
this._x = 20;
}
}

These three sections here are all just
different versions of the same thing,
explained overleaf.

So take one of these sections.

This one tests whether the ball is trying to fall out the bottom of the screen. This is
done by checking whether the y position of the ball is enough such that the bottom
edge of the ball touches the bottom of the screen. Here, in mine the y position
needs to be 380, because the height of my movie is 400 and the ball has radius 20.

if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}

y = 400

radius = 20, position of ball measured from centre

y = 380

Bottom edge
of the screen

So if this is true, it tells the ball's y velocity to be multiplied by -e. The - because we
want the ball to reverse y direction on hitting the floor, and e because we want to
control the ratio of incoming to outgoing velocity.
The x velocity is just multiplied by f, along the same principles as why we added the
e. Finally, the y position of the ball is then set as the value it needed to be greater
than to count as being 'in the floor'. We add this because flash can't use differential
equations to model things, it uses difference equations, where Δt =

if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}

1

framerate

This means that if the ball is about to hit the surface on one frame, then is actually in
the surface on the next frame, so is rebounded, if e and f are fairly small so the
velocity of the ball after collision isn't enough to get it back out of the surface it'll just
get stuck there and won't be able to escape. So that's why we move the ball just
outside the surface, to stop that happening.

} else if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}
if (this._x>530) {
xVel *= -1*e;
yVel *= f;
this._x = 530;
} else if (this._x<20) {
xVel *= -1*e;
yVel *= f;
this._x = 20;
}
}

If we look now at the other two sections, they're the same except they correspond
to the x values needed for the ball to hit the sides (in my movie the right-hand wall
was at x=550). Notice how which dimension of velocity is mutiplied by -e and which
by f depends on the angle of the surface. ie if the ball hits a vertical wall, you want
the x velocity to be reversed, not the y.

We also need to add this to the actions that we have so far on the MC of the ball.

Of course, we want to say, if the ball's velocity is say 5 in the x, then every frame we
want the ball to move 5 in the x direction, and this does that. Again the dragged test
is included so that while you are dragging the ball, it won't move, but stay still.

if (dragged == 0) {
this._y += yVel;
this._x += xVel;
}

Next we add the ability to actually drag the ball, simply by putting this code at the
end of the code attached to the ball MC so far.

Now you can pick the ball up and drag it around.

on (press) {
this.startDrag(false);
dragged = 1;
velocity = 0;
xVel = 0;
}
on (release, releaseOutside) {
this.stopDrag();
dragged = 0;
}

By now you should have something like this. Note I haven't made the ball bounce off
the ceiling, but you can do this if you want.

This is the code so far, if you want to copy and paste it and have a look at it.

onClipEvent (load) {
var acceleration = 0.005;
var termVelocity = 20;
var yVel = 0;
var xVel = 0;
var e = 0.8;
var f = 0.8;
var dragged = 0;
}
onClipEvent (enterFrame) {
if (this._y<380) {
if (dragged == 0) {
yVel += (termVelocity-yVel)*acceleration;
}
} else if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}
if (this._x>
530) {
xVel *= -1*e;
yVel *= f;
this._x = 530;
} else if (this._x<20) {
xVel *= -1*e;
yVel *= f;
this._x = 20;
}
if (dragged == 0) {
this._y += yVel;
this._x += xVel;
}
}
on (press) {
this.startDrag(false);
dragged = 1;
velocity = 0;
xVel = 0;
}
on (release, releaseOutside) {
this.stopDrag();
dragged = 0;
}

Try remaking this sceneario and fiddling with the variables, see what changes they make.

Next is a section all about circle-on-circle collision, as well as circle-on-surface
collision where the angle of the surface is a determinable variable. As we're still using
circles this is kept quite simple and easy.

Section 2: Varying collisions

First, let's imagine the ball is moving towards a surface which it will bounce off.
Earlier that was easy because we always already knew the pre-determined angle of
that surface, but say if we don't know the angle? What do we do then?

Well imagine the ball in this case, moving towards the surface. It has velocity in the x
and y directions and the surface is of the angle α to the horizontal.

α

Ball

horizontal

V
x

V
y

y

x

One thing we know is that when a ball collides with a surface, we take the
component of velocity parallel to the surface and times it by f, then take the
component of velocity perpendicular to the surface and times that by -e, and that
system works. So let's just do that.

We can resolve our velocities of x and y direction round to give us velocities of
perpendicular to the slope and parallel to the slope.

V
||

V
|_

means velocity parallel to the slope

means velocity perpendicular to the slope

α

π/2 - α

π/2 + α

NB here the angles are shown in
radians, as computers use radians to
calculate trig functions (π = 180°)

So resolving these components of velocity, we get the following formulae.

V
||
= V
x
cos(α) + V
y
cos(π/2 - α)
= V
x
cosα + V
y
sinα
V
|_
= V
x
cos(π/2 + α) + V
y
cos(α)
= -V
x
sinα + V
y
cosα
= V
y
cosα - V
x
sinα

To print these formally,

V
|| before
= V
x
cosα + V
y
sinα
V
|_ before
= V
y
cosα - V
x
sinα

As we know that on collision V
||
is multiplied by f and V
|_
by -e, we can get the new
formulae for these velocities after the collision.

V
|| after
= f(V
x
cosα + V
y
sinα)
V
|_ after
= -e(V
y
cosα - V
x
sinα)

Now all we need to do is resolve these new velocities parallel and perpendicular to
the surface to the x and y directions to gain our new velocities after the collision.

V
x after
= V
|| after
cos(α) + V
|_ after
cos(π/2 + α)
V
x after
= V
|| after
cosα - V
|_ after
sinα
V
y after
= V
|| after
cos(π/2 - α) + V
|_ after
cos(α)
V
y after
= V
|| after
sinα + V
|_ after
cosα
V
y after
= V
|_ after
cosα + V
|| after
sinα

V
|| after
= f(V
x
cosα + V
y
sinα)

V
|_ after
= -e(V
y
cosα - V
x
sinα)

Now just for a bit of rearranging...

V
x after
= V
|| after
cosα - V
|_ after
sinα

V
|| after
= f(V
x before
cosα + V
y before
sinα)
V
|_ after
= -e(V
y before
cosα - V
x before
sinα)

V
x after
= f(V
x before
cosα + V
y before
sinα)cosα + e(V
y before
cosα - V
x before
sinα)sinα
V
x after
= fV
x
cosαcosα + fV
y
sinαcosα+ eV
y
cosαsinα - eV
x
sinαsinα
V
x after
= fV
x
cos
2
α + fV
y
sinαcosα+ eV
y
cosαsinα - eV
x
sin
2
α
V
x after
= V
x
(fcos
2
α - esin
2
α) + V
y
sinαcosα(f + e)

Let's get rid of those
'before's, they're taking up
too much space!

And now the same thing for the y's

V
y after
= V
|_ after
cosα + V
|| after
sinα

V
y after
= -e(V
y
cosα - V
x
sinα)cosα + f(V
x
cosα + V
y
sinα)sinα
V
y after
= -eV
y
cosαcosα +eV
x
sinαcosα + fV
x
cosαsinα + fV
y
sinαsinα
V
y after
= -eV
y
cos
2
α +eV
x
sinαcosα + fV
x
cosαsinα + fV
y
sin
2
α
V
y after
= V
x
sinαcosα(e + f) + V
y
(fsin
2
α - ecos
2
α)
V
y after
= V
x
sinαcosα(e + f) - V
y
(ecos
2
α - fsin
2
α)

Let's get rid of those
'before's, they're taking up
too much space again!

So finally we come out with what we wanted at the start.

V
x after
= V
x
(fcos
2
α - esin
2
α) + V
y
sinαcosα(f + e)
V
y after
= V
x
sinαcosα(e + f) - V
y
(ecos
2
α - fsin
2
α)

And something worth noting is the case where e = f = 1, when you have both these
values fixed as 1.

V
x after
= V
x
(cos
2
α - sin
2
α) + V
y
sinαcosα(2)
V
x after
= V
x
cos2α + V
y
sin2α
V
y after
= V
x
sinαcosα(2) - V
y
(cos
2
α - sin
2
α)
V
y after
= V
x
sin2α - V
y
cos2α

Using the fact that,
cos2α = cos
2
α - sin
2
α
and
sin2α = 2sinαcosα

So if you want e and f to both be one and never want to change them then this
second pair of formulae is much more efficient to use.

V
x after
= V
x
cos2α + V
y
sin2α
V
y after
= V
x
sin2α - V
y
cos2α

We can now calculate the new x and y values of velocity, so long as we have α to
feed into the equations, and that's easy enough to calculate.

A (x
1
, y
1
)

B (x
2
, y
2
)

Take two points on the line, A and B with respective coordinates (x
1
, y
1
) and (x
2
, y
2
).
By using trigonometry, we can see that

α = arctan

y
2
-

y
1

x
2
-

x
1

(     )

Or if we didn't know two points on the line, but instead we knew two points on a
different line that was perpendicular to the original,

C (X
1
, Y
1
)

D (X
2
, Y
2
)

by using the fact that,

α = arctan                     .

X
1
-

X
2

Y
2
-

Y
1

gradient
original
=

-1

gradient
perpendicular

we get that,

Now that we can do this, we can make the ball bounce off of any surface with a
variable angle. But how would we make the ball bounce off another circle? Actually,
by using exactly the method that was just used before for a slope.

Block circle

Ball

Collision line

When two circles touch, it is at just one point, and if we were to draw a tangent to
one circle that passes through this collision point, this tangent would be the same
whichever circle we drew it from, so in this moment of collision they share a
tangent. That means that the ball is bouncing off a single point on the collision line as
though this collision line were a solid surface in itself, and it also means that if you
take the radii of each circle which connect the centres of the circles to the collision

point you get a straight line that passes through the centres of both circles and is
perpendicular to the collision line. So, we can treat the ball as if it were bouncing off
a line, when we know two points on a line that is perpendicular to this surface -
great! Exactly what we need for the rebounding looked at before.

Horizontal

α

Circle (x
1
,y
1
)

Ball (x
2
,y
2
)

α = arctan

x
1
-

x
2

So now we can add a circle to our engine which the ball will bounce off of.

As you can see, the circle actually has an extra layer around it that has been turned
to alpha 0 so you can't see it. This is very important to add, and it's also very
important that this see-through area extends from the visible part of the cirlce by a
distance equal to the radius of the ball. You can see why in a minute. Also give the
circle a name, I called mine 'block'.

I also wanted my block to be draggable so I added this code on the MC of block.

on (press) {
this.startDrag(false);
}
on (release, releaseOutside) {
this.stopDrag();
}

Next I added this code to the block MC. By the way the cos2α and sin2α actually
mean "sin/cos squared" but you just can't do superscript in actionscript.

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

As we can see, we are simply taking the method worked out earlier and applying it
to the movie itself.
If we look at the first line, the reasoning for the extra see-through radius of the ball's
radius becomes clear.

if (this.hitTest(_root.ball._x, _root.ball._y, true)) {

So that the hit test doesn't return a positive result if the boxes surrounding the two
circles are touching but the graphics of the circles aren't, we've used a point hit test.
Where it tests to see whether the actual graphics (including the see-through bit) -
hence the true at the end of the hitTest function - of the block are overlapping the
centre point of the ball. So we need that extra radius on the block, otherwise the
ball would have to overlap the block by its radius's length before the central point of
the circle overlapped the block.

About that last bit of the code:

_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);

That bit. That's been added for the same reason as why we made the y value of the
ball 380 whenever it moved into the floor - because otherwise the ball could get
stuck in the block, so we want to move it away from the block slightly whenever
they hit.
It changes the x position of the ball to be equal to the x position of the block plus
the difference between the two x values multiplied by just over 1, and the same for
the y position. Meaning that the angle of the ball from the block remains the same,
it's just that the ball has been pushed away a little distance to clear it from block. The
number doesn't need to be much over 1, just enough to make sure it always clears
the block, but not too much that you can notice any sort of jump every time the ball
hits the block.

So let's add the block to the model going so far. The code so far for the ball and
block is as follows. Copy and paste it into Word or any other program, up the font
size and have a look.

onClipEvent (load) {
var acceleration = 0.005;
var termVelocity = 20;
var yVel = 0;
var xVel = 0;
var e = 0.8;
var f = 0.8;
var dragged = 0;
}
onClipEvent (enterFrame) {
if (this._y<380) {
if (dragged == 0) {
yVel += (termVelocity-yVel)*acceleration;
}
} else if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}
if (this._x>
530) {
xVel *= -1*e;
yVel *= f;
this._x = 530;
} else if (this._x<20) {
xVel *= -1*e;
yVel *= f;
this._x = 20;
}
if (dragged == 0) {
this._y += yVel;
this._x += xVel;
}
}
on (press) {
this.startDrag(false);
dragged = 1;
velocity = 0;
xVel = 0;
}
on (release, releaseOutside) {
this.stopDrag();
dragged = 0;
}

Ball (with instance name "ball"):

on (press) {
this.startDrag(false);
}
on (release, releaseOutside) {
this.stopDrag();
}
onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

Block (doesn't need instance name):

It should come out like this.

This would be a great point to note out, that if you look back at the code for the
block, not once in it does it refer to anything but the ball and itself, and of course the
phrase "this" is relative to the clip which holds that code. This is very useful because
it means that all you have to do is copy and paste that piece of code into a MC and it
will have those circular collision properties, which is both very quick and easy to
apply to lots of MCs, but is also good because you don't have to clog up a single MC
with lots of different versions of what is basically the same piece of code.

Now, it's quite likely that you're not just going to want the ball to bounce around on
the edges of the screen, you'll probably want some sort of ground. So let's make
some. To start let's just make it out of horizontal and vertical lines, but you really
could make it out of just about any shapes merged together.

Section 3: The Ground

There we are, there's our ground.

If we look at the locus of possible points the centre of the circle could be at when it
touches this ground, we can find out how we're going to make it.

There we are. As you can see, it's a collection of straight lines and curves, all the
ball's radius's distance from the nearest piece of ground.

So how can we turn that into something the ball will bounce off and also know the
direction which the surface of the ground is facing?

We can cut it into several different pieces, different rectangles and partial circles.
And because we already know how to make the ball bounce off of a flat surface as
well as a circle, this should be a doddle.

First make all the pieces into MCs, vertical faces with the same x value or horizontal
faces with the same y value can be put into the same MCs. Note, it's important that
you make the reference point of the MC the centre of the whole circle for the
corner pieces.

So now you can take each upward-facing rectangle surface piece and add this bit of
code to it:

onClipEvent(enterFrame){
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget(_root.ball){
yVel *= -1*e;
xVel *= f;
}
_root.ball._y = 359.5;
}
}

Now this is also, like the circular collision code, basically a universal piece of code
although there is one slight snag - you will have to enter in the according y values for
each one you make:

_root.ball._y = 359.5;

To find out this value, just look at the y value of the red line from the diagram
before, with the locus of the circle on collision with the ground. Normally, this will
just be the rectangle's y value in the properties bar, although you may need to add to
that the height of the rectangle itself, depending on which way the surface is facing.

Then you'd probably better take a little away from that value (or add it on,
depending again on which way the surface is facing) again just to make sure the ball
never gets stuck in the surface. So in mine the top of the surface was at y=360 so I
just took off 0.5, that'll be enough clearance for the ball to get free.

So go through each of your upward facing surfaces, adding that piece of code and
adding in the right y value.

Now the same thing for, you guessed it, the horizontal facing surfaces. This is the
code for it, although you'd probably be able to work out what it is, just swap the
xVel and yVel around and just change the x position of the ball instead of the y.

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
xVel *= -1*e;
yVel *= f;
}
_root.ball._x = 120.5;
}
}

Here in mine the surface was facing toward the right, and the x value (measured to
the left hand side of the rectangle) was 100, the width of it was 20 (the circle's
radius) and I added a little onto the top of that.

_root.ball._x = 120.5;

Now for the corners, which are actually quicker to do than the flat surfaces. All you
need to do is make sure that the reference point of the corner MC is the centre of
the circle that the corner piece forms. For example,

Corner piece

MC reference point

But this should be relatively easy because when you create a new MC it gives you a
choice of where in the movie clip you want the reference point to be, in this
example you'd set it to be the bottom left.

Then just put the same code into the corner that was used for the block, I'll save
you trawling back to find it by giving it to you again.

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

So just apply this to all the corners, and hey presto. Also, I didn't use it in my
example but you can have a go with it if you want; you can put in surfaces that face
down-wards, like a piece of ground with a roof, or you could make a floating piece of
ground, or also you don't have to keep it as a horizontal or vertical flat line, you can
make a slope at a certain angle. You'd do this by using the formulae for a ball's
collision with a line, however instead of calculating α you just need to put in alpha, so
say if alpha was         , sinα would be        and cosα would be         . So you just
rearrange this to give you your new formulae. However then the part that pushes
the ball slightly away becomes a little more complicated, but that'll be covered in the
next section.

π

3

√3

2

Altogether you should have something similar to this, although feel free to explore
what extents you can create the ground surface to.

Here's the coding so far.

onClipEvent (load) {
var acceleration = 0.005;
var termVelocity = 20;
var yVel = 0;
var xVel = 0;
var e = 0.8;
var f = 0.8;
var dragged = 0;
}
onClipEvent (enterFrame) {
if (this._y<380) {
if (dragged == 0) {
yVel += (termVelocity-yVel)*acceleration;
}
} else if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}
if (this._x>
530) {
xVel *= -1*e;
yVel *= f;
this._x = 530;
} else if (this._x<20) {
xVel *= -1*e;
yVel *= f;
this._x = 20;
}
if (dragged == 0) {
this._y += yVel;
this._x += xVel;
}
}
on (press) {
this.startDrag(false);
dragged = 1;
velocity = 0;
xVel = 0;
}
on (release, releaseOutside) {
this.stopDrag();
dragged = 0;
}

Ball (instance name "ball"):

on (press) {
this.startDrag(false);
}
on (release, releaseOutside) {
this.stopDrag();
}
onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

Block (no instance name):

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

All four corners (no
instance names):

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
yVel *= -1*e;
xVel *= f;
}
_root.ball._y = #;
}
}

Upward facing surfaces (no
instance names):

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
xVel *= -1*e;
yVel *= f;
}
_root.ball._x = #;
}
}

Sideways facing surfaces
(no instance names):

NB Where I've put x=# or y=# that's where you'd work out the number and
put it in. I thought it a bit pointless to include them seeing as you're ground
would probably be far different from mine.

By now most of this will probably be pretty familiar to you and this section will
mostly just in fact be revision of things already covered, but some of it is new, so
bear with me.
Now this section is all about making a slope that you can vary. But in what was is it
variable? The length? The angle? We could make a slope where you input into a text
boxes perhaps starting coordinates, length and angles of your slope.
But to be honest it's much easier just to have two draggable points with a line
constantly fixed between the two.
So let's start with our two line-constraining points. I called mine nodes.

Section 4: The Variable Slope

I wanted my nodes to also be circular blocks in themselves, so I started by making
them just in the same way as I made my first circular block, with the extra see-
through radius.

There we are, now to just duplicate that to have two identical circles, called Node1
and Node2.

Now to just apply the classic circular collision code and also the dragging code to
both nodes.

on (press) {
this.startDrag(false);
}
on (release, releaseOutside) {
this.stopDrag();
}
onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

Now for the line between them. For this I first gave the nodes instance names
"node1" and "node2" then I drew my line that I wanted to be strung between them.

To make mine I just drew a nice fat line, converted lines to fills and surrounded the
line with a rectangle which extends upwards and downwards by the distance equal
to the radius of the ball. However with no extension left or right, as you can see
above.

OK, so for a moment let's imagine how we're going to string this together between
the points.

θ

Node1
(x
1
, y
1
)

Node2
(x
2
, y
2
)

M

Take M, the mid point of that line. We know that co-ordinates of that,
. And the coordinates of M are the coordinates of the
central point of the line. We also know θ as well, using                                       .

x
1
+

x
2

2

(      ,      )

y
1
+

y
2

θ = arctan

We also know the length of the whole line between the nodes, being
√((x
1
+ x
2
)
2
+ (y
1
+ y
2
)
2
).
Now we can bring this together to make the overall code for the line MC.

onClipEvent(enterFrame){
this._x = (_root.node1._x + _root.node2._x)/2;
this._y = (_root.node1._y + _root.node2._y)/2;
this._xscale = Math.sqrt(Math.pow(_root.node1._x - _root.node2._x, 2) + Math.pow(_root.node1._y - _root.node2._y, 2))/4;
this._rotation = Math.atan((_root.node2._y - _root.node1._y)/(_root.node2._x - _root.node1._x))*180/Math.PI;
}

You can see all the parts looked at included here in this code. The x and y
coordinates being the mid-point of the line betwwen the two nodes, the scale of the
line being the distance between the two points divided by 4 because it uses the scale
of the line MC, and the rotation being the angle between the two nodes.

So for the code of the line that tells the ball to bounce off of it.

if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((_root.node1._y-_root.node2._y)/(_root.node1._x-_root.node2._x));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
}

We can just use the classic rebound coding, however this time it'll be for a slope, so
α will be the angle of the slope between the nodes, so those points have been used
to calculate α.

But now we need the ball to also be pushed slightly away from the line whenever
they collide, so let's think about that.

y

x

Node1 (x
1
, y
1
)

Node2 (x
2
, y
2
)

Ball (x
b
, y
b
)

O (x
o
, y
o
)

Line A

Line B

So here we have our pair of cartesian axes, the positions of our two nodes, the ball
and also the point O, where the lines A and B intersect perpendicularly.

So let's look at some values of this diagram.
gradient of Line A = gradA =
gradient of Line B = gradB =

Now we've got some gradients we can start do some stuff. Now we'd like to know
the coordinates of the point O. Once we know that we know where the ball is
compared to the line. So one way of finding O is to get equations for lines A and B.
Now to get equations of thse lines we need two things: a gradient, which we have,
and an intersection value of the y axis.

Let's look at where Line A crosses the y axis.

gradA

x
1

x
1
gradA

y
1
- x
1
gradA

So you can see, it intersects the y axis at y
1
- x
1
gradA. Next to consider where Line
B intersects the y axis.

Ball (x
b
, y
b
)

gradB

y
b
- x
b
gradB

x
b

x
b
gradB

Line B intersects the y axis at y
b
- x
b
gradB. So now let's form cartesian equations of
these two lines.

Line A:
y = mx + c
y = xgradA + y
1
- x
1
gradA

Line B:
y = mx + c
y = xgradB + y
b
- x
b
gradB

We know O is the intersection between these two lines, so just simultaneously
solve them for O.

x
o
gradA + y
1
- x
1
gradA = x
o
gradB + y
b
- x
b
gradB
xg
o
radA - x
o
gradB = x
1
gradA- x
b
gradB + y
b
- y
1
x
o
(gradA - gradB) = x
1
gradA- x
b
gradB + y
b
- y
1
x
o
=                                             .

x
1
gradA- x
b
gradB + y
b
- y
1

gradA - gradB

Sub back in for y.

y
o
= x
o
gradA + y
1
- x
1
gradA
y
o
= gradA(x
o
- x
1
) + y
1

I'm gonna leave it as x
o
, I really don't want to have to type the whole thing out again.

OK we have the coordinates of O. Now to use this to recalculate the ball's position.

r = 20

x
b
- x
o

y
o
- y
b

x
b
= x
o
+ rcosθ
y
b
= y
o
- rsinθ
cosθ =
sinθ =

x
b
- x
o

20

y
o
- y
b

Now we can fully redefine the position of the ball in two final phrases. Now we
know that r will actually be 20 here in this case, but we don't want it be 20, we
instead want it to be about 21 just to push the ball away a little. So we insert that
into our previous formulae.

x
b
= x
o
+ rcosθ
y
b
= y
o
- rsinθ
x
b
= x
o
+ 21(x
b
- x
o
)
y
b
= y
o
- 21(y
o
- y
b
)
Or more generally you could say:
x
b
= x
o
+ φ(x
b
- x
o
)
y
b
= y
o
- φ(y
o
- y
b
)
Where φ = ratio between new r value and old r value.

Mathematically speaking, it's of interest to point one thing out. Take one of those
previous formulae.
x
b
= x
o
+ φ(x
b
- x
o
).
If you look at that, if φ were 1, the entire right hand side of the formula would boil
down to just x
b
, which is on the left hand side. It generally is a very useful thing to be
able to do that in this kind of flash coding. That is, if you wanted to change one
aspect of a variable but that one aspect was not readily available, you can often pull
apart all the different aspects that set that variable as what it is until the one aspect
that you want to change becomes isolated. Then you can do whatever you want to
it, whether that be to multiply it by some constant or variable, or add to it some
constant or variable. Then when you put it back together, it won't fit back in like it
used to because one aspect of what makes up that variable has changed, when none
of the others have. Take this example, I wanted to just increase the distance
between the ball and the line by a fraction, so I pulled apart the factors that make up
the ball's position when it's in contact with the line until I got to the part where the
distance between the ball and the line is summed up in one number, that being the r
in the phrase

x
b
= x
o
+ rcosθ
y
b
= y
o
- rsinθ.

Then I could do what I wanted to that r, which in this case was to add 1 to it. Then I
simplified this expression as much as posible, but it will never go back to the
simplicity of what it was previously, that being just x
b
. In any case where you do this,
if you change nothing then the expression will go right back to where it started,
which is very obvious really.
To show that in a differrent manner, imagine you have a machine and you want to
change one little aspect of it's workings, maye the size of one gear that is deep inside
the machine. You're going to have to pull it apart until you can get to that one gear,
then put in a slightly differently sized one, and put it back together. However when
you put it back together you may find that it doesn't fit together so smoothly
anymore. For instance increasing the size of that one gear may prevent some of the
bodywork going back on where it used to fit cleanly, so it must go back on a little
more messily, but at least you've changed that gear, what you wanted to do in the
first place. But if you end up not changing the gear, it'll go back to the same way it
used to be.
Exactly the same is true of what I've just done here.

OK enough with the weird analogies, let's put that into code for the MC of the line.

gradA = (_root.node2._y - _root.node1._y)/(_root.node2._x - _root.node1._x);
gradB = (_root.node1._x - _root.node2._x)/(_root.node2._y - _root.node1._y);
xo = (gradA * _root.node1._x - gradB * _root.ball._x - _root.node1._y + _root.ball._y)/(gradA - gradB);
yo = gradA * (xo - _root.node1._x) + _root.node1._y;
_root.ball._x = 21/20 * (_root.ball._x - xo) + xo;
_root.ball._y = 21/20 * (_root.ball._y - yo) + yo;

By the way, if you wanted the same thing but for a fixed slope on the ground, just
take
x
b
±= tcosθ
y
b
±= tsinθ
Where t is the amount you want to move the ball by and θ is the known angle of the
slope. So for mine, I would've used t = 1, and whatever cosθ or sinθ are in the
coding. ± depends on which way the slope is facing. you'll need to work out whether
you need + or -.
That above is the section for the line that tells the ball to reposition itself, it goes just
under the bit in the line that tells the ball to bounce away. So all the code on the line
MC so far should be as follows.

onClipEvent (enterFrame) {
this._x = (_root.node1._x+_root.node2._x)/2;
this._y = (_root.node1._y+_root.node2._y)/2;
this._xscale = Math.sqrt(Math.pow(_root.node1._x-_root.node2._x, 2)+Math.pow(_root.node1._y-_root.node2._y, 2))/4;
this._rotation = Math.atan((_root.node2._y-_root.node1._y)/(_root.node2._x-_root.node1._x))*180/Math.PI;
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((_root.node1._y-_root.node2._y)/(_root.node1._x-_root.node2._x));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
gradA = (_root.node2._y-_root.node1._y)/(_root.node2._x-_root.node1._x);
gradB = (_root.node1._x-_root.node2._x)/(_root.node2._y-_root.node1._y);
xo = (gradA*_root.node1._x-gradB*_root.ball._x-_root.node1._y+_root.ball._y)/(gradA-gradB);
yo = gradA*(xo-_root.node1._x)+_root.node1._y;
_root.ball._x = 21/20*(_root.ball._x-xo)+xo;
_root.ball._y = 21/20*(_root.ball._y-yo)+yo;
}
}

Alright let's take a look at the coding for all the MCs so far.

onClipEvent (load) {
var acceleration = 0.005;
var termVelocity = 20;
var yVel = 0;
var xVel = 0;
var e = 0.8;
var f = 0.8;
var dragged = 0;
}
onClipEvent (enterFrame) {
if (this._y<380) {
if (dragged == 0) {
yVel += (termVelocity-yVel)*acceleration;
}
} else if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}
if (this._x>
530) {
xVel *= -1*e;
yVel *= f;
this._x = 530;
} else if (this._x<20) {
xVel *= -1*e;
yVel *= f;
this._x = 20;
}
if (dragged == 0) {
this._y += yVel;
this._x += xVel;
}
}
on (press) {
this.startDrag(false);
dragged = 1;
velocity = 0;
xVel = 0;
}
on (release, releaseOutside) {
this.stopDrag();
dragged = 0;
}

on (press) {
this.startDrag(false);
}
on (release, releaseOutside) {
this.stopDrag();
}
onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
yVel *= -1*e;
xVel *= f;
}
_root.ball._y = #;
}
}

onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
xVel *= -1*e;
yVel *= f;
}
_root.ball._x = #;
}
}

Nodes 1 and 2 (instance
names "node1" and
"node2"):

onClipEvent (enterFrame) {
this._x = (_root.node1._x+_root.node2._x)/2;
this._y = (_root.node1._y+_root.node2._y)/2;
this._xscale = Math.sqrt(Math.pow(_root.node1._x-_root.node2._x, 2)+Math.pow(_root.node1._y-_root.node2._y, 2))/4;
this._rotation = Math.atan((_root.node2._y-_root.node1._y)/(_root.node2._x-_root.node1._x))*180/Math.PI;
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((_root.node1._y-_root.node2._y)/(_root.node1._x-_root.node2._x));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
gradA = (_root.node2._y-_root.node1._y)/(_root.node2._x-_root.node1._x);
gradB = (_root.node1._x-_root.node2._x)/(_root.node2._y-_root.node1._y);
xo = (gradA*_root.node1._x-gradB*_root.ball._x-_root.node1._y+_root.ball._y)/(gradA-gradB);
yo = gradA*(xo-_root.node1._x)+_root.node1._y;
_root.ball._x = 21/20*(_root.ball._x-xo)+xo;
_root.ball._y = 21/20*(_root.ball._y-yo)+yo;
}
}

Line (no instance name):

on (press) {
this.startDrag(false);
}
on (release, releaseOutside) {
this.stopDrag();
}
onClipEvent (enterFrame) {
if (this.hitTest(_root.ball._x, _root.ball._y, true)) {
tellTarget (_root.ball) {
α = Math.atan((this._x-_root.ball._x)/(_root.ball._y-this._y));
sinα = Math.sin(α);
cosα = Math.cos(α);
sin2α = Math.pow(sinα, 2);
cos2α = Math.pow(cosα, 2);
xVel = xVel*(f*cos2α-e*sin2α)+yVel*sinα*cosα*(f+e);
yVel = xVel*sinα*cosα*(f+e)+yVel*(f*sin2α-e*cos2α);
}
_root.ball._x = this._x+1.04*(_root.ball._x-this._x);
_root.ball._y = this._y+1.04*(_root.ball._y-this._y);
}
}

So what it should look like now.

This is last actual section here, and really it isn't much of a section, it doesn't contain
any real stuff, just a couple of little extras to stick on afterwards.
First I thought of adding a couple of labels to show the x and y positions of the ball
at any time, so I started with two bits of static text to label two dynamic text boxes
which would show the x and y values.

Section 5: Labels and controls

I gave my dynamic text boxes variables sx and sy in the properties bar

Then I put this code into the ball.

tellTarget(_parent){
sx = String(int(this._x));
sy = String(int(this._y));
}

So it tells the main movie that my variables of the dynamic text boxes are equal to
integer values of the ball's x and y coordinates, integer values bacause I don't want it
to display loads of decimal points. This just goes into anywhere in the
onClipEvent(enterFrame){ section of the ball's code.

Next let's put some controls to use to be able to control the ball in some way.

These are my controls, made up of 5 MCs; 4 arrows and one central blob.

I want it that when you press the buttons the ball moves in that direction, when you
press the central blob the ball stops, and that you can also access these controls
using the arrow keys.

So take the top arrow, let's see the coding for that.

on(press){
tellTarget(_root.ball){
yVel -= 5;
}
}

Pretty obviously, it just tells the ball's y velocity to be less. And just repeat this
process for the other arrows but with corresponding velocity modifiers.
For the central blob, I used this following code.

on(press){
tellTarget(_root.ball){
xVel = 0;
Velocity = 0;
}
}
onClipEvent(enterFrame){
if(Key.isDown(Key.LEFT)){
tellTarget(_root.ball){
xVel -= 0.05;
}
}
if(Key.isDown(Key.RIGHT)){
tellTarget(_root.ball){
xVel += 0.05;
}
}
if(Key.isDown(Key.UP)){
tellTarget(_root.ball){
yVel -= 0.2;
}
}
if(Key.isDown(Key.DOWN)){
tellTarget(_root.ball){
yVel += 0.05;
}
}
if(Key.isDown(Key.SPACE)){
tellTarget(_root.ball){
xVel = 0;
yVel = 0;
}
}
}

As you can see, when this MC is pressed, the ball's
velocities are set to 0. Also, it is on this MC that I
decided to place the key listeners. When the according
keyboard keys are pressed, the ball's according velocity
changes too. However here only by a tiny amount,
simply because the framerate of this movie is so high so
when the key is held down, the ball doesn't accelerate
beyond ridiculousness. As you can see, the y velocity is
decreased more when up is pressed. That's because the
ball must always fight gravity so it needs a little extra
boost in the up direction to help it do this.

So that's it. Here's the new code, although there's very little new coding in this
section.

onClipEvent (load) {
var acceleration = 0.005;
var termVelocity = 20;
var yVel = 0;
var xVel = 3;
var e = 0.8;
var f = 0.8;
var dragged = 0;
}
onClipEvent (enterFrame) {
if (this._y<380) {
if (dragged == 0) {
yVel += (termVelocity-yVel)*acceleration;
}
} else if (this._y>380) {
yVel *= -1*e;
xVel *= f;
this._y = 380;
}
if (this._x>
530) {
xVel *= -1*e;
yVel *= f;
this._x = 530;
} else if (this._x<20) {
xVel *= -1*e;
yVel *= f;
this._x = 20;
}
if (dragged == 0) {
this._y += yVel;
this._x += xVel;
}
tellTarget(_parent){
sx = String(int(this._x));
sy = String(int(this._y));
}
}
on (press) {
this.startDrag(false);
dragged = 1;
velocity = 0;
xVel = 0;
}
on (release, releaseOutside) {
this.stopDrag();
dragged = 0;
}

Ball (instance name "ball"):

on(press){
tellTarget(_root.ball){
yVel -= 5;
}
}

Up arrow:

on(press){
tellTarget(_root.ball){
yVel += 5;
}
}

Down arrow:

on(press){
tellTarget(_root.ball){
xVel -= 5;
}
}

Left arrow:

on(press){
tellTarget(_root.ball){
xVel += 5;
}
}

Right arrow:

Central blob:

on(press){
tellTarget(_root.ball){
xVel = 0;
Velocity = 0;
}
}
onClipEvent(enterFrame){
if(Key.isDown(Key.LEFT)){
tellTarget(_root.ball){
xVel -= 0.05;
}
}
if(Key.isDown(Key.RIGHT)){
tellTarget(_root.ball){
xVel += 0.05;
}
}
if(Key.isDown(Key.UP)){
tellTarget(_root.ball){
yVel -= 0.2;
}
}
if(Key.isDown(Key.DOWN)){
tellTarget(_root.ball){
yVel += 0.05;
}
}
if(Key.isDown(Key.SPACE)){
tellTarget(_root.ball){
xVel = 0;
yVel = 0;
}
}
}

The rest of the coding
hasn't been at all
changed.

That's what it's like.

S
x

S
y

So that's it. That's all the tutorial done. Now this section is just looking at what can
be done with what's been covered and how parts can be developed further.
First off, just looking at how the ball can be changed.

Section 6: Further Notes

Here, e = 0.3, f = 0.9, acceleration = 0.005 and termVelocity = 60. This gives the
impression the ball is made from metal.

Here, e = 0.95, f = 0.5, acceleration = 0.005 and termVelocity = 25. This gives the
impression the ball is made from rubber.

About how this tutorial can be used for other things. Well, I'm not really a very
good Flash game designer but there're lots of games out there that use physics so
this can always be used as a base to build a game off of, I don't know, I guess it's a
matter of imagination and creativity.
Personally I just find making an engine like this much more interesting and rewarding
than making a full game from of, but then that's just me.
Now for some further notes on how things not discussed in the tutorial can be
explored further.
Ok, two other shapes aside from straight lines and circles.

Inverted circles can be done in a way similar to circles.

Make sure the centre of the MC is the centre of the circle produced and that the
grey bit still has that extension of see-through fill, then you can just use the same old
circle formula. Although it will need a new system of repositioning the ball slightly
away from the inverted circle. However that isn't too hard to come by and the
whole collision part of the code taken from regular circles works for this.

Next, ovals.

More difficult than circles, because the tangent isn't always perpendicular to the
radius, which itself is changeable. But it is possible.

Ball

Oval

Now find the equation of the ball using that the equation of a circle is
(x-a)
2
+ (y-b)
2
= r
2
. Then use that the cartesian equation of an oval is
a(x-b)
2
+ c(y-d)
2
= r
2
, where the oval looks like this:

(b, d)

r

a

c

Then equate the equations of the circle and the oval, and you should get a point of
coordinates in x and y of where the circle and the oval meet.

Now you have the x and y co-ordinates of the point of intersection between the
circle and the oval.
If we implicitly differentiate the equation of an oval,
a(x - b)
2
+ c(y - d)
2
= r
2
2a(x - b) + 2c(y - d)dy = 0
2c(y - d)dy = -2a(x - b)
dy = -a(x - b)
This means now you can find the gradient of the oval at the point where the ball and
oval touch, so you know the angle of the effective slope the ball is rebounding off of,
so you can use the same method as before for calculating the new velocities of the
ball.

dx

c(y - d)

You can then create the method where the ball is pushed slightly away from the
surface by taking the distance between the ball's centre and the collision point, then
increasing this distance by, say, 1 as was done before when the circle was pushed
slightly away from the line, but also keeping the angle between the circle's centre and
the collision point the same.

Finally, one thing that you may actually want to put into your system, which I
excluded completely from mine but is very easy to put in, is rotation of the ball.
Especially if the ball has some sort of pattern on it which you want to spin. To do
this, first make a new variable in the ball, probably called "rotationalVelocity" or
anything you want. Then whenever there is a piece of code that expresses a change
of the ball's velocity in a collision, add a piece that says something in the order of
rotationalVelocity += V
||
So for a horizontal or vertical wall, this would be
rotationalVelocity ±= xVel
or
rotationalVelocity ±= yVel.
The ± is because you'll need to put some of them as pluses and some as minuses,
depending on which wall is in question. Just use trial and error until you've got the
right + or - sign for each wall.

For variable slope collisions, just use
rotationalVelocity ±= V
||
Where V
||
is your 'parallel to slope' velocity, being
V
||
= V
x
cosα + V
y
sinα.
Then, just put some type of rotational friction in, which could test whether the
rotation speed is above a small value in magnitude. If it is, then it is made closer to 0
by a certain amount proportional to the rotational velocity. However, if the
rotational velocity is below this small amount in magnitude, then the rotational
velocity is just set as 0. This means that below a certain rotational speed, the ball just
stops turning round.

Something like this could be used.

if(abs(rotationalVelocity) > 1){
rotationalVelocity *= 0.8;
} else {
rotationalVelocity = 0;
}

Well that's it for this tutorial. I hope you enjoyed looking through it, maybe learned
something new, I don't know, I'm not sure how well I've gone through it all really. If
you are at all confused about any of this and want to ask me something, no matter
how trivial, please email me at                                     .
Thanks again, and good luck with any endeavors of your own.
-Laurence

l.hanes@btinternet.com

The ball's position

Move these nodes around and the,
the ball bounces off the line and the
nodes themselves

Move this block around, the ball
bounces off it

Move this ball around and drop it
where you want

The ball bounces off these surfaces

It bounces off
the corners too

Boost the ball around
with these controls

ActionScript [AS1/AS2]

Frame 1
stop();
Frame 2
stop();
Frame 3
stop();
Frame 4
stop();
Frame 5
stop();
Frame 6
stop();
Frame 7
stop();
Frame 8
stop();
Frame 9
stop();
Frame 10
stop();
Frame 11
stop();
Frame 12
stop();
Frame 13
stop();
Frame 14
stop();
Frame 15
stop();
Instance of Symbol 93 MovieClip in Frame 15
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 20; var yVel = 0; var xVel = 0; var e = 0.8; var f = 0.8; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Frame 16
stop();
Frame 17
stop();
Frame 18
stop();
Frame 19
stop();
Frame 20
stop();
Frame 21
stop();
Frame 22
stop();
Frame 23
stop();
Frame 24
stop();
Frame 25
stop();
Frame 26
stop();
Frame 27
stop();
Frame 28
stop();
Frame 29
stop();
Frame 30
stop();
Frame 31
stop();
Frame 32
stop();
Frame 33
stop();
Frame 34
stop();
Frame 35
stop();
Frame 36
stop();
Frame 37
stop();
Frame 38
stop();
Instance of Symbol 207 MovieClip "ball" in Frame 38
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 20; var yVel = 0; var xVel = 0; var e = 0.8; var f = 0.8; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Instance of Symbol 209 MovieClip "block" in Frame 38
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Frame 39
stop();
Frame 40
stop();
Frame 41
stop();
Frame 42
stop();
Frame 43
stop();
Frame 44
stop();
Frame 45
stop();
Frame 46
stop();
Frame 47
stop();
Frame 48
stop();
Frame 49
stop();
Instance of Symbol 252 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 359.5; } }
Instance of Symbol 254 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 120.5; } }
Instance of Symbol 256 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 258 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 260 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 261 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 263 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 249; } }
Instance of Symbol 264 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 169; } }
Instance of Symbol 265 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 299; } }
Instance of Symbol 267 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 269.5; } }
Instance of Symbol 269 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 350.5; } }
Instance of Symbol 271 MovieClip in Frame 49
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 479.5; } }
Instance of Symbol 207 MovieClip "ball" in Frame 49
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 20; var yVel = 0; var xVel = 0; var e = 0.8; var f = 0.8; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Instance of Symbol 209 MovieClip "block" in Frame 49
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Frame 50
stop();
Frame 51
stop();
Frame 52
stop();
Frame 53
stop();
Frame 54
stop();
Frame 55
stop();
Frame 56
stop();
Frame 57
stop();
Frame 58
stop();
Frame 59
stop();
Frame 60
stop();
Frame 61
stop();
Frame 62
stop();
Frame 63
stop();
Frame 64
stop();
Frame 65
stop();
Frame 66
stop();
Frame 67
stop();
Frame 68
stop();
Frame 69
stop();
Frame 70
stop();
Frame 71
stop();
Frame 72
stop();
Frame 73
stop();
Frame 74
stop();
Instance of Symbol 252 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 359.5; } }
Instance of Symbol 254 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 120.5; } }
Instance of Symbol 256 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 258 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 260 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 261 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 263 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 249; } }
Instance of Symbol 264 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 169; } }
Instance of Symbol 265 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 299; } }
Instance of Symbol 267 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 269.5; } }
Instance of Symbol 269 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 350.5; } }
Instance of Symbol 271 MovieClip in Frame 74
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 479.5; } }
Instance of Symbol 207 MovieClip "ball" in Frame 74
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 20; var yVel = 0; var xVel = 0; var e = 0.8; var f = 0.8; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Instance of Symbol 209 MovieClip "block" in Frame 74
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 387 MovieClip in Frame 74
onClipEvent (enterFrame) { this._x = (_root.node1._x + _root.node2._x) / 2; this._y = (_root.node1._y + _root.node2._y) / 2; this._xscale = Math.sqrt(Math.pow(_root.node1._x - _root.node2._x, 2) + Math.pow(_root.node1._y - _root.node2._y, 2)) / 4; this._rotation = (Math.atan((_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x)) * 180) / Math.PI; if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((_root.node1._y - _root.node2._y) / (_root.node1._x - _root.node2._x))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; gradA = (_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x); gradB = (_root.node1._x - _root.node2._x) / (_root.node2._y - _root.node1._y); xo = ((((gradA * _root.node1._x) - (gradB * _root.ball._x)) - _root.node1._y) + _root.ball._y) / (gradA - gradB); yo = (gradA * (xo - _root.node1._x)) + _root.node1._y; _root.ball._x = (1.05 * (_root.ball._x - xo)) + xo; _root.ball._y = (1.05 * (_root.ball._y - yo)) + yo; } }
Instance of Symbol 389 MovieClip "node1" in Frame 74
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 390 MovieClip "node2" in Frame 74
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Frame 75
stop();
Frame 76
stop();
Frame 77
stop();
Frame 78
stop();
Frame 79
stop();
Frame 80
stop();
Frame 81
stop();
Instance of Symbol 427 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 359.5; } }
Instance of Symbol 428 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 120.5; } }
Instance of Symbol 429 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 430 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 431 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 432 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 433 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 249; } }
Instance of Symbol 434 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 169; } }
Instance of Symbol 435 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 299; } }
Instance of Symbol 436 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 269.5; } }
Instance of Symbol 437 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 350.5; } }
Instance of Symbol 438 MovieClip in Frame 81
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 479.5; } }
Instance of Symbol 439 MovieClip "ball" in Frame 81
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 20; var yVel = 0; var xVel = 0; var e = 0.8; var f = 0.8; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } tellTarget (_parent) { sx = String(int(this._x)); sy = String(int(this._y)); }; } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Instance of Symbol 440 MovieClip "block" in Frame 81
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 442 MovieClip in Frame 81
onClipEvent (enterFrame) { this._x = (_root.node1._x + _root.node2._x) / 2; this._y = (_root.node1._y + _root.node2._y) / 2; this._xscale = Math.sqrt(Math.pow(_root.node1._x - _root.node2._x, 2) + Math.pow(_root.node1._y - _root.node2._y, 2)) / 4; this._rotation = (Math.atan((_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x)) * 180) / Math.PI; if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((_root.node1._y - _root.node2._y) / (_root.node1._x - _root.node2._x))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; gradA = (_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x); gradB = (_root.node1._x - _root.node2._x) / (_root.node2._y - _root.node1._y); xo = ((((gradA * _root.node1._x) - (gradB * _root.ball._x)) - _root.node1._y) + _root.ball._y) / (gradA - gradB); yo = (gradA * (xo - _root.node1._x)) + _root.node1._y; _root.ball._x = (1.05 * (_root.ball._x - xo)) + xo; _root.ball._y = (1.05 * (_root.ball._y - yo)) + yo; } }
Instance of Symbol 443 MovieClip "node1" in Frame 81
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 444 MovieClip "node2" in Frame 81
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 450 MovieClip in Frame 81
on (press) { tellTarget (_root.ball) { yVel = yVel - 5; }; }
Instance of Symbol 452 MovieClip in Frame 81
on (press) { tellTarget (_root.ball) { xVel = xVel + 5; }; }
Instance of Symbol 454 MovieClip in Frame 81
on (press) { tellTarget (_root.ball) { xVel = xVel - 5; }; }
Instance of Symbol 456 MovieClip in Frame 81
on (press) { tellTarget (_root.ball) { yVel = yVel + 5; }; }
Instance of Symbol 458 MovieClip in Frame 81
on (press) { tellTarget (_root.ball) { xVel = 0; Velocity = 0; }; } onClipEvent (enterFrame) { if (Key.isDown(37)) { tellTarget (_root.ball) { xVel = xVel - 0.05; }; } if (Key.isDown(39)) { tellTarget (_root.ball) { xVel = xVel + 0.05; }; } if (Key.isDown(38)) { tellTarget (_root.ball) { yVel = yVel - 0.2; }; } if (Key.isDown(40)) { tellTarget (_root.ball) { yVel = yVel + 0.05; }; } if (Key.isDown(32)) { tellTarget (_root.ball) { xVel = 0; yVel = 0; }; } }
Frame 82
stop();
Frame 83
stop();
Instance of Symbol 252 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 359.5; } }
Instance of Symbol 254 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 120.5; } }
Instance of Symbol 256 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 258 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 260 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 261 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 263 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 249; } }
Instance of Symbol 264 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 169; } }
Instance of Symbol 265 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 299; } }
Instance of Symbol 267 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 269.5; } }
Instance of Symbol 269 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 350.5; } }
Instance of Symbol 271 MovieClip in Frame 83
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 479.5; } }
Instance of Symbol 209 MovieClip "block" in Frame 83
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 387 MovieClip in Frame 83
onClipEvent (enterFrame) { this._x = (_root.node1._x + _root.node2._x) / 2; this._y = (_root.node1._y + _root.node2._y) / 2; this._xscale = Math.sqrt(Math.pow(_root.node1._x - _root.node2._x, 2) + Math.pow(_root.node1._y - _root.node2._y, 2)) / 4; this._rotation = (Math.atan((_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x)) * 180) / Math.PI; if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((_root.node1._y - _root.node2._y) / (_root.node1._x - _root.node2._x))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; gradA = (_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x); gradB = (_root.node1._x - _root.node2._x) / (_root.node2._y - _root.node1._y); xo = ((((gradA * _root.node1._x) - (gradB * _root.ball._x)) - _root.node1._y) + _root.ball._y) / (gradA - gradB); yo = (gradA * (xo - _root.node1._x)) + _root.node1._y; _root.ball._x = (1.05 * (_root.ball._x - xo)) + xo; _root.ball._y = (1.05 * (_root.ball._y - yo)) + yo; } }
Instance of Symbol 389 MovieClip "node1" in Frame 83
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 390 MovieClip "node2" in Frame 83
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 463 MovieClip "ball" in Frame 83
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 60; var yVel = 0; var xVel = 0; var e = 0.3; var f = 0.9; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Frame 84
stop();
Instance of Symbol 466 MovieClip "ball" in Frame 84
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 25; var yVel = 0; var xVel = 0; var e = 0.95; var f = 0.5; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Frame 85
stop();
Frame 86
stop();
Frame 87
stop();
Frame 88
stop();
Frame 89
stop();
Frame 90
stop();
Frame 91
stop();
Frame 92
stop();
Frame 93
stop();
Frame 94
stop();
Frame 95
stop();
Instance of Symbol 427 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 359.5; } }
Instance of Symbol 428 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 120.5; } }
Instance of Symbol 429 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 430 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 431 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 432 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 433 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 249; } }
Instance of Symbol 434 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 169; } }
Instance of Symbol 435 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { yVel = yVel * (-1 * e); xVel = xVel * f; }; _root.ball._y = 299; } }
Instance of Symbol 436 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 269.5; } }
Instance of Symbol 437 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 350.5; } }
Instance of Symbol 438 MovieClip in Frame 95
onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { xVel = xVel * (-1 * e); yVel = yVel * f; }; _root.ball._x = 479.5; } }
Instance of Symbol 439 MovieClip "ball" in Frame 95
onClipEvent (load) { var acceleration = 0.005; var termVelocity = 20; var yVel = 0; var xVel = 0; var e = 0.8; var f = 0.8; var dragged = 0; } onClipEvent (enterFrame) { if (this._y < 380) { if (dragged == 0) { yVel = yVel + ((termVelocity - yVel) * acceleration); } } else if (this._y > 380) { yVel = yVel * (-1 * e); xVel = xVel * f; this._y = 380; } if (this._x > 530) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 530; } else if (this._x < 20) { xVel = xVel * (-1 * e); yVel = yVel * f; this._x = 20; } if (dragged == 0) { this._y = this._y + yVel; this._x = this._x + xVel; } tellTarget (_parent) { sx = String(int(this._x)); sy = String(int(this._y)); }; } on (press) { this.startDrag(false); dragged = 1; velocity = 0; xVel = 0; } on (release, releaseOutside) { this.stopDrag(); dragged = 0; }
Instance of Symbol 440 MovieClip "block" in Frame 95
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 442 MovieClip in Frame 95
onClipEvent (enterFrame) { this._x = (_root.node1._x + _root.node2._x) / 2; this._y = (_root.node1._y + _root.node2._y) / 2; this._xscale = Math.sqrt(Math.pow(_root.node1._x - _root.node2._x, 2) + Math.pow(_root.node1._y - _root.node2._y, 2)) / 4; this._rotation = (Math.atan((_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x)) * 180) / Math.PI; if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((_root.node1._y - _root.node2._y) / (_root.node1._x - _root.node2._x))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; gradA = (_root.node2._y - _root.node1._y) / (_root.node2._x - _root.node1._x); gradB = (_root.node1._x - _root.node2._x) / (_root.node2._y - _root.node1._y); xo = ((((gradA * _root.node1._x) - (gradB * _root.ball._x)) - _root.node1._y) + _root.ball._y) / (gradA - gradB); yo = (gradA * (xo - _root.node1._x)) + _root.node1._y; _root.ball._x = (1.05 * (_root.ball._x - xo)) + xo; _root.ball._y = (1.05 * (_root.ball._y - yo)) + yo; } }
Instance of Symbol 443 MovieClip "node1" in Frame 95
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 444 MovieClip "node2" in Frame 95
on (press) { this.startDrag(false); } on (release, releaseOutside) { this.stopDrag(); } onClipEvent (enterFrame) { if (this.hitTest(_root.ball._x, _root.ball._y, true)) { tellTarget (_root.ball) { Set("\u03B1", Math.atan((this._x - _root.ball._x) / (_root.ball._y - this._y))); Set("sin\u03B1", Math.sin(\u03B1)); Set("cos\u03B1", Math.cos(\u03B1)); Set("sin2\u03B1", Math.pow(sin\u03B1, 2)); Set("cos2\u03B1", Math.pow(cos\u03B1, 2)); xVel = (xVel * ((f * cos2\u03B1) - (e * sin2\u03B1))) + (((yVel * sin\u03B1) * cos\u03B1) * (f + e)); yVel = (((xVel * sin\u03B1) * cos\u03B1) * (f + e)) + (yVel * ((f * sin2\u03B1) - (e * cos2\u03B1))); }; _root.ball._x = this._x + (1.04 * (_root.ball._x - this._x)); _root.ball._y = this._y + (1.04 * (_root.ball._y - this._y)); } }
Instance of Symbol 450 MovieClip in Frame 95
on (press) { tellTarget (_root.ball) { yVel = yVel - 5; }; }
Instance of Symbol 452 MovieClip in Frame 95
on (press) { tellTarget (_root.ball) { xVel = xVel + 5; }; }
Instance of Symbol 454 MovieClip in Frame 95
on (press) { tellTarget (_root.ball) { xVel = xVel - 5; }; }
Instance of Symbol 456 MovieClip in Frame 95
on (press) { tellTarget (_root.ball) { yVel = yVel + 5; }; }
Instance of Symbol 458 MovieClip in Frame 95
on (press) { tellTarget (_root.ball) { xVel = 0; Velocity = 0; }; } onClipEvent (enterFrame) { if (Key.isDown(37)) { tellTarget (_root.ball) { xVel = xVel - 0.05; }; } if (Key.isDown(39)) { tellTarget (_root.ball) { xVel = xVel + 0.05; }; } if (Key.isDown(38)) { tellTarget (_root.ball) { yVel = yVel - 0.2; }; } if (Key.isDown(40)) { tellTarget (_root.ball) { yVel = yVel + 0.05; }; } if (Key.isDown(32)) { tellTarget (_root.ball) { xVel = 0; yVel = 0; }; } }
Symbol 12 Button
on (press) { _root.play(); }
Symbol 13 MovieClip Frame 1
_root.stop(); circleLoaded = (_root.getBytesLoaded() / _root.getBytesTotal()) * 118.2; amountLoaded = (_root.getBytesLoaded() / _root.getBytesTotal()) * 100; black._y = 39.2 - circleLoaded; shade._alpha = amountLoaded; percent = String(int(amountLoaded)); if (_root.getBytesLoaded() == _root.getBytesTotal()) { gotoAndStop (3); } play();
Symbol 13 MovieClip Frame 2
gotoAndPlay (1);
Symbol 13 MovieClip Frame 3
stop();
Symbol 21 Button
on (press) { gotoAndStop (95); }
Symbol 24 Button
on (press) { gotoAndStop (3); }
Symbol 27 Button
on (press) { gotoAndStop (4); }
Symbol 29 Button
on (press) { gotoAndStop (17); }
Symbol 31 Button
on (press) { gotoAndStop (40); }
Symbol 33 Button
on (press) { gotoAndStop (52); }
Symbol 35 Button
on (press) { gotoAndStop (75); }
Symbol 37 Button
on (press) { gotoAndStop (82); }
Symbol 40 Button
on (press) { nextFrame(); }
Symbol 43 Button
on (press) { prevFrame(); }
Symbol 46 Button
on (press) { gotoAndStop (2); }

Library Items

Symbol 1 GraphicUsed by:Timeline
Symbol 2 FontUsed by:3 4 5 11 17 19 22 25 28 30 32 34 36 39 42 45 47 48 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 67 69 70 71 72 73 75 78 79 80 81 82 83 84 85 86 87 88 89 90 91 94 95 96 97 98 99 101 103 104 105 106 107 108 109 111 112 113 114 115 118 119 120 122 123 124 125 126 127 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 147 148 149 151 152 153 154 155 156 157 158 160 161 162 163 164 165 166 167 168 169 170 172 173 174 175 176 178 179 181 182 183 184 185 186 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 210 212 213 214 216 217 219 220 221 224 225 226 227 228 229 230 231 232 234 235 236 237 238 239 242 243 245 246 247 248 249 250 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 292 293 294 295 300 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 318 319 320 321 322 323 324 325 326 327 329 330 332 334 335 336 337 338 340 341 342 343 344 345 347 348 349 350 351 352 353 354 355 357 358 359 360 361 362 363 364 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 391 392 393 398 399 400 401 402 403 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 445 446 447 448 459 460 461 464 467 468 469 473 474 475 476 481 482 483 484 485 486 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506
Symbol 3 TextUses:2Used by:13
Symbol 4 TextUses:2Used by:13
Symbol 5 EditableTextUses:2Used by:13
Symbol 6 GraphicUsed by:7
Symbol 7 MovieClipUses:6Used by:13
Symbol 8 GraphicUsed by:9 12
Symbol 9 MovieClipUses:8Used by:13
Symbol 10 GraphicUsed by:13
Symbol 11 TextUses:2Used by:12
Symbol 12 ButtonUses:11 8Used by:13
Symbol 13 MovieClipUses:3 4 5 7 9 10 12Used by:Timeline
Symbol 14 FontUsed by:15 74 147
Symbol 15 TextUses:14Used by:16
Symbol 16 MovieClipUses:15Used by:Timeline
Symbol 17 TextUses:2Used by:Timeline
Symbol 18 GraphicUsed by:Timeline
Symbol 19 TextUses:2Used by:21
Symbol 20 GraphicUsed by:21
Symbol 21 ButtonUses:19 20Used by:Timeline
Symbol 22 TextUses:2Used by:24
Symbol 23 GraphicUsed by:24
Symbol 24 ButtonUses:22 23Used by:Timeline
Symbol 25 TextUses:2Used by:27
Symbol 26 GraphicUsed by:27 29 31 33 35 37
Symbol 27 ButtonUses:25 26Used by:Timeline
Symbol 28 TextUses:2Used by:29
Symbol 29 ButtonUses:28 26Used by:Timeline
Symbol 30 TextUses:2Used by:31
Symbol 31 ButtonUses:30 26Used by:Timeline
Symbol 32 TextUses:2Used by:33
Symbol 33 ButtonUses:32 26Used by:Timeline
Symbol 34 TextUses:2Used by:35
Symbol 35 ButtonUses:34 26Used by:Timeline
Symbol 36 TextUses:2Used by:37
Symbol 37 ButtonUses:36 26Used by:Timeline
Symbol 38 GraphicUsed by:40
Symbol 39 TextUses:2Used by:40
Symbol 40 ButtonUses:38 39Used by:Timeline
Symbol 41 GraphicUsed by:43
Symbol 42 TextUses:2Used by:43
Symbol 43 ButtonUses:41 42Used by:Timeline
Symbol 44 GraphicUsed by:46
Symbol 45 TextUses:2Used by:46
Symbol 46 ButtonUses:44 45Used by:Timeline
Symbol 47 TextUses:2Used by:Timeline
Symbol 48 TextUses:2Used by:Timeline
Symbol 49 BitmapUsed by:50
Symbol 50 GraphicUses:49Used by:Timeline
Symbol 51 TextUses:2Used by:Timeline
Symbol 52 TextUses:2Used by:Timeline
Symbol 53 TextUses:2Used by:Timeline
Symbol 54 TextUses:2Used by:Timeline
Symbol 55 TextUses:2Used by:Timeline
Symbol 56 EditableTextUses:2Used by:Timeline
Symbol 57 TextUses:2Used by:Timeline
Symbol 58 TextUses:2Used by:Timeline
Symbol 59 TextUses:2Used by:Timeline
Symbol 60 EditableTextUses:2Used by:Timeline
Symbol 61 TextUses:2Used by:Timeline
Symbol 62 TextUses:2Used by:Timeline
Symbol 63 EditableTextUses:2Used by:Timeline
Symbol 64 TextUses:2Used by:Timeline
Symbol 65 EditableTextUses:2Used by:Timeline
Symbol 66 GraphicUsed by:Timeline
Symbol 67 TextUses:2Used by:Timeline
Symbol 68 GraphicUsed by:Timeline
Symbol 69 TextUses:2Used by:Timeline
Symbol 70 TextUses:2Used by:Timeline
Symbol 71 EditableTextUses:2Used by:Timeline
Symbol 72 TextUses:2Used by:Timeline
Symbol 73 TextUses:2Used by:Timeline
Symbol 74 TextUses:14Used by:Timeline
Symbol 75 TextUses:2Used by:Timeline
Symbol 76 GraphicUsed by:Timeline
Symbol 77 FontUsed by:78 101 102 117 118 119 123 125 127 130 131 132 134 135 136 139 140 143 145 149 151 155 164 180 183 193 245 301 305 310 316 361 367 368 369 373 493
Symbol 78 TextUses:2 77Used by:Timeline
Symbol 79 EditableTextUses:2Used by:Timeline
Symbol 80 TextUses:2Used by:Timeline
Symbol 81 TextUses:2Used by:Timeline
Symbol 82 TextUses:2Used by:Timeline
Symbol 83 EditableTextUses:2Used by:Timeline
Symbol 84 TextUses:2Used by:Timeline
Symbol 85 TextUses:2Used by:Timeline
Symbol 86 TextUses:2Used by:Timeline
Symbol 87 EditableTextUses:2Used by:Timeline
Symbol 88 TextUses:2Used by:Timeline
Symbol 89 TextUses:2Used by:Timeline
Symbol 90 EditableTextUses:2Used by:Timeline
Symbol 91 TextUses:2Used by:Timeline
Symbol 92 GraphicUsed by:93 207 439
Symbol 93 MovieClipUses:92Used by:Timeline
Symbol 94 TextUses:2Used by:Timeline
Symbol 95 EditableTextUses:2Used by:Timeline
Symbol 96 TextUses:2Used by:Timeline
Symbol 97 TextUses:2Used by:Timeline
Symbol 98 TextUses:2Used by:Timeline
Symbol 99 TextUses:2Used by:Timeline
Symbol 100 GraphicUsed by:Timeline
Symbol 101 TextUses:2 77Used by:Timeline
Symbol 102 TextUses:77Used by:Timeline
Symbol 103 TextUses:2Used by:Timeline
Symbol 104 TextUses:2Used by:Timeline
Symbol 105 TextUses:2Used by:Timeline
Symbol 106 TextUses:2Used by:Timeline
Symbol 107 TextUses:2Used by:Timeline
Symbol 108 TextUses:2Used by:Timeline
Symbol 109 TextUses:2Used by:Timeline
Symbol 110 GraphicUsed by:Timeline
Symbol 111 TextUses:2Used by:Timeline
Symbol 112 TextUses:2Used by:Timeline
Symbol 113 TextUses:2Used by:Timeline
Symbol 114 TextUses:2Used by:Timeline
Symbol 115 TextUses:2Used by:Timeline
Symbol 116 GraphicUsed by:Timeline
Symbol 117 TextUses:77Used by:Timeline
Symbol 118 TextUses:2 77Used by:Timeline
Symbol 119 TextUses:2 77Used by:Timeline
Symbol 120 TextUses:2Used by:Timeline
Symbol 121 GraphicUsed by:Timeline
Symbol 122 TextUses:2Used by:Timeline
Symbol 123 TextUses:2 77Used by:Timeline
Symbol 124 TextUses:2Used by:Timeline
Symbol 125 TextUses:2 77Used by:Timeline
Symbol 126 TextUses:2Used by:Timeline
Symbol 127 TextUses:2 77Used by:Timeline
Symbol 128 GraphicUsed by:Timeline
Symbol 129 TextUses:2Used by:Timeline
Symbol 130 TextUses:2 77Used by:Timeline
Symbol 131 TextUses:2 77Used by:Timeline
Symbol 132 TextUses:2 77Used by:Timeline
Symbol 133 TextUses:2Used by:Timeline
Symbol 134 TextUses:2 77Used by:Timeline
Symbol 135 TextUses:2 77Used by:Timeline
Symbol 136 TextUses:2 77Used by:Timeline
Symbol 137 TextUses:2Used by:Timeline
Symbol 138 TextUses:2Used by:Timeline
Symbol 139 TextUses:2 77Used by:Timeline
Symbol 140 TextUses:2 77Used by:Timeline
Symbol 141 TextUses:2Used by:Timeline
Symbol 142 TextUses:2Used by:Timeline
Symbol 143 TextUses:2 77Used by:Timeline
Symbol 144 TextUses:2Used by:Timeline
Symbol 145 TextUses:2 77Used by:Timeline
Symbol 146 FontUsed by:147
Symbol 147 TextUses:2 14 146Used by:Timeline
Symbol 148 TextUses:2Used by:Timeline
Symbol 149 TextUses:2 77Used by:Timeline
Symbol 150 GraphicUsed by:Timeline
Symbol 151 TextUses:2 77Used by:Timeline
Symbol 152 TextUses:2Used by:Timeline
Symbol 153 TextUses:2Used by:Timeline
Symbol 154 TextUses:2Used by:Timeline
Symbol 155 TextUses:77 2Used by:Timeline
Symbol 156 TextUses:2Used by:Timeline
Symbol 157 TextUses:2Used by:Timeline
Symbol 158 TextUses:2Used by:Timeline
Symbol 159 GraphicUsed by:Timeline
Symbol 160 TextUses:2Used by:Timeline
Symbol 161 TextUses:2Used by:Timeline
Symbol 162 TextUses:2Used by:Timeline
Symbol 163 TextUses:2Used by:Timeline
Symbol 164 TextUses:77 2Used by:Timeline
Symbol 165 TextUses:2Used by:Timeline
Symbol 166 TextUses:2Used by:Timeline
Symbol 167 TextUses:2Used by:Timeline
Symbol 168 TextUses:2Used by:Timeline
Symbol 169 TextUses:2Used by:Timeline
Symbol 170 TextUses:2Used by:Timeline
Symbol 171 GraphicUsed by:Timeline
Symbol 172 TextUses:2Used by:Timeline
Symbol 173 TextUses:2Used by:Timeline
Symbol 174 TextUses:2Used by:Timeline
Symbol 175 TextUses:2Used by:Timeline
Symbol 176 TextUses:2Used by:Timeline
Symbol 177 GraphicUsed by:Timeline
Symbol 178 TextUses:2Used by:Timeline
Symbol 179 TextUses:2Used by:Timeline
Symbol 180 TextUses:77Used by:Timeline
Symbol 181 TextUses:2Used by:Timeline
Symbol 182 TextUses:2Used by:Timeline
Symbol 183 TextUses:77 2Used by:Timeline
Symbol 184 TextUses:2Used by:Timeline
Symbol 185 TextUses:2Used by:Timeline
Symbol 186 TextUses:2Used by:Timeline
Symbol 187 BitmapUsed by:190
Symbol 188 BitmapUsed by:190
Symbol 189 BitmapUsed by:190
Symbol 190 GraphicUses:187 188 189Used by:Timeline
Symbol 191 TextUses:2Used by:Timeline
Symbol 192 EditableTextUses:2Used by:Timeline
Symbol 193 TextUses:2 77Used by:Timeline
Symbol 194 EditableTextUses:2Used by:Timeline
Symbol 195 TextUses:2Used by:Timeline
Symbol 196 EditableTextUses:2Used by:Timeline
Symbol 197 TextUses:2Used by:Timeline
Symbol 198 TextUses:2Used by:Timeline
Symbol 199 EditableTextUses:2Used by:Timeline
Symbol 200 TextUses:2Used by:Timeline
Symbol 201 TextUses:2Used by:Timeline
Symbol 202 EditableTextUses:2Used by:Timeline
Symbol 203 TextUses:2Used by:Timeline
Symbol 204 EditableTextUses:2Used by:Timeline
Symbol 205 TextUses:2Used by:Timeline
Symbol 206 TextUses:2Used by:Timeline
Symbol 207 MovieClipUses:92Used by:Timeline
Symbol 208 GraphicUsed by:209 440
Symbol 209 MovieClipUses:208Used by:Timeline
Symbol 210 TextUses:2Used by:Timeline
Symbol 211 GraphicUsed by:Timeline
Symbol 212 TextUses:2Used by:Timeline
Symbol 213 TextUses:2Used by:Timeline
Symbol 214 TextUses:2Used by:Timeline
Symbol 215 GraphicUsed by:Timeline
Symbol 216 TextUses:2Used by:Timeline
Symbol 217 TextUses:2Used by:Timeline
Symbol 218 GraphicUsed by:Timeline
Symbol 219 TextUses:2Used by:Timeline
Symbol 220 TextUses:2Used by:Timeline
Symbol 221 TextUses:2Used by:Timeline
Symbol 222 BitmapUsed by:223
Symbol 223 GraphicUses:222Used by:Timeline
Symbol 224 TextUses:2Used by:Timeline
Symbol 225 EditableTextUses:2Used by:Timeline
Symbol 226 TextUses:2Used by:Timeline
Symbol 227 EditableTextUses:2Used by:Timeline
Symbol 228 TextUses:2Used by:Timeline
Symbol 229 TextUses:2Used by:Timeline
Symbol 230 TextUses:2Used by:Timeline
Symbol 231 TextUses:2Used by:Timeline
Symbol 232 EditableTextUses:2Used by:Timeline
Symbol 233 GraphicUsed by:Timeline
Symbol 234 TextUses:2Used by:Timeline
Symbol 235 EditableTextUses:2Used by:Timeline
Symbol 236 TextUses:2Used by:Timeline
Symbol 237 TextUses:2Used by:Timeline
Symbol 238 TextUses:2Used by:Timeline
Symbol 239 TextUses:2Used by:Timeline
Symbol 240 BitmapUsed by:241
Symbol 241 GraphicUses:240Used by:Timeline
Symbol 242 TextUses:2Used by:Timeline
Symbol 243 EditableTextUses:2Used by:Timeline
Symbol 244 GraphicUsed by:Timeline
Symbol 245 TextUses:2 77Used by:Timeline
Symbol 246 TextUses:2Used by:Timeline
Symbol 247 TextUses:2Used by:Timeline
Symbol 248 TextUses:2Used by:Timeline
Symbol 249 TextUses:2Used by:Timeline
Symbol 250 TextUses:2Used by:Timeline
Symbol 251 GraphicUsed by:252 427
Symbol 252 MovieClipUses:251Used by:Timeline
Symbol 253 GraphicUsed by:254 428
Symbol 254 MovieClipUses:253Used by:Timeline
Symbol 255 GraphicUsed by:256 429
Symbol 256 MovieClipUses:255Used by:Timeline
Symbol 257 GraphicUsed by:258 261 430 432
Symbol 258 MovieClipUses:257Used by:Timeline
Symbol 259 GraphicUsed by:260 431
Symbol 260 MovieClipUses:259Used by:Timeline
Symbol 261 MovieClipUses:257Used by:Timeline
Symbol 262 GraphicUsed by:263 264 265 433 434 435
Symbol 263 MovieClipUses:262Used by:Timeline
Symbol 264 MovieClipUses:262Used by:Timeline
Symbol 265 MovieClipUses:262Used by:Timeline
Symbol 266 GraphicUsed by:267 436
Symbol 267 MovieClipUses:266Used by:Timeline
Symbol 268 GraphicUsed by:269 437
Symbol 269 MovieClipUses:268Used by:Timeline
Symbol 270 GraphicUsed by:271 438
Symbol 271 MovieClipUses:270Used by:Timeline
Symbol 272 TextUses:2Used by:Timeline
Symbol 273 EditableTextUses:2Used by:Timeline
Symbol 274 TextUses:2Used by:Timeline
Symbol 275 EditableTextUses:2Used by:Timeline
Symbol 276 TextUses:2Used by:Timeline
Symbol 277 EditableTextUses:2Used by:Timeline
Symbol 278 TextUses:2Used by:Timeline
Symbol 279 EditableTextUses:2Used by:Timeline
Symbol 280 TextUses:2Used by:Timeline
Symbol 281 EditableTextUses:2Used by:Timeline
Symbol 282 TextUses:2Used by:Timeline
Symbol 283 TextUses:2Used by:Timeline
Symbol 284 TextUses:2Used by:Timeline
Symbol 285 TextUses:2Used by:Timeline
Symbol 286 TextUses:2Used by:Timeline
Symbol 287 TextUses:2Used by:Timeline
Symbol 288 BitmapUsed by:291
Symbol 289 BitmapUsed by:291
Symbol 290 BitmapUsed by:291
Symbol 291 GraphicUses:288 289 290Used by:Timeline
Symbol 292 TextUses:2Used by:Timeline
Symbol 293 EditableTextUses:2Used by:Timeline
Symbol 294 TextUses:2Used by:Timeline
Symbol 295 TextUses:2Used by:Timeline
Symbol 296 BitmapUsed by:298
Symbol 297 BitmapUsed by:298
Symbol 298 GraphicUses:296 297Used by:Timeline
Symbol 299 GraphicUsed by:Timeline
Symbol 300 TextUses:2Used by:Timeline
Symbol 301 TextUses:77Used by:Timeline
Symbol 302 TextUses:2Used by:Timeline
Symbol 303 TextUses:2Used by:Timeline
Symbol 304 TextUses:2Used by:Timeline
Symbol 305 TextUses:2 77Used by:Timeline
Symbol 306 TextUses:2Used by:Timeline
Symbol 307 TextUses:2Used by:Timeline
Symbol 308 TextUses:2Used by:Timeline
Symbol 309 TextUses:2Used by:Timeline
Symbol 310 TextUses:77 2Used by:Timeline
Symbol 311 TextUses:2Used by:Timeline
Symbol 312 EditableTextUses:2Used by:Timeline
Symbol 313 TextUses:2Used by:Timeline
Symbol 314 TextUses:2Used by:Timeline
Symbol 315 EditableTextUses:2Used by:Timeline
Symbol 316 TextUses:2 77Used by:Timeline
Symbol 317 GraphicUsed by:Timeline
Symbol 318 TextUses:2Used by:Timeline
Symbol 319 TextUses:2Used by:Timeline
Symbol 320 TextUses:2Used by:Timeline
Symbol 321 TextUses:2Used by:Timeline
Symbol 322 TextUses:2Used by:Timeline
Symbol 323 TextUses:2Used by:Timeline
Symbol 324 TextUses:2Used by:Timeline
Symbol 325 TextUses:2Used by:Timeline
Symbol 326 TextUses:2Used by:Timeline
Symbol 327 TextUses:2Used by:Timeline
Symbol 328 GraphicUsed by:Timeline
Symbol 329 TextUses:2Used by:Timeline
Symbol 330 TextUses:2Used by:Timeline
Symbol 331 GraphicUsed by:Timeline
Symbol 332 TextUses:2Used by:Timeline
Symbol 333 GraphicUsed by:Timeline
Symbol 334 TextUses:2Used by:Timeline
Symbol 335 TextUses:2Used by:Timeline
Symbol 336 TextUses:2Used by:Timeline
Symbol 337 TextUses:2Used by:Timeline
Symbol 338 TextUses:2Used by:Timeline
Symbol 339 GraphicUsed by:Timeline
Symbol 340 TextUses:2Used by:Timeline
Symbol 341 TextUses:2Used by:Timeline
Symbol 342 TextUses:2Used by:Timeline
Symbol 343 TextUses:2Used by:Timeline
Symbol 344 TextUses:2Used by:Timeline
Symbol 345 TextUses:2Used by:Timeline
Symbol 346 GraphicUsed by:Timeline
Symbol 347 TextUses:2Used by:Timeline
Symbol 348 TextUses:2Used by:Timeline
Symbol 349 TextUses:2Used by:Timeline
Symbol 350 TextUses:2Used by:Timeline
Symbol 351 TextUses:2Used by:Timeline
Symbol 352 TextUses:2Used by:Timeline
Symbol 353 TextUses:2Used by:Timeline
Symbol 354 TextUses:2Used by:Timeline
Symbol 355 TextUses:2Used by:Timeline
Symbol 356 GraphicUsed by:Timeline
Symbol 357 TextUses:2Used by:Timeline
Symbol 358 TextUses:2Used by:Timeline
Symbol 359 TextUses:2Used by:Timeline
Symbol 360 TextUses:2Used by:Timeline
Symbol 361 TextUses:2 77Used by:Timeline
Symbol 362 TextUses:2Used by:Timeline
Symbol 363 TextUses:2Used by:Timeline
Symbol 364 TextUses:2Used by:Timeline
Symbol 365 GraphicUsed by:Timeline
Symbol 366 TextUses:2Used by:Timeline
Symbol 367 TextUses:2 77Used by:Timeline
Symbol 368 TextUses:2 77Used by:Timeline
Symbol 369 TextUses:2 77Used by:Timeline
Symbol 370 TextUses:2Used by:Timeline
Symbol 371 TextUses:2Used by:Timeline
Symbol 372 EditableTextUses:2Used by:Timeline
Symbol 373 TextUses:2 77Used by:Timeline
Symbol 374 EditableTextUses:2Used by:Timeline
Symbol 375 TextUses:2Used by:Timeline
Symbol 376 EditableTextUses:2Used by:Timeline
Symbol 377 EditableTextUses:2Used by:Timeline
Symbol 378 EditableTextUses:2Used by:Timeline
Symbol 379 EditableTextUses:2Used by:Timeline
Symbol 380 EditableTextUses:2Used by:Timeline
Symbol 381 TextUses:2Used by:Timeline
Symbol 382 EditableTextUses:2Used by:Timeline
Symbol 383 TextUses:2Used by:Timeline
Symbol 384 EditableTextUses:2Used by:Timeline
Symbol 385 TextUses:2Used by:Timeline
Symbol 386 GraphicUsed by:387
Symbol 387 MovieClipUses:386Used by:Timeline
Symbol 388 GraphicUsed by:389 390 443 444
Symbol 389 MovieClipUses:388Used by:Timeline
Symbol 390 MovieClipUses:388Used by:Timeline
Symbol 391 TextUses:2Used by:Timeline
Symbol 392 TextUses:2Used by:Timeline
Symbol 393 TextUses:2Used by:Timeline
Symbol 394 BitmapUsed by:397
Symbol 395 BitmapUsed by:397
Symbol 396 BitmapUsed by:397
Symbol 397 GraphicUses:394 395 396Used by:Timeline
Symbol 398 TextUses:2Used by:Timeline
Symbol 399 EditableTextUses:2Used by:Timeline
Symbol 400 TextUses:2Used by:Timeline
Symbol 401 TextUses:2Used by:Timeline
Symbol 402 TextUses:2Used by:Timeline
Symbol 403 TextUses:2Used by:Timeline
Symbol 404 BitmapUsed by:406
Symbol 405 BitmapUsed by:406
Symbol 406 GraphicUses:404 405Used by:Timeline
Symbol 407 TextUses:2Used by:Timeline
Symbol 408 EditableTextUses:2Used by:Timeline
Symbol 409 TextUses:2Used by:Timeline
Symbol 410 EditableTextUses:2Used by:Timeline
Symbol 411 TextUses:2Used by:Timeline
Symbol 412 TextUses:2Used by:Timeline
Symbol 413 EditableTextUses:2Used by:Timeline
Symbol 414 TextUses:2Used by:Timeline
Symbol 415 EditableTextUses:2Used by:Timeline
Symbol 416 TextUses:2Used by:Timeline
Symbol 417 EditableTextUses:2Used by:Timeline
Symbol 418 TextUses:2Used by:Timeline
Symbol 419 EditableTextUses:2Used by:Timeline
Symbol 420 TextUses:2Used by:Timeline
Symbol 421 EditableTextUses:2Used by:Timeline
Symbol 422 TextUses:2Used by:Timeline
Symbol 423 TextUses:2Used by:Timeline
Symbol 424 EditableTextUses:2Used by:Timeline
Symbol 425 TextUses:2Used by:Timeline
Symbol 426 TextUses:2Used by:Timeline
Symbol 427 MovieClipUses:251Used by:Timeline
Symbol 428 MovieClipUses:253Used by:Timeline
Symbol 429 MovieClipUses:255Used by:Timeline
Symbol 430 MovieClipUses:257Used by:Timeline
Symbol 431 MovieClipUses:259Used by:Timeline
Symbol 432 MovieClipUses:257Used by:Timeline
Symbol 433 MovieClipUses:262Used by:Timeline
Symbol 434 MovieClipUses:262Used by:Timeline
Symbol 435 MovieClipUses:262Used by:Timeline
Symbol 436 MovieClipUses:266Used by:Timeline
Symbol 437 MovieClipUses:268Used by:Timeline
Symbol 438 MovieClipUses:270Used by:Timeline
Symbol 439 MovieClipUses:92Used by:Timeline
Symbol 440 MovieClipUses:208Used by:Timeline
Symbol 441 GraphicUsed by:442
Symbol 442 MovieClipUses:441Used by:Timeline
Symbol 443 MovieClipUses:388Used by:Timeline
Symbol 444 MovieClipUses:388Used by:Timeline
Symbol 445 TextUses:2Used by:Timeline
Symbol 446 TextUses:2Used by:Timeline
Symbol 447 EditableTextUses:2Used by:Timeline
Symbol 448 EditableTextUses:2Used by:Timeline
Symbol 449 GraphicUsed by:450
Symbol 450 MovieClipUses:449Used by:Timeline
Symbol 451 GraphicUsed by:452
Symbol 452 MovieClipUses:451Used by:Timeline
Symbol 453 GraphicUsed by:454
Symbol 454 MovieClipUses:453Used by:Timeline
Symbol 455 GraphicUsed by:456
Symbol 456 MovieClipUses:455Used by:Timeline
Symbol 457 GraphicUsed by:458
Symbol 458 MovieClipUses:457Used by:Timeline
Symbol 459 TextUses:2Used by:Timeline
Symbol 460 TextUses:2Used by:Timeline
Symbol 461 TextUses:2Used by:Timeline
Symbol 462 GraphicUsed by:463
Symbol 463 MovieClipUses:462Used by:Timeline
Symbol 464 TextUses:2Used by:Timeline
Symbol 465 GraphicUsed by:466
Symbol 466 MovieClipUses:465Used by:Timeline
Symbol 467 TextUses:2Used by:Timeline
Symbol 468 TextUses:2Used by:Timeline
Symbol 469 TextUses:2Used by:Timeline
Symbol 470 BitmapUsed by:471
Symbol 471 GraphicUses:470Used by:Timeline
Symbol 472 GraphicUsed by:Timeline
Symbol 473 TextUses:2Used by:Timeline
Symbol 474 TextUses:2Used by:Timeline
Symbol 475 TextUses:2Used by:Timeline
Symbol 476 TextUses:2Used by:Timeline
Symbol 477 BitmapUsed by:479
Symbol 478 BitmapUsed by:479
Symbol 479 GraphicUses:477 478Used by:Timeline
Symbol 480 GraphicUsed by:Timeline
Symbol 481 TextUses:2Used by:Timeline
Symbol 482 TextUses:2Used by:Timeline
Symbol 483 TextUses:2Used by:Timeline
Symbol 484 TextUses:2Used by:Timeline
Symbol 485 TextUses:2Used by:Timeline
Symbol 486 TextUses:2Used by:Timeline
Symbol 487 GraphicUsed by:Timeline
Symbol 488 TextUses:2Used by:Timeline
Symbol 489 TextUses:2Used by:Timeline
Symbol 490 TextUses:2Used by:Timeline
Symbol 491 TextUses:2Used by:Timeline
Symbol 492 TextUses:2Used by:Timeline
Symbol 493 TextUses:2 77Used by:Timeline
Symbol 494 TextUses:2Used by:Timeline
Symbol 495 EditableTextUses:2Used by:Timeline
Symbol 496 TextUses:2Used by:Timeline
Symbol 497 EditableTextUses:2Used by:Timeline
Symbol 498 EditableTextUses:2Used by:Timeline
Symbol 499 EditableTextUses:2Used by:Timeline
Symbol 500 TextUses:2Used by:Timeline
Symbol 501 TextUses:2Used by:Timeline
Symbol 502 TextUses:2Used by:Timeline
Symbol 503 TextUses:2Used by:Timeline
Symbol 504 TextUses:2Used by:Timeline
Symbol 505 TextUses:2Used by:Timeline
Symbol 506 TextUses:2Used by:Timeline

Instance Names

"ball"Frame 38Symbol 207 MovieClip
"block"Frame 38Symbol 209 MovieClip
"ball"Frame 49Symbol 207 MovieClip
"block"Frame 49Symbol 209 MovieClip
"ball"Frame 74Symbol 207 MovieClip
"block"Frame 74Symbol 209 MovieClip
"node1"Frame 74Symbol 389 MovieClip
"node2"Frame 74Symbol 390 MovieClip
"ball"Frame 81Symbol 439 MovieClip
"block"Frame 81Symbol 440 MovieClip
"node1"Frame 81Symbol 443 MovieClip
"node2"Frame 81Symbol 444 MovieClip
"sx"Frame 81Symbol 447 EditableText
"sy"Frame 81Symbol 448 EditableText
"block"Frame 83Symbol 209 MovieClip
"node1"Frame 83Symbol 389 MovieClip
"node2"Frame 83Symbol 390 MovieClip
"ball"Frame 83Symbol 463 MovieClip
"ball"Frame 84Symbol 466 MovieClip
"ball"Frame 95Symbol 439 MovieClip
"block"Frame 95Symbol 440 MovieClip
"node1"Frame 95Symbol 443 MovieClip
"node2"Frame 95Symbol 444 MovieClip
"sx"Frame 95Symbol 498 EditableText
"sy"Frame 95Symbol 499 EditableText
"shade"Symbol 13 MovieClip Frame 1Symbol 7 MovieClip
"black"Symbol 13 MovieClip Frame 1Symbol 9 MovieClip

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata not present, AS1/AS2.

Labels

"load"Frame 1

Dynamic Text Variables

percentSymbol 5 EditableText""
sxSymbol 447 EditableText""
sySymbol 448 EditableText""
sxSymbol 498 EditableText""
sySymbol 499 EditableText""




http://swfchan.com/9/41309/info.shtml
Created: 10/5 -2019 09:38:26 Last modified: 10/5 -2019 09:38:26 Server time: 10/05 -2024 14:33:31