Я новичок в этом, поэтому не совсем уверен, правильно ли я размещаю это, но у меня возникло несколько проблем при создании моей игры. Моя главная цель - создать игровую игру с наивысшей стрельбой, используя движение, где «игрок» вращается на основе текущей позиции мыши и может нажимать «w», чтобы двигаться к нему с заданной скоростью.Обновление текстуры во время движения
Основная проблема заключается в том, что когда игра загружается, движение работает именно так, как я этого хочу, но сама текстура не движется, а только drawRectangle.
Game1.cs:
player = new Player(Content, @"graphics\Player1", 500, 500, spritePosition);
spritePosition = new Vector2(player.CollisionRectangle.X, player.CollisionRectangle.Y);
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
KeyboardState keyboard = Keyboard.GetState();
MouseState mouse = Mouse.GetState();
IsMouseVisible = true;
distance.X = mouse.X - spritePosition.X;
distance.Y = mouse.Y - spritePosition.Y;
//Works out the rotation depending on how far away mouse is from sprite
rotation = (float)Math.Atan2(distance.Y, distance.X);
// TODO: Add your update logic here
spritePosition = spriteVelocity + spritePosition;
spriteOrigin = new Vector2(player.DrawRectangle.X/2, player.DrawRectangle.Y/2);
if (Keyboard.GetState().IsKeyDown(Keys.W))
{
spriteVelocity.X = (float)Math.Cos(rotation) * tangentialVelocity;
spriteVelocity.Y = (float)Math.Sin(rotation) * tangentialVelocity;
}
else if(spriteVelocity != Vector2.Zero)
{
Vector2 i = spriteVelocity;
spriteVelocity = i -= friction * i;
}
Это основной код движения от функции обновления, а также, где был создан новый игрок.
Player.cs:
class Player
{
Texture2D sprite;
Rectangle drawRectangle;
int health = 100;
public Player(ContentManager contentManager, string spriteName, int x , int y, Vector2 velocity)
{
LoadContent(contentManager, spriteName, x, y, velocity);
}
public Rectangle CollisionRectangle
{
get { return drawRectangle; }
}
public Rectangle DrawRectangle
{
get { return drawRectangle; }
set { drawRectangle = value; }
}
public int Health
{
get { return health; }
set {
health = value;
if (health <= 0)
health = 0;
if (health > 100)
health = 100;
}
}
public Vector2 Velocity
{
get { return Velocity; }
set { Velocity = value; }
}
public void Update(GameTime gameTime, KeyboardState keyboard, MouseState mouse)
{
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(sprite, drawRectangle, Color.White);
}
private void LoadContent(ContentManager contentManager, string spriteName, int x, int y, Vector2 velocity)
{
sprite = contentManager.Load<Texture2D>(spriteName);
drawRectangle = new Rectangle(x - sprite.Width/2, y - sprite.Height/2, sprite.Width, sprite.Height);
}
}
я не знаю, что включить в функции обновления из player.cs, является ли код для движения должны идти туда или главный Game1.cs.
Надеюсь, этого достаточно для того, чтобы вы, ребята, могли помочь. Извините, что существует довольно много кода, но я просто не знаю, где происходит ошибка.
Заранее спасибо
Мосты, я использовал метод SpriteBatch.Draw (Texture2D, Vector2, Rectangle, Color) 'для рисования спрайта в позиции. Где vector2 - позиция, а прямоугольник - источник текстуры. –