1

したがって、プレーヤーはスペースバーキーを使用してジャンプでき、重力によって床に向かって引っ張られます。私が欲しいのは、彼がもう床にいない場合、あなたが倒れるまで、あなたは再びジャンプを押すことができないということです。ブール値を作成してムーブメントを実装しようとしましたが、それでも結果は得られませんでした。どうすればそれができるのでしょうか?

var keyPressed:int = -1;

player.addEventListener(Event.ENTER_FRAME, iMoveInDirectionOfKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, iSetKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, iUnsetKeyPressed);

function iSetKeyPressed(event:KeyboardEvent):void
{
if (canJump == true) {
    keyPressed = event.keyCode;
} else if (canJump == false) {
    keyPressed = -1;
}
}
function iUnsetKeyPressed(event:KeyboardEvent):void
{
keyPressed = -1;
}
function iMoveInDirectionOfKey(event:Event)
 {
player.y += keyPressed == Keyboard.SPACE ? -20 : 0;
 }

var gravity:Number = 15;
var floor:Number = stage.stageHeight - player.height / 2 + 35;
var canJump:Boolean = true;

iCanJump(canJump);

player.y = floor;

player.addEventListener(Event.ENTER_FRAME, iGravity);

function iGravity(pEvent)
{
if (keyPressed != Keyboard.SPACE) {
    player.y +=  gravity;
}
if (player.y > floor) {
    player.y = floor;
}
}

function iCanJump (canJump:Boolean) {
if (player.y == floor) {
    canJump = true;
} 
if (player.y < floor) {
    canJump = false;
}
}
4

1 に答える 1

1

次のような速度変数を使用します。

public var jumpSpeed : Number = -20;
public var ySpeed : Number = 0;
public var gravity : Number = 1;
function iSetKeyPressed(e:KeyboardEvent):void
{
    if(e.keyCode == Keyboard.SPACE && player.y == floor)
        ySpeed = jumpSpeed; 
}

player.addEventListener(Event.ENTER_FRAME, iGravity);

function iGravity(e : Event)
{
    player.y += ySpeed;
    if(player.y < floor)
    {
        ySpeed += gravity;
    }
    else
    {
        ySpeed = 0;
        player.y = floor;
    }
}

基本的に、プレーヤーの速度変数を作成し、毎ターン更新します。プレーヤーの速度によっても、y軸上のプレーヤーの位置を更新します。

フレーム間の時間を確認し、速度に時間を掛けて、作業を続けるとスムーズな結果を得ることができます。

幸運を。

于 2012-09-25T16:51:40.227 に答える