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=11374)

Toon3D 08.12.2009 20:26

Анимация: Нажал - началась, отжал - закончилась
 
Здравствуйте! У меня вот возник вопрос:
Уже дня два, пытаюсь найти как при нажатии кнопки использовать анимацию. Нашел, получилось. Но теперь проблема другая: В моем случае анимация бег, при нажатии кнопки №200 (стрелочка вверх), hero (персонаж) передвигается вперед, с использованием анимации runplayer.b3d. Игра загрузилась. Персонаж стоит как на распятии (так и должно быть, стандартная поза модели), и при нажатии стрелочки, он передвигается вперед и проигрывается анимация (mode:1, повторение), но когда я отпускаю клавишу, анимация продолжает проигрываться, но передвигаться, как и должно быть, он не продолжает.
Я пытаюсь сделать что бы при нажатии стрелочки, анимация проигрывалась, а при отжатии, проигрывалась анимация idle.b3d. То есть, что бы когда стрелочку отпускаешь, он просто стоял на месте, а не бежал. Думаю вопрос выразил правильно и ясно, вот то что я наляпал, для наглядки :)
Код:

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()

hero=LoadAnimMesh("models/player.b3d")
idle=LoadAnimSeq(hero,"anim/idle.b3d")
run=LoadAnimSeq(hero,"anim/runplayer.b3d")
PositionEntity hero,3,0,3

Ground=CreateTerrain(128)

Camera=CreateCamera(hero)
RotateEntity camera,25,0,0

light=CreateLight()
TurnEntity light,90,0,0

Repeat
If Not KeyDown(1) MoveEntity hero,0,-0.1,0
If KeyHit(200) Then Animate hero,1,0.5,run,10
If Not KeyDown(200) Then Animate hero,1,0.5,idle,10
If KeyDown(200) MoveEntity hero,0,0,0.1
If KeyDown(208) MoveEntity hero,0,0,-.1
If KeyDown(203) TurnEntity hero,0,2,0
If KeyDown(205) TurnEntity hero,0,-2,0
UpdateWorld
RenderWorld
Flip
Until KeyHit (1)
End

Вот с таким кодом что выше, когда отпускаешь стрелочку, анимация останавливается на том кадре, на каком я её отпустил, а мне нужно именно что бы останавливался на анимации idle.b3d .
Объяснил кажется подробно, заранее спасибо за ответ! :)

Fatalix3d 08.12.2009 20:43

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
Цитата:

hero=LoadAnimMesh( "models/player.b3d" )
LoadAnimSeq hero,"anim/runplayer.b3d"

Animate hero,2

while not keyhit(1)

If KeyDown(200)
If AnimSeq(hero)=0 Animate hero,1,.5,1,10
Else
If AnimSeq(hero)=1 Animate hero,2,1,0,10
EndIf
Вроде так:)

KingMaks 08.12.2009 20:44

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
PHP код:

key200=false

