Показать сообщение отдельно
Старый 24.01.2013, 19:01   #18
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений
(для 2,526 пользователей)
Ответ: Смена анимации с помощью KeyDown

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

для того чтоб сделать при нажатии хотьбу а при ненажатии другую анимацию нужно использовать переменные

я использовал эти

Global player_start=0 - игрок начал идти
Global player_stop=1 - игрок остновился
Global player_still=1 - игрок стоит

вот код

Graphics3D 800,600,16,2
SetBuffer BackBuffer
()
cam=CreateCamera()
lite CreateLight(1
MoveEntity lite,5,0,0

;--------------------------------------
m=LoadAnimMesh("officer.b3d")
men=ExtractAnimSeq(m,212,232)
men2=ExtractAnimSeq(m,236,260)
men3=ExtractAnimSeq(m,301,319)

ScaleEntity m,0.1,0.1,0.1
PositionEntity m
,0,0,0,True

PointEntity cam
,m
PositionEntity cam
,0,3,-7

Animate m
,1,0.5,men

Global player_start=сигнал для старта ходьбы
Global player_stop=сигнала для остановки ходьбы
Global player_still=1   ;игрок стоит

Repeat
    
If KeyHit(1End
    UpdateWorld

            player_start
=0;Обнуление сигнала для старта ходьбы
            
            
If KeyHit(200player_start=1:player_stop=-0
            
            
If KeyDown(200)
                
player_still=0
            
Else
                If 
player_still=0 player_stop=1
            
EndIf    
            
            
            
            If 
player_start Animate m,1,0.5,men2,;цифра 6 на конце это transition плавный переход от одной анимации в другую
            
If player_stop Animate m,1,0.5,men,10 :player_still=1:player_stop=0

    
    RenderWorld tween
    Flip

Forever 
может показаться что можно обойтись всего двумя переменными start и stop , например так:

player_start=0;Обнуление сигнала для старта ходьбы
            
            
If KeyHit(200player_start=1:player_stop=-0
            
            
If KeyDown(200)
            
            Else
                
player_stop=1
            
EndIf    
            
            
            
            If 
player_start Animate m,1,0.5,men2,6
            
If player_stop Animate m,1,0.5,men,10:player_stop=
но в таком случае player_stop будет равняться 1 постоянно , если не нажата клавиша вперед а нам нужно чтоб она всплавала единожды, т.е. один кадр, а потом снова становилась 0 .для этого я использую переменную контейер так сказать player_still в которую при первом проигрыше записываем 1 и следовательно если не нажата кнопка вперед проверяем стоит ли игрок If player_still=0 player_stop=1
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Niburiec (24.01.2013)