PDA

View Full Version : Realistic Helicopter Movement


macco
05-10-2008, 06:09 PM
I use this code to move my object (helocopter).

// initialize arrow variables
var leftArrow:Boolean = false;
var rightArrow:Boolean = false;
var upArrow:Boolean = false;
var downArrow:Boolean = false;

// set event listeners
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyPressedUp);
stage.addEventListener(Event.ENTER_FRAME, moveh);

// set arrow variables to true
function keyPressedDown(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = true;
} else if (event.keyCode == 39) {
rightArrow = true;
} else if (event.keyCode == 38) {
upArrow = true;
} else if (event.keyCode == 40) {
downArrow = true;
}
}

// set arrow variables to false
function keyPressedUp(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = false;
} else if (event.keyCode == 39) {
rightArrow = false;
} else if (event.keyCode == 38) {
upArrow = false;
} else if (event.keyCode == 40) {
downArrow = false;
}
}

// move every frame
function moveh(event:Event) {
var speed:Number = 5;

if (leftArrow) {
h.x -= speed;
}
if (rightArrow) {
h.x += speed;
}
if (upArrow) {
h.y -= speed;
}
if (downArrow) {
h.y += speed;
}
}


But how could I make a more realistic movement?
One with gravity, speeding up to maximum speed and that the helicopter won't stop suddenly when no key is pressed.

perrelet
05-10-2008, 06:46 PM
Hey macco.

Using your method of key detection you could replace your moveh function witht this one:

// move every frame
function moveh(event:Event) {

if (leftArrow) {
deltaX -= accelerationX;
}
if (rightArrow) {
deltaX += accelerationX;
}
if (upArrow) {
deltaY -= accelerationY;
}
if (downArrow) {
deltaY += accelerationY;
}
//FRICTION
deltaX*=friction

//GRAVITY BIT
deltaY+=gravity;

//MOVE CHOPPER
h.x +=deltaX
h.y +=deltaY
}

WHERE:

var gravity:Number = 0.5;
var friction:Number = 0.8
var accelerationX:Number = 2;
var accelerationY:Number = 1.5;
var deltaX:Number = 0;
var deltaY:Number = 0;

(declare these with your booleans)

I think that should get you started... Let me know how it goes :D

macco
05-10-2008, 09:10 PM
Thank you, it works fine :)

Similar to the movement in this game: (without gravity)
http://www.learn4good.com/games/simulation/bump_copter_2.htm