If Not KeyDown(1Then key200=False

If KeyDown(200Then
  
If AnimSeq(animchild) <> run Then Animate animchild,1,1,run
End 
If

If 
KeyDown(205Then
  
If AnimSeq(animchild) <> run Then Animate animchild,1,1,run
End 
If

If 
KeyDown(203Then
  
If AnimSeq(animchild) <> run Then Animate animchild,1,1,run
End 
If

If 
key200=False Then 
  
If AnimSeq(animchild)=run Then Animate animchild,1,1,idle 
End 
If 

это когда придеца ставить анимации не на одну кнопку а на много

Toon3D 08.12.2009 20:46

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
Цитата:

Сообщение от KingMaks (Сообщение 128799)
If KeyHit(200) Then Animate hero,1,0.5,run,10
If Not KeyDown(200) Then Animate hero,1,0.5,idle,10

отак нада:
If KeyDown(200) Then Animate animseq hero,1,0.5,run,10
If Not KeyDown(200) Then Animate animseq hero,1,0.5,idle,10

"Expecting end-of-line"

Toon3D 08.12.2009 20:53

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
Цитата:

Сообщение от KingMaks (Сообщение 128799)
PHP код:

key200=false

If Not KeyDown(1Then key200=False

If KeyDown(200Then
  
If AnimSeq(animchild) <> run Then Animate animchild,1,1,run
End 
If

If 
KeyDown(205Then
  
If AnimSeq(animchild) <> run Then Animate animchild,1,1,run
End 
If

If 
KeyDown(203Then
  
If AnimSeq(animchild) <> run Then Animate animchild,1,1,run
End 
If

If 
key200=False Then 
  
If AnimSeq(animchild)=run Then Animate animchild,1,1,idle 
End 
If 

это когда придеца ставить анимации не на одну кнопку а на много

В таком случае надо писать:
Код:

hero=LoadAnimMesh("models/player.b3d")
animchild=FindChild(hero,...)
idle=ExtractAnimSeq(animchild...

и так далее. Ну вообщем что-то типа такого, а это уже для меня другой урок :)

KingMaks 08.12.2009 22:17

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
Цитата:

Сообщение от Toon3D (Сообщение 128802)
В таком случае надо писать:
Код:

hero=LoadAnimMesh("models/player.b3d")
animchild=FindChild(hero,...)
idle=ExtractAnimSeq(animchild...

и так далее. Ну вообщем что-то типа такого, а это уже для меня другой урок :)

а чоб так и не написать? помоему нормальный способ:rolleyes: и урок тоже самый

DeadElf 08.12.2009 22:44

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
хм... где-то я уже видел такую тему?

tormoz 08.12.2009 23:25

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
http://forum.boolean.name/showthread...849#post128849

Toon3D 09.12.2009 22:21

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
В общем, думал сюда, в эту тему, уже писать не буду, думал разберусь уже 100%, и урок глянул который мне дали, и по примеру делал что показывали, но анимации будто нет, просто не показывается, и ошибки так же не выдает, и экспортирую я точно знаю что правильно! Не знаю как еще можно пробовать, последний шанс только то, что вы найдете какую-то ошибку. Три дня на смарку и никакого результата :). Сегодня прошмаргал все 5 страниц поиска с результатами "анимация", много конечно чего похоже, но была решена не доконца, или автор сам разобрался а в тему ничего не сказал! Сегодня еще буду искать, но думаю вы не откажетесь мне помочь :)
Код:

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()

Const player=1,stena=2

hero=LoadAnimMesh("models/player.b3d")
animchild=FindChild(hero,"01")
seqidle=LoadAnimSeq(animchild,"anim/idle.b3d")
seqrun=LoadAnimSeq(animchild,"anim/runplayer2.b3d")

PositionEntity hero,3,0,3

xata=LoadMesh("models/xata.b3d")
PositionEntity xata,15,-2,50

Ground=CreateTerrain(128)

Camera=CreateCamera(hero)

light=CreateLight()
TurnEntity light,90,0,0

prep1=CreateCube()
PositionEntity prep1,10,2,30
ScaleEntity prep1,5,3,0.2
prep2=CreateCube()
PositionEntity prep2,5,2,35
ScaleEntity prep2,0.2,3,5

PositionEntity Camera,0,1,-5
PositionEntity Ground,0,-1,0

texground=LoadTexture("img/ground.jpg")
texstena=LoadTexture("img/stena.jpg")

EntityTexture Ground,texground
EntityTexture prep1,texstena
EntityTexture prep2,texstena
ScaleTexture texground,5,5

EntityType hero,player
EntityType ground,stena
EntityType prep1,stena
EntityType prep2,stena
EntityType xata,stena
Collisions player,stena,2,3

Repeat
If Not KeyDown(200) Then
        If AnimSeq(animchild) <> seqidle Then Animate animChild,1,0.2,seqidle
        EndIf
If KeyDown(200) Then
        If AnimSeq(animChild) <> seqrun Then Animate animChild,1,0.2,seqrun
        Else
        If AnimSeq(animChild) <> seqidle Then Animate animChild,1,0.2,seqidle
EndIf
If Not KeyDown(1) MoveEntity hero,0,-0.1,0
If KeyDown(200) MoveEntity hero,0,0,0.1
If KeyDown(208) MoveEntity hero,0,0,-.1
If KeyDown(203) TurnEntity hero,0,2,0
If KeyDown(205) TurnEntity hero,0,-2,0

UpdateWorld
RenderWorld
Flip
Until KeyHit (1)
End

На этот раз весь код выложу, так как может у меня там что-то где-то неправильно вообще не в том месте где я думал! :)

Dream 09.12.2009 22:34

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
Код:

If Not KeyDown(200) Then
        If AnimSeq(animchild) <> seqidle Then Animate animChild,1,0.2,seqidle
        EndIf
If KeyDown(200) Then
        If AnimSeq(animChild) <> seqrun Then Animate animChild,1,0.2,seqrun
        Else
        If AnimSeq(animChild) <> seqidle Then Animate animChild,1,0.2,seqidle
EndIf

замени на
Код:

If KeyDown(200) Then
        If AnimSeq(animChild) <> seqrun Then Animate animChild,1,0.2,seqrun
        Else
        If AnimSeq(animChild) <> seqidle Then Animate animChild,1,0.2,seqidle
EndIf

и попробуй вместо animChild использовать hero в условиях

Toon3D 09.12.2009 22:48

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
Цитата:

Сообщение от DimasSup (Сообщение 128957)
попробуй вместо animChild использовать hero в условиях

Тогда у меня получается вообще вид с первого лица, когда hero прописую, а с animChild в норме вроде всё.
Но а если не менять на hero, а просто вставить, что ты дал, он все равно в исходной позиции ездит!

Dream 09.12.2009 22:51

Ответ: Анимация: Нажал - началась, отжал - закончилась
 
скинь проект весь. с медией, чтобы моно было запустить

Toon3D 10.12.2009 15:54

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


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

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