嘿,伙计们,我遇到了这个问题,我就是无法让我的敌人转向我的角色,我已经尝试了几天并且已经四处询问,但没有任何问题,所以如果你能给我一些想法,那就太棒了。
这是我的敌人类,现在在这段代码中,这里一切正常,它做我想要的,但是它面向鼠标而不是我的角色
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);
}
}
}