0

プラットフォーマー エンジンのジャンプ機能に問題があります。すべてのヒット テストをレベル内の個々のプラットフォームに移動したので、個々のプラットフォームごとに書き出す必要はありません。これの問題は、ステージに追加された最初のムービークリップしかジャンプできないことです。他のものは、上が押されている場合、プレーヤーを床から沈ませるだけです(そうあるべきです-彼はそこにいることを意図していないので、彼を止めるものは何もありません). 問題は、ジャンプのチェックが 2 番目のブロックに正しく登録されていないことです。コードは次のとおりです(過剰な MovieClip(parent) sについて申し訳ありません)

var playerRef:MovieClip = MovieClip(parent).player;

stage.addEventListener(Event.ENTER_FRAME, hitUpdate);
function hitUpdate(e:Event):void {
    if (playerRef.hitTestPoint(playerRef.x,this.y - (playerRef.height/2)) && playerRef.x + playerRef.width > this.x && playerRef.x < this.x + this.width && !MovieClip(parent).upDown) {
        MovieClip(parent).downMomentum = 0;
        playerRef.y = this.y - playerRef.height;
    }

    if (playerRef.hitTestPoint(playerRef.x,this.y + this.height) && playerRef.x + playerRef.width > this.x && playerRef.x < this.x + this.width) {
        MovieClip(parent).downMomentum = 0;
        playerRef.y = this.y + this.height + MovieClip(parent).gravity;
    }

    if (playerRef.hitTestPoint(this.x,playerRef.y) && playerRef.y + playerRef.height > this.y && playerRef.y < this.y + this.height) {
        MovieClip(parent).speed = 0;
        playerRef.x = this.x - playerRef.width;
    }

    if (playerRef.hitTestPoint(this.x + this.width,playerRef.y) && playerRef.y + playerRef.height > this.y && playerRef.y < this.y + this.height) {
        MovieClip(parent).speed = 0;
        playerRef.x = this.x + this.width;
    }

    if (playerRef.hitTestObject(this)) {
        MovieClip(parent).groundTouch = true;
    } else {
        MovieClip(parent).groundTouch = false;
    }
}

そして、ジャンプ関数は次のように実行されます。

stage.addEventListener(Event.ENTER_FRAME, updates);
function updates(e:Event):void{

    player.y += downMomentum;

    if(!groundTouch && downMomentum < downMomCap){
        downMomentum += gravity;
    }
    if(downMomentum > downMomCap){
        downMomentum = downMomCap;
    }

    if(upDown && !jumping && groundTouch){
        jumping = true;
        jumpTimer.reset();
        jumpTimer.start();
    }
}

jumpTimer.addEventListener(TimerEvent.TIMER, jumpTick);
function jumpTick(e:TimerEvent):void{
    if(downMomentum*-1 < downMomCap){
        downMomentum  -= jumpProg * jumpIncrement;
    }else{
        downMomentum = downMomCap * -1;
    }
    jumpProg -= 1;
}

jumpTimer.addEventListener(TimerEvent.TIMER_COMPLETE, jumpDone);
function jumpDone(e:TimerEvent):void{
    jumpTimer.stop();
    jumping = false;
    jumpProg = 5;
}

私はこれに対する解決策を見つけることができませんが、プラットフォームに触れているプレーヤーをチェックする方法に関係していると思われます.

4

0 に答える 0