0

キャラクターがプラットフォームにドロップすると、動き回ることができ、すべてが正常に機能します。唯一の問題は、ジャンプするときです。一度しかジャンプできず、その後は upKey イベントに応答しません。

私のコードでこの問題を解決する方法を知りたいです。上矢印を押すたびにキャラクターがジャンプできるようにしたいと思います。

私のコードは次のとおりです。

package  {

import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.ui.Keyboard;


public class GameCode extends MovieClip {

    var upKey:Boolean;
    var leftKey:Boolean;
    var rightKey:Boolean;
    var jump:Boolean = false;

    var xvelocity:int = 10;
    var yvelocity:int = 0;
    var gravity:Number = 1;
    var jumpspeed:int = -10;
    var onPlatform:Boolean;

    var startPosY:int;
    var startPosX:int;
    var lastPosY:int;
    var lastPosX:int;

    public function GameCode() {
        // constructor code
    }

    public function startGame(){
        stage.addEventListener(KeyboardEvent.KEY_UP, checkKeyUp);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyDown);
        stage.addEventListener(Event.ENTER_FRAME, update);
    }

    function update(evt:Event){
        moveCharacter();
        yvelocity += gravity;

        if (!platform.hitTestObject(player)){
                player.y += yvelocity;
                onPlatform = false;
        }

        for (var i:int = 0; i < 10; i++){
            if (platform.hitTestPoint(player.x, player.y, true)){
                yvelocity = 0;
                player.y = platform.y - 1;
                onPlatform = true;
            }
        }
    }

    function moveCharacter(){
        lastPosY = player.y;
        lastPosX = player.x;

        if (leftKey == true){
            player.x -= xvelocity;
        }
        if (rightKey == true){
            player.x += xvelocity;
        }
        if (upKey == true && onPlatform == true){
            yvelocity = jumpspeed;
            player.y += yvelocity;
        }
    }

    function checkKeyDown(evt:KeyboardEvent){
        if (evt.keyCode == Keyboard.LEFT){
            leftKey = true;
        }
        else if (evt.keyCode == Keyboard.RIGHT){
            rightKey = true;
        }
        else if (evt.keyCode == Keyboard.UP){
            upKey = true;
        }
    }

    function checkKeyUp(evt:KeyboardEvent){
        if (evt.keyCode == Keyboard.LEFT){
            leftKey = false;
        }
        else if (evt.keyCode == Keyboard.RIGHT){
            rightKey = false;
        }
        else if (evt.keyCode == Keyboard.UP){
            upKey = false;
        }
    }
}

}
4

2 に答える 2

0

いくつかのトレースを使用してコードを実行しました。ジャンプして着地すると、onPlatform引き続き false に解決されます。これは、 の 10 回の反復をループするときに、ループ内で をまったくi使用しないためですi。プレイヤーをプラットフォームの 1 ピクセル上に配置することで、プレイヤーの正確な座標の衝突のみをチェックするため、そのループはヒットを検出しません。変化する...

if (platform.hitTestPoint(player.x, player.y, true)){

に...

if (platform.hitTestPoint(player.x, player.y + i, true)){
于 2013-11-11T10:47:02.480 に答える
-1

エチケットが何であるかわかりません-私は基本的に、私が彼の質問を理解したということをOPに知らせようとしています. 別の答えが彼のアクティビティ「フィード」に登録される可能性があると思います。そう...

ジャンプして着地すると、onPlatform は引き続き false に解決されます。これは、'i' を 10 回ループするときに、ループ内で 'i' をまったく使用しないためです。プレイヤーをプラットフォームの 1 ピクセル上に配置することで、プレイヤーの正確な座標の衝突のみをチェックするため、そのループはヒットを検出しません。変化する...

if (platform.hitTestPoint(player.x, player.y, true)){

に...

if (platform.hitTestPoint(player.x, player.y + i, true)){

...そしてそれは機能します。

于 2013-11-20T09:06:59.263 に答える