0

スタック オーバーフロー ユーザーの皆様、こんにちは。XNA ゲームで楽しい問題が発生しました。

したがって、基本的には 80x80 の小惑星があり、原点を imageW / 2、imageH / 2 に設定します (順序が問題になる場合、小惑星は正方形です)。

これが問題を説明する画像です!ビジュアライゼーション FTW :D

http://i.imgur.com/dsawS.png

それで、何がこれを引き起こしているのかについてのアイデアはありますか?私は1時間を費やし、例を見て、次のように回転することになっていることがわかりました:

http://www.riemers.net/images/Tutorials/XNA/Csharp/Series2D/rotation.jpg

しかし、そうではありません。

これがコードサンプルです。ベクトル位置などを保持するプロパティを持つ Drawable という名前のオブジェクトがあります。

Vector2 asteroidOrigin = new Vector2(asteroidImgs[asteroid.asteroidType].Width / 2, asteroidImgs[asteroid.asteroidType].Height / 2);

drawableList.Add(new Drawable(asteroidImgs[asteroid.asteroidType], asteroid.asteroidPos, asteroid.angle, asteroidOrigin));

描画方法は次のとおりです。

foreach (Drawable drawable in renderManager.getRenderList)
        {
            spriteBatch.Draw(drawable.image, drawable.position, drawable.sourceRectangle, drawable.tint, drawable.angle, drawable.origin, drawable.imageScale, drawable.spriteEffects, drawable.depth);
        }

はい、Drawable クラスには複数のコンストラクターがあり、デフォルト値を割り当てます。

4

1 に答える 1

0

SpriteBatch.Draw で Origin を定義すると、Position 引数で描画されるテクスチャ上の新しいポイントが定義されます。明らかに、これは変換と目的の回転に影響します。原点を画像の中心に設定すると、中心が位置になるように画像が変換され、その点を中心に回転します。原点を Vector2.Zero に設定すると、移動は変更されませんが、画像は左上隅を中心に回転します。

解決策は、スプライトの「位置」として意味するものを再定義して、画像の中心が画面上に描画される場所にするか (これをお勧めします。これをお勧めします)、位置に原点を追加して描画する前に少し作業を実行します。 Drawを呼び出す前に。

繰り返しますが、最初の解決策をお勧めします。これは、画面の中央に円を描きたいときに、その位置を画面の中央に設定するだけで完了できるためです。そのサイズを考慮する必要はありません。等々。

于 2012-04-09T21:11:19.577 に答える