ブレゼンハム
昔、人々がまだ線や円を描くための独自の基本的なビデオルーチンを書いていたとき、ブレゼンハムの線アルゴリズムを使用することは前代未聞ではありませんでした。
Bresenhamはこの問題を解決します。画面上にdx
ピクセルを水平方向に移動し、同時にdy
垂直方向にピクセルをスパンする線を画面に描画します。行には固有の「浮動」文字があります。整数ピクセルを使用している場合でも、合理的な傾きになります。
ただし、アルゴリズムは高速でなければなりません。つまり、整数演算のみを使用できます。また、乗算も除算もせずに、加算と減算のみを行います。
それをあなたのケースに適応させることができます:
- (x方向)(ブレゼンハムアルゴリズムの観点から)は時計です。
- 「y方向」は、インクリメントする値です(つまり、キャラクターの位置-注意、これは実際にはスプライトの「y」や画面上の何かではなく、より抽象的な値です)
ここでの「x / y」は、画面上の場所ではなく、時間内のディメンションの値です。明らかに、スプライトが画面上で任意の方向に実行されている場合、2Dで2つ、3Dで3つ、別々に実行される複数のBresenhamがあります。
例
軸の1つに沿って0から25までの単純な動きでキャラクターを動かしたいとしましょう。速度2.5で移動しているため、フレーム10に到着します。
これは、(0,0)から(10,25)までの「線の描画」と同じです。Bresenhamのラインアルゴリズムをつかみ、実行させます。あなたがそれを正しく行えば(そしてあなたがそれを勉強すると、それがあなたがそれを正しくする方法が非常にすぐに明らかになります)、それはあなたのために11の「ポイント」を生成します(0,0)、(1,2)、(2、 5)、(3,7)、(4,10)...(10,25)。
適応のヒント
そのアルゴリズムをグーグルで検索してコードを見つけた場合(ウィキペディアにはかなり大きな条約があります)、次のことに注意する必要があります。
- これは明らかに、すべての種類のために働く
dx
とdy
。ただし、特定の1つのケースに興味があります(つまり、決してありませんdx=0
)。
- 通常の実装では、正と負のどちらであるか
dx
、およびそうでないかどうかに応じて、画面上の象限についていくつかの異なるケースがあります。もちろん、ここで必要なものも選択します。ティックごとに増加する方向が常に「クロック」方向であることを特に確認する必要があります。dy
abs(dx)>abs(dy)
1
これらの単純化を適用すると、結果は非常に単純になり、実数を完全に取り除きます。