Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Просмотр темы
 Распечатать тему
Спрайт персонажа.
zznob
#1 Распечатать сообщение
Опубликовано 19.09.2011 17:31:14
Новичок


Сообщений: 4
Зарегистрирован: 19.09.11

Доброго времени суток, уважаемые.
Вопрос возник, ну очень глупый, но все же, сам дойти не могу.
Суть:
Есть 2 картинки - спрайт персонажа.
Первая картинка спокойное положение, персонаж стоит.
Вторая картинка - анимация, персонаж идет.
С отрисовкой движения персонажа влево и вправо все в принципе ясно, реализовано вот так:
Загрузить источник  GeSHi: C#
  1.  
  2. spriteBatch.Begin();
  3. if (isWalking)
  4. {
  5. Rectangle sourceRect=new Rectangle(frameWidth*curentFrame,0,frameWidth,frameHeight);
  6. SpriteEffects effect = SpriteEffects.None;
  7. if (isWalkingRight)
  8. effect = SpriteEffects.FlipHorizontally;
  9. spriteBatch.Draw(walkTexture, rect, sourceRect, Color.White, 0, Vector2.Zero, effect, 0);
  10.  
  11. else
  12. {
  13. spriteBatch.Draw(idleTexture,rect,Color.White);
  14. }
  15. spriteBatch.End();
Добавлено за 0.007 секунд, используя GeSHi 1.0.8.2

Как реализовать отрисовку движения персонажа вверх и вниз?
 
VAB
#2 Распечатать сообщение
Опубликовано 19.09.2011 17:55:58
Аватар пользователя

Администратор


Сообщений: 1431
Зарегистрирован: 21.07.09

Rectangle sourceRect=new Rectangle(0, frameHeight*curentFrame,frameWidth,frameHeight);
 
zznob
#3 Распечатать сообщение
Опубликовано 20.09.2011 09:06:01
Новичок


Сообщений: 4
Зарегистрирован: 19.09.11

Rectangle sourceRect=new Rectangle(0, frameHeight*curentFrame,frameWidth,frameHeight);

при таком решении получается следующее:
i033.radikal.ru/1109/ca/a2bfcdb0acf0t.jpg
Для наглядности приведу листинг AnimateSprite.cs
Загрузить источник  GeSHi: C#
  1.  
  2. class AnimateSprite
  3. {
  4. Texture2D idleTexture;
  5. Texture2D walkTexture;
  6.  
  7. Rectangle rect;
  8.  
  9. int frameWidth;
  10. int frameHeight;
  11.  
  12. public int FrameCount
  13. {
  14. get
  15. {
  16. return walkTexture.Width/frameWidth;
  17. }
  18. }
  19.  
  20. int curentFrame;
  21. int timeElapsed;
  22. int timeForFrame = 100;
  23.  
  24. bool isWalking;
  25. bool isWalkingRight;
  26. //bool isWalkingUp;
  27. bool isWalkingDown;
  28.  
  29. public AnimateSprite(Rectangle rect, Texture2D idle, Texture2D walk)
  30. {
  31. this.rect = rect;
  32. this.idleTexture =idle ;
  33. this.walkTexture = walk;
  34. frameWidth = frameHeight = walk.Height;
  35. }
  36.  
  37. public void Walk(bool right)
  38. {
  39. isWalking = true;
  40. isWalkingRight = right;
  41. }
  42. //Пробуем
  43. public void WalkDown(bool down)
  44. {
  45. isWalking = true;
  46. isWalkingDown = down;
  47. }
  48. //конец пробы
  49.  
  50. public void Stop()
  51. {
  52. isWalking = false;
  53. curentFrame = 0;
  54. timeElapsed = 0;
  55. }
  56.  
  57. public void Update(GameTime gameTime)
  58. {
  59. if (isWalking)
  60. {
  61. timeElapsed += gameTime.ElapsedGameTime.Milliseconds;
  62. if (timeElapsed > timeForFrame)
  63. {
  64. timeElapsed = 0;
  65. curentFrame = (curentFrame + 1) % FrameCount;
  66. }
  67. }
  68.  
  69. }
  70. public void Draw(SpriteBatch spriteBatch)
  71. {
  72. spriteBatch.Begin();
  73. if (isWalking)
  74. {
  75. Rectangle sourceRect=new Rectangle(frameWidth*curentFrame,0,frameWidth,frameHeight);
  76. SpriteEffects effect = SpriteEffects.None;
  77. if (isWalkingRight)
  78. effect = SpriteEffects.FlipHorizontally;
  79. spriteBatch.Draw(walkTexture, rect, sourceRect, Color.White, 0, Vector2.Zero, effect, 0);
  80.  
  81. if(isWalkingDown)
  82. sourceRect=new Rectangle(0, frameHeight*curentFrame,frameWidth,frameHeight);
  83. effect = SpriteEffects.FlipHorizontally;
  84. spriteBatch.Draw(walkTexture, rect, sourceRect, Color.White, 80, Vector2.One, effect, 0);
  85. }
  86. else
  87. {
  88. spriteBatch.Draw(idleTexture,rect,Color.White);
  89. }
  90. spriteBatch.End();
  91. }
  92.  
  93.  
  94. }
  95.  
Добавлено за 0.015 секунд, используя GeSHi 1.0.8.2
 
VAB
#4 Распечатать сообщение
Опубликовано 20.09.2011 10:50:08
Аватар пользователя

Администратор


Сообщений: 1431
Зарегистрирован: 21.07.09

Блин, я тебя не правильно понял.
sourceRect выбирает определенный ректангл с линейки, если линейка горизонтальная - первый вариант, если вертикальная второй.
Если сетка - комбинируй.

Остальное зависит только от набора "кадров", как сформируешь так и будет отображаться
 
zznob
#5 Распечатать сообщение
Опубликовано 20.09.2011 11:03:31
Новичок


Сообщений: 4
Зарегистрирован: 19.09.11

у меня один набор кадров - анимация хотьбы. Мне нужно его всего лишь разворачивать в зависимости от направления движения.
Как это сделать не особенно пойму.
Загрузить источник  GeSHi: C#
  1. if (isWalking)
  2. {
  3. Rectangle sourceRect=new Rectangle(frameWidth*curentFrame,0,frameWidth,frameHeight);
  4. SpriteEffects effect = SpriteEffects.None;
  5. if (isWalkingRight)
  6. effect = SpriteEffects.FlipHorizontally;
  7. spriteBatch.Draw(walkTexture, rect, sourceRect, Color.White, 0, Vector2.Zero, effect, 0);
Добавлено за 0.007 секунд, используя GeSHi 1.0.8.2

анимация движения влево и вправо.
В Game1.cs вызывается так:
Загрузить источник  GeSHi: C#
  1. //управление персонажем
  2. KeyboardState state = Keyboard.GetState();
  3. //если пользователь нажал влево
  4. if (state.IsKeyDown(Keys.Left))
  5. player.Walk(true);
  6. //если пользователь нажал вправо
  7. if (state.IsKeyDown(Keys.Right))
  8. player.Walk(false);
Добавлено за 0.011 секунд, используя GeSHi 1.0.8.2

мне нужно добавить вверх и вниз... вот тут и туплю... :|
 
VAB
#6 Распечатать сообщение
Опубликовано 20.09.2011 11:17:42
Аватар пользователя

Администратор


Сообщений: 1431
Зарегистрирован: 21.07.09

научись правильно задавать вопросы :)
Загрузить источник  GeSHi: C#
  1.  
  2.  
  3. pos += new Vector2((float)(Math.Sin(angle)), (float)(-Math.Cos(angle)));
  4.  
  5.  
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.2
 
zznob
#7 Распечатать сообщение
Опубликовано 20.09.2011 11:55:04
Новичок


Сообщений: 4
Зарегистрирован: 19.09.11

не понял, это к чему?
Вот полностью исходник проекта.
zznob присоединил файл:
itishneg.zip
Изменил(а) zznob, 20.09.2011 11:59:18
 
VAB
#8 Распечатать сообщение
Опубликовано 20.09.2011 16:40:21
Аватар пользователя

Администратор


Сообщений: 1431
Зарегистрирован: 21.07.09

Меняешь позицию спрайта по вышеуказанной формуле и объект будет двигаться в нужном направлении со скоростью 1 по модулю
 
dampirik
#9 Распечатать сообщение
Опубликовано 20.09.2011 23:00:19
Аватар пользователя

Ветеран


Сообщений: 957
Зарегистрирован: 21.02.10

В драф есть ротатион, угол поворота им можно поворачивать куда угодно, также спрайтеффект можно зеркально отобразить.
 
Перейти на форум:
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,73 секунд 8,710,783 уникальных посетителей