2011-05-26 5 views
4

Я делаю небольшую игру на основе учебной игры XNA по игре «shooter» ... после небольшого проб и ошибок, я сделал свой собственный анимированный спрайт, чтобы я мог перемещаться по экран. Проблема в том, что он всегда прав.как перевернуть спрайт в C#

Как я могу изменить это (изображение ниже), чтобы он смотрел в правильном направлении каждый раз, когда нажато ключевое событие?

Я довольно новичок в C#, как вы, возможно, догадались, и я понимаю, что это может быть сложнее, чем я думал, поэтому мне просто нужно знать, как сделать лицо спрайта правильным при движении вправо и влево, когда он движется оставил.

image

Спасибо заранее.

+2

никогда, никогда не называйте свои функции чем-то вроде IDFK. Будет чертовски поддерживать. –

+1

@Dhaivat Pandya: Довольно уверен, что это было просто для того, чтобы понять точку, то есть «я не знаю F @ # $ know». –

+0

lol. Тогда, это прекрасно. –

ответ

2

Обычно лист спрайтов будет содержать изображения для каждого направления. Вы можете перевернуть изображение во время выполнения, но он добавляет обработку изображений, которая не нужна. Я хотел бы предложить вам, что вы просто создаете лист спрайта спереди с каждой запеченной анимацией и просто определяете, какой кадр должен отображаться во время выполнения.

See an example of a simple sprite sheet here

+0

Листы спрайтов - это путь, по одному ячейке для каждого направления – rboarman

+0

Итак, как бы я изменил, какие кадры играл в какое время? – Zanrkvil

+0

@Jay Riggs: Ха-ха, да, я нашел другого. –

5

Вы также можете сделать это путем передачи опции SpriteEffects.FlipHorizontally в ваш метод SpriteBatch.Draw(). Но, как говорили другие, у этого будет больше накладных расходов, чем использование листа спрайтов.

0
SpriteEffects s = SpriteEffects.FlipHorizontally; 
int smX = 200; //smx is the 'x' coordinates. 

    public void runChar() 
    { 
     if (Keyboard.GetState().IsKeyDown(Keys.Left)) 
     { 
      smX -= 2; 
      s = SpriteEffects.FlipHorizontally; 
      //oposite direction. 
     } 
     else if (Keyboard.GetState().IsKeyDown(Keys.Right)) 
     { 
      smX += 2; 
      s = SpriteEffects.None; 
      //original direction. 
     } 
    } 

spriteBatch.Draw(sM, new Rectangle(smX, 200, 100, 100), null, Color.White, rotation, new Vector2(50, 50), s, 0f); 

Это будет «переворачивать» текстуру влево и вправо.

Смежные вопросы