I am new to actionscript, and am trying to get a collision between two cars, I have the movement of the cars working, and am trying to detect if they collide, I would then like to have the cars react to the collision. Here is what i have so far, i am not getting any values going into the collisiondetection function. Please help.
This is what i have so far
StageWidth = 600;
StageHeight = 400;
function moveCar1() {
// Make the starting position of the car
this._x = this.x=0;
this._y = this.y=0;
// Velocity of car
this.xvelocity = this.yvelocity=0;
// Tire Speed
this.tspeed = 0;
// Angle of car
this.angle = 0;
// The friction acting on the tires from the ground
this.tfriction = .15;
// This determines the angle that the car is steering
this.steering = 0;
this.onEnterFrame = function() {
// This determines what these variables do
keyLeft = Key.isDown(Key.LEFT);
keyRight = Key.isDown(Key.RIGHT);
//the reason why these two are not capitilized any is because "keyUp" and"keyDown" are commands in flash
keyup = Key.isDown(Key.UP);
keydown = Key.isDown(Key.DOWN);
// By pushing on certain keys, you get acceleration and decceleration
if (keyup) {
this.tspeed += 1;
}
if (keydown) {
this.tspeed -= 1.5;
if (this.tspeed<-7.5) {
this.tspeed = -7.5;
}
}
// Friction from ground; this can be any small number so that the car doesn't keep going
// if a key isn't pressed
this.tspeed *= .90;
// Velocity Change
idealxvelocity = this.tspeed*Math.cos(this.
angle*Math
.PI/180);
idealyvelocity = this.tspeed*Math.sin(this.
angle*Math
.PI/180);
// By taking the difference between the current velocity and ideal velocity,
// you get the actual velocity
// When you apply the friction, you get the actual velocities.
this.xvelocity += ((idealxvelocity-this.xvel
ocity)*thi
s.tfrictio
n);
this.yvelocity += ((idealyvelocity-this.yvel
ocity)*thi
s.tfrictio
n);
// By adding the velocities, you can get the new x and y positions
this.x += this.xvelocity;
this.y += this.yvelocity;
// By pushing the Left and Right keys, the car steers in that direction
if (keyLeft || keyRight) {
this.steering += (keyRight-keyLeft);
} else {
// When you let go of the Left and Right keys, the car goes back to going straight
this.steering += ((this.steering<0)-(this.s
teering>0)
);
}
// You want to make sure that when you steer that it doesn't start turning faster and faster
if (this.steering<-10) {
this.steering = -10;
}
if (this.steering>10) {
this.steering = 10;
}
// Now you can make the car turn based on actual speed and turning angle
actualSpeed = Math.sqrt((this.xvelocity*
this.xvelo
city)+(thi
s.yvelocit
y*this.yve
locity));
this.angle += ((this.steering*actualSpee
d)*.15);
this._angle = (this.angle+360)%360-180;
// Hit outside
if (this.x>=StageWidth) {
trace("Hit Wall");
}
if (this.x<0) {
trace("Hit Wall");
}
//if (this.x<=10) {
//this.x = 10;
//}
if (this.y>=StageHeight) {
trace("Hit Wall");
}
if (this.y<0) {
trace("Hit Wall");
}
//if (this.y<=-10) {
//this.y = -10;
//}
// You need to update the angles from radians to degrees so that it can turn
this._rotation = this.angle+90;
this._x = this.x;
this._y = this.y;
};
}
function moveCar2() {
// Make the starting position of the car
this._x = this.x=0;
this._y = this.y=50;
// Velocity of car
this.xvelocity = this.yvelocity=0;
// Tire Speed
this.tspeed = 0;
// Angle of car
this.angle = 0;
// The friction acting on the tires from the ground
this.tfriction = .15;
// This determines the angle that the car is steering
this.steering = 0;
this.onEnterFrame = function() {
// This determines what these variables do
keyLeft2 = Key.isDown(65);
keyRight2 = Key.isDown(68);
//the reason why these two are not capitilized any is because "keyUp" and"keyDown" are commands in flash
keyup2 = Key.isDown(87);
keydown2 = Key.isDown(83);
// By pushing on certain keys, you get acceleration and decceleration
if (keyup2) {
this.tspeed += 1;
}
if (keydown2) {
this.tspeed -= 1.5;
if (this.tspeed<-7.5) {
this.tspeed = -7.5;
}
}
// Friction from ground; this can be any small number so that the car doesn't keep going
// if a key isn't pressed
this.tspeed *= .90;
// Velocity Change
idealxvelocity = this.tspeed*Math.cos(this.
angle*Math
.PI/180);
idealyvelocity = this.tspeed*Math.sin(this.
angle*Math
.PI/180);
// By taking the difference between the current velocity and ideal velocity,
// you get the actual velocity
// When you apply the friction, you get the actual velocities.
this.xvelocity += ((idealxvelocity-this.xvel
ocity)*thi
s.tfrictio
n);
this.yvelocity += ((idealyvelocity-this.yvel
ocity)*thi
s.tfrictio
n);
// By adding the velocities, you can get the new x and y positions
this.x += this.xvelocity;
this.y += this.yvelocity;
// By pushing the Left and Right keys, the car steers in that direction
if (keyLeft2 || keyRight2) {
this.steering += (keyRight2-keyLeft2);
} else {
// When you let go of the Left and Right keys, the car goes back to going straight
this.steering += ((this.steering<0)-(this.s
teering>0)
);
}
// You want to make sure that when you steer that it doesn't start turning faster and faster
if (this.steering<-10) {
this.steering = -10;
}
if (this.steering>10) {
this.steering = 10;
}
// Now you can make the car turn based on actual speed and turning angle
actualSpeed = Math.sqrt((this.xvelocity*
this.xvelo
city)+(thi
s.yvelocit
y*this.yve
locity));
this.angle += ((this.steering*actualSpee
d)*.15);
this._angle = (this.angle+360)%360-180;
if (this.x>=StageWidth) {
this.x = StageWidth;
}
if (this.x<=5) {
this.x = 5;
}
if (this.y>=StageHeight) {
this.y = StageHeight;
}
if (this.y<=-10) {
this.y = -10;
}
// You need to update the angles from radians to degrees so that it can turn
this._rotation = this.angle+90;
this._x = this.x;
this._y = this.y;
};
}
function carTocarDetection(b1, b2) {
//set the speed variables
var xmov1 = b1.xmov;
var ymov1 = b1.ymov;
var xmov2 = b2.xmov;
var ymov2 = b2.ymov;
trace(xmov1)
trace(xmov2)
trace(ymov1)
trace(ymov2)
//set the position variables
var xl1 = b1.xpos;
var yl1 = b1.ypos;
var xl2 = b2.xpos;
var yl2 = b2.ypos;
//define the constants
var R = b1.radius+b2.radius;
var a = -2*xmov1*xmov2+xmov1*xmov1
+xmov2*xmo
v2;
var b = -2*xl1*xmov2-2*xl2*xmov1+2
*xl1*xmov1
+2*xl2*xmo
v2;
var c = -2*xl1*xl2+xl1*xl1+xl2*xl2
;
var d = -2*ymov1*ymov2+ymov1*ymov1
+ymov2*ymo
v2;
var e = -2*yl1*ymov2-2*yl2*ymov1+2
*yl1*ymov1
+2*yl2*ymo
v2;
var f = -2*yl1*yl2+yl1*yl1+yl2*yl2
;
var g = a+d;
var h = b+e;
var k = c+f-R*R;
//solve the quadratic equation
var sqRoot = Math.sqrt(h*h-4*g*k);
var t1 = (-h+sqRoot)/(2*g);
var t2 = (-h-sqRoot)/(2*g);
if (t1>0 && t1<=1) {
var whatTime = t1;
var carsCollided = true;
}
if (t2>0 && t2<=1) {
if (whatTime == null || t2<t1) {
var whatTime = t2;
var carsCollided = true;
}
}
if (carsCollided) {
trace("Cars Collided");
//Collision has happened, so throw a trace
//car2carReaction(b1, b2, xl1, xl2, yl1, yl2, whatTime);
}else{
trace("No Collision")
}
}
car1.onEnterFrame = moveCar1;
car2.onEnterFrame = moveCar2;
this.onEnterFrame = function() {
carTocarDetection(game.car
1, game.car2);
}
Start Free Trial