forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Анимация борьбы (http://forum.boolean.name/showthread.php?t=18400)

CostUm 26.07.2013 01:51

Анимация борьбы
 
До сих пор с анимацией запар не было, но возникла проблемка. Что делать когда дело доходит до драки? т.е. при нажатии кнопки происходит анимация удара, соответсвенно кнопку приходится нажимать не один раз) и как сделать чтобы до завершения первой анимации не начиналась вторая? чтобы всё шло своим чередом.

ABTOMAT 26.07.2013 01:55

Ответ: Анимация борьбы
 
В момент включения анимации куда-нибудь записывать, какую ты включил анимацию.
В следующий раз, когда будешь включать анимацию, то проверь: не та же ли это, которая уже запущена? Если нет, то запустить новую, если да, то ничего не делать.

Colossus 01.10.2013 19:55

Ответ: Анимация борьбы
 
Примитивно по твоему вопросу:

Код:

Type player
        Field pl_model%
        Field mouse_click_count%,hit_count%,combo_active_time%
        Field idle_animation%
        Field combo_animation[4]
End Type

создаем тип в котором содержится имя модели, счетчик нажатий мышки, счетчик ударов, и массив анимаций, и время, пока счетчик активен.

Окда?

идем далее.

Код:

Function CreatePlayer.player()
        p.player = New player       
                p\pl_model = xLoadAnimMesh("Data\Mesh\Test_Actor.b3d")
       
                p\mouse_click_count% = 0
                p\hit_count% = 0
                p\combo_active_time% = 0
               
                p\idle_animation = xLoadAnimSeq(p\pl_model,"Data\Anim\Fight_Idle.b3d")
               
                p\combo_animation[1] = xLoadAnimSeq(p\pl_model,"Data\Anim\Kombo_Hit_Leg_1.b3d")
                p\combo_animation[2] = xLoadAnimSeq(p\pl_model,"Data\Anim\Kombo_Hit_Leg_1_block.b3d")
                p\combo_animation[3] = xLoadAnimSeq(p\pl_model,"Data\Anim\Kombo_Hit_Leg_1.b3d")
                p\combo_animation[4] = xLoadAnimSeq(p\pl_model,"Data\Anim\Kombo_Hit_Leg_1.b3d")
        Return p
End Function

Выписываем за всю хурму.

как ты видишь все переменные тут обнулены по дефолту.

идем далее.

Код:

Function UpdatePlayer()
        For p.player = Each player
                If xMouseHit(1)
                        p\mouse_click_count% = p\mouse_click_count% + 1
                                p\hit_count% = p\hit_count% + 1
                                If xAnimSeq(p\pl_model)<>p\combo_animation[p\hit_count%] Then
                                        xAnimate p\pl_model,3,1,p\combo_animation[p\hit_count%]
                                EndIf
                                If p\hit_count% >=4 Then
                                        p\hit_count% = 0
                                        p\mouse_click_count% = 0
                                EndIf       
                End If

                If p\mouse_click_count% <> 0 Then
                        p\combo_active_time% = p\combo_active_time% + 1
                EndIf

                If p\mouse_click_count% > 0 And p\combo_active_time% > 1000
                        p\mouse_click_count% = 0
                        p\hit_count% = 0
                        p\combo_active_time% = 0
                EndIf
               
                If Not xAnimating(p\pl_model) Then xAnimate p\pl_model,1,1,p\idle_animation
        Next
End Function

тут получается как.

Ты тыкаешь мышку. Счетчик нажатий прибавляет еденицу, и счетчик ударов прибавляет еденицу.

вместо циферки в квадратных скобках тут как раз и указана переменная "счетчик ударов" чтоб не гребстись с написанием длинного кода.

в итоге получается что каждое нажатие у тебя сопровождается порядковой анимацией которую ты прописал выше. как только ты тыкаешь кнопку первый раз, запускается счетчик активного времени таймера. как только он доходит до момента истечения, счетчик ударов и кликов обнуляется. соответственно, когда ты тычешь мышку больше скольки то там ударов( хз мож у тя там будет 99Хкомбо) то счетчик опять же обнуляется. это примитивная функция. но думаю, тебе она пригодится, как пища.


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

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