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