Flash AS3 гравитация и прыжки
Используя ActionScript 3, я создаю платформерную игру на Flash CC. Мой код работает нормально, но я не удовлетворен прыжком моего персонажа.
Мне нужен параболический прыжок, чтобы он мог наступать на другие платформы, но в данный момент мой персонаж прыгает только по прямой и падает слишком быстро на пол. Мой персонаж должен падать достаточно медленно, чтобы я мог нажимать левую и правую кнопки, пока они падают.
В приведенном ниже коде я использую события мыши, потому что буду публиковать их на своем мобильном устройстве.
У моего персонажа есть имя экземпляра SDeer
:
import flash.events.MouseEvent;
var xdir: int = 0;
var ydir: int = 0;
var speed: int = 10;
var jumping = false;
var gravity: int = 1.5;
var floor : int = 400;
var LeftUp : Boolean;
var RightUp : Boolean;
SDeer.gotoAndStop ('Still');
RightButton.addEventListener (MouseEvent.MOUSE_DOWN, onRight);
JumpButton.addEventListener (MouseEvent.MOUSE_DOWN, onJump);
LeftButton.addEventListener (MouseEvent.MOUSE_DOWN, onLeft);
LeftButton.addEventListener (MouseEvent.MOUSE_UP, LeftOnUp);
RightButton.addEventListener (MouseEvent.MOUSE_UP, RightOnUp);
DuckButton.addEventListener (MouseEvent.MOUSE_DOWN, onDuck);
addEventListener(MouseEvent.MOUSE_UP, onUp);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onRight (e:MouseEvent): void {
SDeer.gotoAndStop ('Running');
xdir = 1;
}
function onJump (e:MouseEvent): void {
if (LeftUp == true){
SDeer.gotoAndStop ('JumpLeft')
}
else {
SDeer.gotoAndStop ('Jumping');
}
ydir = -1;
}
function onDuck (e:MouseEvent): void {
if (LeftUp == true && RightUp == false){
SDeer.gotoAndStop ('DuckLeft')
}
else if (RightUp == true && LeftUp == false){
SDeer.gotoAndStop ('Duck');
}
ydir = 1;
}
function onUp (e:MouseEvent): void {
if (LeftUp == true && RightUp == false) {
SDeer.gotoAndStop ('LeftStill');
}
else if (RightUp == true && LeftUp == false){
SDeer.gotoAndStop ('Still');
}
xdir = 0;
ydir = 0;
}
function onLeft (e:MouseEvent) : void {
SDeer.gotoAndStop ('RunLeft');
xdir = -1;
}
function LeftOnUp (e:MouseEvent) : void {
LeftUp = true;
RightUp = false;
}
function RightOnUp (e:MouseEvent) : void {
LeftUp = false;
RightUp = true;
}
function onEnterFrame(e: Event): void {
SDeer.x += xdir * speed;
SDeer.y += ydir * speed;
}
//Hit check
stage.addEventListener(Event.ENTER_FRAME, hitCheck);
function hitCheck(event: Event): void {
SDeer.y += gravity;
if (SDeer.y + SDeer.height / 2 < floor){
gravity++;
}
else {
gravity = 0;
SDeer.y = floor - SDeer.height / 2;
}
}
1 ответ
Не сбрасывайте гравитацию. Вместо этого, скорость зависит от силы тяжести. Например...
var gravity:Number = 9.8; // meters/second/second standard, but can be whatever
var jumpVel:Number = 0;
function onJump( e:MouseEvent ) : void
{
if (LeftUp == true){
SDeer.gotoAndStop ('JumpLeft')
}
else {
SDeer.gotoAndStop ('Jumping');
}
jumpVel Number = -20; // 45mph!
}
... и в вашем обработчике ENTER_FRAME...
if ( jumpVel != 0 )
{
SDeer.y += jumpVel / stage.frameRate;
jumpVel += gravity / stage.frameRate;
if ( SDeer.y + SDeer.height >= floor )
{
jumpVel = 0;
SDeer.y = floor - SDeer.height;
}
}
У меня есть связанный ответ на ActionScript 3, Как заставить персонажа прыгать дольше