forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Как сделать анимацию спрайта? (http://forum.boolean.name/showthread.php?t=3138)

dimanche13 09.04.2007 19:00

Как сделать анимацию спрайта?
 
Возможно этот вопрос поднимался. И невозможно, а точно! Хотелось бы посмотреть на реализацию через БлитцМакс. Ссылки, примеры и ваши наработки. В крайнем случае принципы работы.

johnk 09.04.2007 19:05

Мою гаму видел?

Если нет, то в подписи сайт, смотри на здоровье! Кста тама есть переведенная часть хелпа, там то, что именно тебе нужно.

dimanche13 10.04.2007 12:15

Re: Как сделать анимацию спрайта?
 
Зарегился у тебя на сайте. Скачал хелп к мах2д - там не нашел что мне нужно... и игры твоей не нашел. Дай ссылки прямые, чтоли...

johnk 10.04.2007 14:28

Re: Как сделать анимацию спрайта?
 
Ну в хелпе смотри как сделать, т.е. команды LoadAnimImage и DrawImage, а реализация есть тут.

johnk 10.04.2007 14:54

Re: Как сделать анимацию спрайта?
 
А если тебе код нужен, то вот так там делается:
ExplImage:TImage=LoadAnimImage ("incbin::images\1.bmp",128,128,0,24) - гружу картинку
Далее в типе взрыва делаю функцию и метод
Function Create(x#,y#)
Local c:Explosion=New Explosion
c.x#=x#
c.y#=y#
c.frame=0
ListAddLast (ExpList,c)
End Function
Method update()
If frame<=23
SetScale 0.5,0.5
DrawImage explimage,x,y,frame
SetScale 1,1
Else
ListRemove(ExpList,Self)
End If
frame:+1
End Method
А потом использую в цикле

Explosion.Create(a.GetX(),a.GetY())

For Local vzriv:Explosion=EachIn ExpList
vzriv.update
Next

dimanche13 10.04.2007 15:02

Re: Как сделать анимацию спрайта?
 
Ссылка на "spacer" ? я не заметил там никакой анимации... А что использовать надо команды LoadAnimImage и DrawImage это я и так знал... Хотя нашел у тебя статейку "Сто одно Изображение" сейчас вникаю...

johnk 10.04.2007 15:05

Re: Как сделать анимацию спрайта?
 
"я не заметил там никакой анимации... "

- а взрыв?

dimanche13 10.04.2007 16:07

Re: Как сделать анимацию спрайта?
 
Ой да точно взрывы есть! А то я один раз стрельнул да и не попал нив кого. Вырубил. Ок. Ща попробую, спасибо!

johnk 10.04.2007 16:40

Re: Как сделать анимацию спрайта?
 
Кстати, dimanche13 в 5 посте, я написал как это сделать :)

dimanche13 11.04.2007 13:03

Re: Как сделать анимацию спрайта?
 
Спасибо JohnK, но у меня некоторые затруднения, потому что у тебя взрыв - это последовательный набор картинок всех стадий взрыва. Ты их перебираешь и если кончились фреймы удаляешь. У меня Бомберман . Есть картинка с какого-то сайта стадии его движения вверх ,вниз и т.д. Но когда бомберчел движется вверх надо показать как он перебирает ногами, вправо то же самое и во все стороны. То есть не перебор картинок от начала до конца а по-другому... вот.

johnk 11.04.2007 14:01

Re: Как сделать анимацию спрайта?
 
Если это отдельные картинки то немного легче. Делается так:
Код:

vniz=loadanimimage("vniz.bmp".....и пошло поехало)
If keydown(KEY_DOWN)
Ты должен проверить какой кадр, что бы не было ошибок. Допустим у тебя 5 кадров тогда
if frame<=4 (4 потому что отсчет идет с 0)
Потом просто рисуешь картинку
drawimage vniz,x,y,frame
а если пошел 6 кадр, то вернуть его на первый (а точнее нулевой)
Else frame=0
endif
 увеличиваешь кадр
Frame:+1
endif


dimanche13 11.04.2007 15:52

Re: Как сделать анимацию спрайта?
 
Да надо уже хоть что-нибудь попробовать. У самого парочка мыслей есть на этот счет и тебе спасибо, JohnK. Вот попробую выложу что получилось! или не получилось...

dimanche13 12.04.2007 23:29

Re: Как сделать анимацию спрайта?
 
У меня какая-то фигня получается. Да я шагаю вверх и персонаж машет ногами (простите мой русский язык)то есть вроде идет, но при отпускании кнопки может остановиться с занесеной для шага ногой, то есть движение не завершается а кнопка отпущена.

alcoSHoLiK 13.04.2007 01:58

Re: Как сделать анимацию спрайта?
 
Обнуляй кадр.
Другой вариант - устанавливать переменную состояния. Псевдокод:
Код:

If keypressed Then animate = true
...
DrawImage x, y, frame
...
If animate Then
  frame = frame + 1
  If frame = max_frames Then
      animate = false
      frame = 0
  End If
End If

Тогда анимация будет длится до последнего кадра.

dimanche13 13.04.2007 12:20

Re: Как сделать анимацию спрайта?
 
Я сделал вот так :

If KeyDown(KEY_UP)
If animate = True
If frame < (3 - 1)
frame :+ 1
Else
frame = 0
animate = False
End If
Else
frame = 0
animate = True
End If
End If

А alcoSHoLiKу вопрос можешь показать на реальном проектк как твой код реализуется, а то у меня не получилось...
А вопрос так и завис в воздухе... может есть у кого-нить ссылка на подобный код...

alcoSHoLiK 13.04.2007 12:59

Re: Как сделать анимацию спрайта?
 
Чередование кадров должно происходить отдельно от обработки нажатия клавиш. Если б ты сделал в соответствии с приведенным мной псевдокодом, получилось бы так.
Код:

If KeyDown(KEY_UP) Then animate = true

If animate = True
  frame :+ 1
  If frame >= (3 - 1)
      frame = 0
      animate = False
  End If
End If


johnk 13.04.2007 14:46

Re: Как сделать анимацию спрайта?
 
alcoSHoLiK опередил...Тока не пиши
Цитата:

(3 - 1)
А замени на 2...ибо хотя бы от такой математики избавь БМакс...

HolyDel 15.04.2007 02:00

Re: Как сделать анимацию спрайта?
 
Цитата:

А замени на 2...ибо хотя бы от такой математики избавь БМакс...
мну кажется компилятор бмакса с этим сам разберется.

dimanche13 16.04.2007 13:40

Re: Как сделать анимацию спрайта?
 
alcoSHoLiK Спасибо, я уже разобрался! Теперь осталось сделать плавную анимацию, а то без задержки которую я делаю delay-ем кадры бегут слишком быстро. Думаю надо привязать смену кадров ко времени.. пока не знаю как, буду искать.

johnk 16.04.2007 14:02

Re: Как сделать анимацию спрайта?
 
Помочь?

dimanche13 16.04.2007 16:49

Re: Как сделать анимацию спрайта?
 
Сделал вот так, честно сказать, выдрал у кого-то из кода...

If KeyDown(KEY_UP) Then animate = True
Dir = DirUp
If animate = True And (Timer + Temp < MilliSecs())
frame :+ 1
If frame > 2
frame = 0
animate = False
End If
Timer = MilliSecs()
End If

а как бы предложил ты, JohnK ?

johnk 16.04.2007 17:03

Re: Как сделать анимацию спрайта?
 
Способ не универсальный, но все же.
Сделал бы так:
Не в главном Цикле:
Код:

ImageUP=LoadAnimImage.....
Timer=Millisecs()
Frame=0

В главном цикле:
Код:

If KeyDown(KEY_UP)
  If frame<=2
    If Timer + Нужное Кол-во<Millisecs()
      DrawImage ImageUP,x,y,frame
    EndIf
  Else
  frame=0
  Endif
Timer=Millisecs()
Frame:+1
Endif


dimanche13 16.04.2007 17:20

Re: Как сделать анимацию спрайта?
 
Такой способ тоже имеет право на жизнь, но здесь анимация заканчивается при отпускании кнопки. Немного модернизировав код можно получить нужный результат!

johnk 16.04.2007 17:23

Re: Как сделать анимацию спрайта?
 
Дерзай! ;)

