嘿傢伙我得到了這個問題,我只是不能讓我的敵人旋轉我的角色 我一直在嘗試幾天,並詢問周圍,但沒有,所以這將是awsome如果你可以給我一些想法。如何讓敵人面對一個角色
這是我的敵人類現在這個代碼在這裏一切正常,但它確實我想要它面臨的鼠標,而不是我的性格
class Class1
{
Character character = new Character();
EnemyShip blah = new EnemyShip();
Texture2D texture;
Rectangle rectangle;
public Vector2 origin;
public Vector2 velocity;
public Vector2 position;
float rotation;
const float forwardvelocity = 1f;
float friction = 0.1f;
public Vector2 distance;
public void LoadContent(ContentManager Content)
{
texture = Content.Load<Texture2D>("Ships/WarShip");
position = new Vector2(800, 300);
}
public void Update(GameTime gameTime)
{
MouseState mouse = Mouse.GetState();
distance.X = mouse.X - position.X; // these two line are the one i want to
distance.Y = mouse.Y - position.Y; // change however when i change mouse.X to //say character.Position.X my enemy ship moves towards the top left corner of the screen //and not the character
rotation = (float)Math.Atan2(distance.Y, distance.X);
position = velocity + position;
velocity.X = (float)Math.Cos(rotation) * forwardvelocity;
velocity.Y = (float)Math.Sin(rotation) * forwardvelocity;
rectangle = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height);
origin = new Vector2(rectangle.Width/2, rectangle.Height/2);
}
public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
{
spriteBatch.Draw(texture, position, null, Color.White, rotation, origin, 1f, SpriteEffects.None, 0);
}
}
}
這是我的性格類
class Character
{
public Texture2D texture;
public float angle = 0;
public Vector2 velocity;
public Vector2 Position = new Vector2(0, 0);
public float forwardvelocity = 5;
public float friction = 0.03f;
public Vector2 origin;
public Rectangle sourcerectangle;
public void LoadContent(ContentManager Content)
{
texture = Content.Load<Texture2D>("Ships/charactership");
}
public void Update(GameTime gameTime)
{
Position += velocity;
if (Keyboard.GetState().IsKeyDown(Keys.W))
{
velocity.X = (float)Math.Cos(angle) * forwardvelocity;
velocity.Y = (float)Math.Sin(angle) * forwardvelocity;
}
if (Keyboard.GetState().IsKeyDown(Keys.S))
{
velocity.X = -(float)Math.Cos(angle) * forwardvelocity;
velocity.Y = -(float)Math.Sin(angle) * forwardvelocity;
}
if (Keyboard.GetState().IsKeyDown(Keys.A)) angle -= 0.05f;
if (Keyboard.GetState().IsKeyDown(Keys.D)) angle += 0.05f;
else if (velocity != Vector2.Zero)
{
float i = velocity.X;
float j = velocity.Y;
velocity.X = i -= friction * i;
velocity.Y = j -= friction * j;
}
//--------------------------------------------------------------
}
public void Draw(SpriteBatch spriteBatch)
{
sourcerectangle = new Rectangle(0, 0, texture.Width, texture.Height);
origin = new Vector2(texture.Width/2, texture.Height/2);
spriteBatch.Draw(texture, Position, sourcerectangle, Color.White, angle, origin, 1.0f, SpriteEffects.None, 0);
}
}
}
「character.Position.X [...]朝左上角」 - 似乎字符位置是0/0。那爲什麼呢?你確定,人物移動正確嗎?你確定你正在檢查正確的角色對象的位置嗎?在這兩個註釋行上設置一個斷點,並檢查預期的字符位置是否與實際位置匹配。 – Corak
我可以建議你使用矩陣而不是角度。它將使向3D系統的過渡變得容易得多,避免潛在的歐拉角問題,並且性能會比使用atan2,sin和cos更好。矩陣在2D(3x3)中的工作方式與在3D中一樣(4x4) – Skizz
感謝您的建議虐待嘗試在我的下一個項目中實現它 – Luke