0

これを適切に行う方法についてのチュートリアルを探していましたが、Google は空のままです。多分これは本当に単純なテーマですが、どうすればよいかわかりません。

これまでに見つけたものから、次のようなコードが得られます。

        if (currentKeyboardState.IsKeyDown(Keys.A))
        {
            RotationAngle += 0.01f;
            float circle = MathHelper.Pi * 2;
            RotationAngle = RotationAngle % circle;
        }

ただ、これはあまり効果がありません。MSDNから来ました。それが私が見つけることができる最も見栄えの良い解決策でした。

私がやりたいのは、プレイヤーが船を回転させて別の方向に撃てるようにすることだけです。小惑星にかなり似たゲームを作っていますが、現時点では一方向にしか撃てません。

どんな助けでも大歓迎です:)

編集:これは私の現在の Player.cs です:

using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace GameTest
{
    class Player
    {
        public Texture2D PlayerTexture;
        public Vector2 Position;
        public bool Alive;
        public int Health;
        public Vector2 origin;
        public float RotationAngle;
        KeyboardState currentKeyboardState;
        KeyboardState previousKeyboardState;
        public int Width
        {
            get { return PlayerTexture.Width; }
        }
        public int Height
        {
            get { return PlayerTexture.Height; }
        }


        public void Initialize(Texture2D texture, Vector2 position)
        {
            PlayerTexture = texture;

            Position = position;

            Alive = true;

            Health = 10;

            origin.X = PlayerTexture.Width / 2;
            origin.Y = PlayerTexture.Height / 2;
        }

        public void Update(GameTime gameTime)
        {
            RotationAngle += 10f;

            previousKeyboardState = currentKeyboardState;
            currentKeyboardState = Keyboard.GetState();

            float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;

            if (currentKeyboardState.IsKeyDown(Keys.A))
            {

                //float circle = MathHelper.Pi * 2;
                //RotationAngle = RotationAngle % circle;
            }

            if (currentKeyboardState.IsKeyDown(Keys.D))
            {
                //rotation
            }
        }

        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(PlayerTexture, Position, null, Color.White, RotationAngle, origin, 1f, SpriteEffects.None, 0f);
        }
    }
}
4

1 に答える 1

0

私の推測では、「原点」または回転の中心がありません。

RotationAngle += .5f;
float circle = MathHelper.Pi * 2;
RotationAngle = RotationAngle % circle;

Vector2 origin = new Vector2(texture.Width / 2, texure.Height / 2);

spriteBatch.Draw(texture, position, null, Color.White, RotationAngle, origin, 1.0f, SpriteEffects.None, 0f);

撮影したい角度に関しては、いくつかのジオメトリが必要になります (このようなもので、テストされていません...しかし、私の記憶が正しければ):

Vector2 velocity = new Vector2(speed*Math.Cos(RotationAngle), speed*Math.Sin(RotationAngle));

また、デバッガを使用して、回転角度が正しく変化していることを確認してください。

于 2013-04-18T13:28:21.340 に答える