0

私は現在、javascript と processing.js を使用してゲームに取り組んでおり、物を斜めに移動する方法を理解するのに苦労しています。このゲームでは、中心にあるオブジェクトが周囲の他のオブジェクトを撃ちます。現在、弾丸を垂直または水平のみに移動しても問題はありませんが、弾丸アルゴリズムの斜めの動きを実装するのは困難です。

試行に関しては、数学的な思考のキャップをかぶって、直線に沿った動きに y=mx+b 式を使用してみましたが、これが私のコードの最終的な外観です。

ellipse(shuriken.xPos, shuriken.yPos, shuriken.width, shuriken.height); //this is what I want to move diagonally

    if(abs(shuriken.slope) > 0.65) {
        if(shuriken.targetY < shuriken.OrigYPos) {
            shuriken.yPos -= 4;
        } else {
            shuriken.yPos += 4;
        }
        shuriken.xPos = (shuriken.yPos - shuriken.intercept)/shuriken.slope;

    } else {
        if(shuriken.targetX < shuriken.OrigXPos) {
            shuriken.xPos -= 4;
        } else {
            shuriken.xPos += 4;
        }
        shuriken.yPos = shuriken.slope * shuriken.xPos + shuriken.intercept;
    }

上記のコードは、線の傾きによって速度が変化するため、非常に悪質でハックです。

三角関係を実装しようとしましたが、それでも無駄です。

どんな助け/アドバイスも大歓迎です!

4

2 に答える 2

4

このように考えてみてください: 手裏剣をsピクセルで動かします。モーションが水平方向の場合は、sピクセルを水平方向に移動する必要があります。垂直の場合、垂直方向のsピクセル。ただし、それ以外の場合は、水平/垂直のピクセルの組み合わせになります。正しい組み合わせは?sでは、ある点から任意の方向に距離を投影すると、どのような形になるでしょうか? そうです、半径 の円sです。方向を角度 で表しましょうa。だから私たちはこの写真を持っています:

画像

と をどのように取得しxますyか? 気がつけば、三角形があります。三角法を思い出すと、これがまさに正弦関数、余弦関数、正接関数の目的です。私はニーモニック SOHCAHTOA を介してそれらの定義を学びました。つまり、Sin (a) = 反対/斜辺、Cos(a) = 隣接/斜辺、Tan(a) = 反対/隣接。この場合、角度の反対側は で、角度ayaは ですx。したがって、次のようになります。

cos(a) = x / s
sin(a) = y / s

xとを解くy:

x = s * cos(a)
y = s * sin(a)

したがって、 angle が与えられ、a手裏剣のsピクセルを移動したい場合は、s * cos(a)水平方向とs * sin(a)垂直方向に移動する必要があります。

javascriptと関数aには、度数ではなくラジアンを渡すようにしてください。Math.sinMath.cos

radians = degrees * pi / 180.0

これが、過去に私をたくさん噛んだため、三角関数のソリューションが機能しなかった理由かもしれません。

于 2012-12-30T05:22:25.433 に答える
1

移動しようとしている角度と速度がわかっている場合は、それを極座標として扱い、デカルト座標に変換して x、y ベクトルを取得し、その方向と速度でオブジェクトを移動する必要があります。 .

角度がわからない場合は、X の差と Y の差をとってベクトルを考え出すこともできます (これは、2 点間の勾配を計算できるため、実行できることがわかっています)。次に、結果のベクトルをベクトルの長さで割って単位ベクトルを取得します。これを速度に合わせてスケーリングし、オブジェクトを移動できる最終的なベクトルを取得できます。

(これはおそらく kennypu がベクトルに固執することで何を意味するのか?)

于 2012-12-30T05:28:33.770 に答える