dimanche13 16.04.2007 18:54

Re: Как сделать анимацию спрайта?
 
ладно с анимацией вроде разобрались. А где бы взять програмку для создания анимации, удобную, бесплатную и не большую. Что посоветуете? Или нет.. что Вы используете?

johnk 16.04.2007 19:05

Re: Как сделать анимацию спрайта?
 
Я использую Paint, ибо очень удобный. (для меня) А далее обработка PhotoShop'ом.

alcoSHoLiK 16.04.2007 19:09

Re: Как сделать анимацию спрайта?
 
http://www.boolean.name/showthread.php?t=1421
Там Image->Create panorama, что-то типа этого. А рисовать по кадрам можно и в пейнте, хотя обычно Фотошоп используют (удобный, но большой и платный).

dimanche13 17.04.2007 14:05

Re: Как сделать анимацию спрайта?
 
Боялся что посоветуют Фотошоп и Паинт... Так оно и случилось. Чтоже нет других программ? Пока в поиске. Нашел сайт с текстурами http://www.grsites.com/textures/ может кому пригодится...
Блин, да на этом сайте много чего интересного, полазайте, не прогадаете!

johnk 17.04.2007 14:10

Re: Как сделать анимацию спрайта?
 
А какие еще программы нужны? Paint + Photoshop = Красивая Графика.

dimanche13 17.04.2007 22:33

Re: Как сделать анимацию спрайта?
 
Блин а как здесь файл присоединить? Хочу показать как у меня получилась анимация. Для того чтобы поругали или похвалили. Мне важно узнать ваше мнение.


Часовой пояс GMT +4, время: 16:27.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot