Создание простой RPG-игры, впервые использующей XNA.XNA spritesheet animation
Попытка заставить моего персонажа столкнуться с разными способами, когда я двигаюсь в разных направлениях.
Проблема в том, что, когда я запускаю, я не могу даже увидеть свою текстуру, странно, что когда я перехожу по определенной позиции в игре, весь спрайт становится видимым, то же самое для моего AI NPC: s .. Это похоже на то, что они лежат там за фоном, а прямоугольник, который я перемещаю, прозрачен (так что я вижу на этом фоне).
FrameWidth и FrameHeight отправляются при создании экземпляра класса. (высота = 0 (начиная с верхней части спрайта), width = spritesheetwidth/4 (чтобы получить этот единственный спрайт).)
Скорость - это скорость движения персонажа.
public override void Update(GameTime gameTime)
{
ObjectRectangle = new Rectangle(CurrentFrame * FrameWidth, 0, FrameWidth, FrameHeight);
Origin = new Vector2(ObjectRectangle.Width/2, ObjectRectangle.Height/2);
Position += Velocity;
ObjectRectangleX = (int)PositionX;
ObjectRectangleY = (int)PositionY;
#region movement
if (Keyboard.GetState().IsKeyDown(Keys.D) && Pastkey.IsKeyUp(Keys.A) && Pastkey.IsKeyUp(Keys.W) && Pastkey.IsKeyUp(Keys.S))
{
AnimateRight(gameTime);
VelocityX = 2;
}
else if (Keyboard.GetState().IsKeyDown(Keys.A) && Pastkey.IsKeyUp(Keys.D) && Pastkey.IsKeyUp(Keys.W) && Pastkey.IsKeyUp(Keys.S))
{
AnimateLeft(gameTime);
VelocityX = -2;
}
else if (Keyboard.GetState().IsKeyDown(Keys.W) && Pastkey.IsKeyUp(Keys.A) && Pastkey.IsKeyUp(Keys.D) && Pastkey.IsKeyUp(Keys.S))
{
AnimateUp(gameTime);
VelocityY = -2;
}
else if (Keyboard.GetState().IsKeyDown(Keys.S) && Pastkey.IsKeyUp(Keys.A) && Pastkey.IsKeyUp(Keys.W) && Pastkey.IsKeyUp(Keys.D))
{
AnimateDown(gameTime);
VelocityY = 2;
}
else
{
Velocity = Vector2.Zero;
}
Pastkey = Keyboard.GetState();
#endregion
}
#region Animations
public void AnimateDown(GameTime gameTime)
{
CurrentFrame = 2;
}
public void AnimateRight(GameTime gameTime)
{
CurrentFrame = 3;
}
public void AnimateLeft(GameTime gameTime)
{
CurrentFrame = 1;
}
public void AnimateUp(GameTime gameTime)
{
CurrentFrame = 0;
}
#endregion
}
метод Draw выглядит следующим образом:
public virtual void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(ObjectTexture, Position, ObjectRectangle, Color.White, 0f, Origin, 1.0f, SpriteEffects.None, 0f);
GameList.Add(this);
}
(Игнорировать List.Add)
Так что я нужна помощь с "замок" текстуру к прямоугольнику.
Изменение уровня глубины не помогло, к сожалению:/ И эти две линии перемещает прямоугольник Vector, поэтому они очень нужны :) – IRDuck
Какой прямоугольник? Только один я вижу ObjectRectangle, который представляет собой исходный прямоугольник, который установлен правильно, как 'ObjectRectangle = новый прямоугольник (CurrentFrame * FrameWidth, 0, FrameWidth, FrameHeight);' Источник прямоугольник относительно положения объектов , Кроме того, вы можете ссылаться на изображение своего спрайта, что может помочь показать какие-либо проблемы. – Jon
http://homepage.lnu.se/student/aw222fu/pics/CurrentSprites.png Это будет тот, что 5-й сверху - это символ: D Кроме того, это означает, что я могу удалить эти две строки полностью? – IRDuck