|
3D-программирование Вопросы, касающиеся программирования 3D мира |
08.12.2009, 20:26
|
#1
|
AnyKey`щик
Регистрация: 08.12.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Анимация: Нажал - началась, отжал - закончилась
Здравствуйте! У меня вот возник вопрос:
Уже дня два, пытаюсь найти как при нажатии кнопки использовать анимацию. Нашел, получилось. Но теперь проблема другая: В моем случае анимация бег, при нажатии кнопки №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 .
Объяснил кажется подробно, заранее спасибо за ответ!
Последний раз редактировалось Toon3D, 09.12.2009 в 15:34.
|
(Offline)
|
|
08.12.2009, 20:43
|
#2
|
Разработчик
Регистрация: 28.12.2008
Адрес: Алматы
Сообщений: 486
Написано 252 полезных сообщений (для 1,160 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
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
|
Вроде так
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Fatalix3d за это полезное сообщение:
|
|
08.12.2009, 20:44
|
#3
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
key200=false If Not KeyDown(1) Then key200=False If KeyDown(200) Then If AnimSeq(animchild) <> run Then Animate animchild,1,1,run End If If KeyDown(205) Then If AnimSeq(animchild) <> run Then Animate animchild,1,1,run End If If KeyDown(203) Then 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
это когда придеца ставить анимации не на одну кнопку а на много
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.12.2009, 20:46
|
#4
|
AnyKey`щик
Регистрация: 08.12.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
Сообщение от KingMaks
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"
|
(Offline)
|
|
08.12.2009, 20:53
|
#5
|
AnyKey`щик
Регистрация: 08.12.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
Сообщение от KingMaks
key200=false If Not KeyDown(1) Then key200=False If KeyDown(200) Then If AnimSeq(animchild) <> run Then Animate animchild,1,1,run End If If KeyDown(205) Then If AnimSeq(animchild) <> run Then Animate animchild,1,1,run End If If KeyDown(203) Then 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...
и так далее. Ну вообщем что-то типа такого, а это уже для меня другой урок
|
(Offline)
|
|
08.12.2009, 22:17
|
#6
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
Сообщение от Toon3D
В таком случае надо писать:
hero=LoadAnimMesh("models/player.b3d")
animchild=FindChild(hero,...)
idle=ExtractAnimSeq(animchild...
и так далее. Ну вообщем что-то типа такого, а это уже для меня другой урок
|
а чоб так и не написать? помоему нормальный способ и урок тоже самый
|
(Offline)
|
|
08.12.2009, 22:44
|
#7
|
ПроЭктировщик
Регистрация: 22.07.2009
Адрес: Московский Метрополитен)))
Сообщений: 100
Написано 25 полезных сообщений (для 31 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
хм... где-то я уже видел такую тему?
|
(Offline)
|
|
08.12.2009, 23:25
|
#8
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
09.12.2009, 22:21
|
#9
|
AnyKey`щик
Регистрация: 08.12.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
В общем, думал сюда, в эту тему, уже писать не буду, думал разберусь уже 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
На этот раз весь код выложу, так как может у меня там что-то где-то неправильно вообще не в том месте где я думал!
__________________
StimuL
Turbo-Dizel
|
(Offline)
|
|
09.12.2009, 22:34
|
#10
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
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 в условиях
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
09.12.2009, 22:48
|
#11
|
AnyKey`щик
Регистрация: 08.12.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
Сообщение от DimasSup
попробуй вместо animChild использовать hero в условиях
|
Тогда у меня получается вообще вид с первого лица, когда hero прописую, а с animChild в норме вроде всё.
Но а если не менять на hero, а просто вставить, что ты дал, он все равно в исходной позиции ездит!
__________________
StimuL
Turbo-Dizel
|
(Offline)
|
|
09.12.2009, 22:51
|
#12
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
скинь проект весь. с медией, чтобы моно было запустить
|
(Offline)
|
|
10.12.2009, 15:54
|
#13
|
AnyKey`щик
Регистрация: 08.12.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Анимация: Нажал - началась, отжал - закончилась
Вообщем я решил пройти все уроки, мне недавно дали еще, когда пройду их, тогда буду спрашевать, думаю там проблема решится
__________________
StimuL
Turbo-Dizel
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:17.
|