0

学校の授業用に、easeljs ライブラリを使用して簡単なゲームを作成し、javascript を学習しています。私が作成したヒットテストを使用して、ターゲットを指しているときに小さなアニメーションを表示することで、十字線がプレーヤーにフィードバックを与えるようにしたいと考えています。

ただし、十字線がターゲットに触れると、アニメーション (十字線の​​中央を指す 2 つの小さな三角形) が最初のフレームで止まっているように見えます。

これが私のコードの一部です。これらの関数の両方をティッカー関数内に配置しました。関数は本来の機能を果たします (console.log にメッセージを送信して確認しました) が、変数「hitTestControle」が true に設定されるとすぐにアニメーションがリセットされると思います。すべてのコードを確認したい場合は、「ゲーム」へのリンクを次に示します: http://athena.fhict.nl/users/i279907/achtergrond/achtergrond.html

function hitTest() {
    if(distance(crossHair, block) < 60) {
        hitTestControle = true; 
} else {
        hitTestControle = false;
        console.log(hitTestControle);
    }
}

function hitTestControl() {
    if(hitTestControle == true) {
        crossHair.gotoAndPlay("move");
        console.log("hit");
    } else {
        crossHair.gotoAndPlay("stop");
    }
}

PS: 私が使用したこのヒットテストにも何か問題があるようです。

function distance() {
    var difx = blok.x - crossHair.x;
    var dify = blok.y - crossHair.y;
    return Math.sqrt( (difx * difx) + (dify * dify) );
}
4

1 に答える 1

0

アニメーションを開始しているようです... 最初のフレームに設定して開始します... hitTestControle が true になるたびに。ターゲットの上にカーソルを置いている限り、hitTestControle は true になるため、アニメーションが 2 番目のフレームに到達することはありません。

必要なことは、hitTestControle = false から hitTestControle = true に遷移したときにアニメーションを開始することですが、それが起こったら、アニメーションを自動的に再生させるだけです。

hitTestControl() 関数を次のように変更してみてください。

function hitTestControl() {
    if(hitTestControle == true && alreadyOverHit == false) {
        crossHair.gotoAndPlay("move");
        alreadyOverHit = true;
        console.log("hit");
    } else {
        crossHair.gotoAndPlay("stop");
        alreadyOverHit = false;
    }
}

言い換えれば、アニメーションを 1 回だけ開始し、最初のフレームでヒットを検出し、ターゲットから離れて戻ってくるまで触れないでください。

于 2012-12-18T23:24:39.377 に答える