|
FAQ Туториалы и часто задаваемые вопросы |
24.01.2013, 16:22
|
#16
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
#15 тож работает, а вот проверка нажатия сделана через одно место - mav.
Включи дебагер посмотри в чём дело.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.01.2013, 17:04
|
#17
|
AnyKey`щик
Регистрация: 24.01.2013
Сообщений: 15
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
Debuger ничего мне не объяснит по русский А как сделать проверку нажатия во втором коде с md2? Может хоть MD2 пойдёт...Сам я не додумаюсь, это точно.
|
(Offline)
|
|
24.01.2013, 19:01
|
#18
|
Мастер
Регистрация: 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=0 ; сигнал для старта ходьбы Global player_stop=1 ; сигнала для остановки ходьбы Global player_still=1 ;игрок стоит
Repeat If KeyHit(1) End UpdateWorld
player_start=0;Обнуление сигнала для старта ходьбы If KeyHit(200) player_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 ;цифра 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(200) player_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=0
но в таком случае player_stop будет равняться 1 постоянно , если не нажата клавиша вперед а нам нужно чтоб она всплавала единожды, т.е. один кадр, а потом снова становилась 0 .для этого я использую переменную контейер так сказать player_still в которую при первом проигрыше записываем 1 и следовательно если не нажата кнопка вперед проверяем стоит ли игрок If player_still=0 player_stop=1
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.01.2013, 19:31
|
#19
|
AnyKey`щик
Регистрация: 24.01.2013
Сообщений: 15
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
ГЛОБАЛЬНОЕ СПАСИБО !!! Всё доходчиво и понятно. Я понимаю что многим трудно объяснять как для первоклассника, но куда ж нам тогда деваться? Только к вам - мастерам. Ещё раз спасибо. Теперь всё работает отлично !!!
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.01.2013, 19:44
|
#20
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
Сообщение от Niburiec
ГЛОБАЛЬНОЕ СПАСИБО !!! Всё доходчиво и понятно. Я понимаю что многим трудно объяснять как для первоклассника, но куда ж нам тогда деваться? Только к вам - мастерам. Ещё раз спасибо. Теперь всё работает отлично !!!
|
да незачто. пиши на форум если будут проблемы. думаю с прыжком и бегом разберешься сам по логике
|
(Offline)
|
|
24.01.2013, 22:28
|
#21
|
AnyKey`щик
Регистрация: 24.01.2013
Сообщений: 15
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
Эх... Тогда ещё вопрос по ходу дела. Опять я всё про тоже. Наверное достал уже своими вопросами? Что не так в этом коде? ...Честное слово, последний вопрос по этой теме и всё.
Graphics3D 800,600,16,1
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=0
Global player_stop=1
Global player_still=1
Global player_beg=0
Repeat
If KeyHit(1) End
UpdateWorld
player_start=0:player_beg=0
If KeyHit(200) player_start=1:player_stop=-0:Gosub level1
If KeyHit(205) player_beg=1:player_stop=-0:Gosub level2
Goto level3
.Level1
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
If player_stop Animate m,1,0.5,men,10 :player_still=1:player_stop=0
Return
.level2
If KeyDown(205)
player_still=0
Else
If player_still=0 player_stop=1
EndIf
If player_beg Animate m,1,0.5,men3,6
If player_stop Animate m,1,0.5,men,10 :player_still=1:player_stop=0
Return
.level3
RenderWorld tween
Flip
Forever
|
И за одно, как реализовывается одновременное нажатие клавиш вперед+Shift ?
|
(Offline)
|
|
24.01.2013, 22:51
|
#22
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
Знаешь, хз У меня с начало странно скопироваться текст, и не хватало пары скобок, вставил, всё работает, скопировал второй раз и скобки были на месте... Бред какой-то...
Код работает, это у тебя блиц балует - серьёзно.
На хрена ты там гоосабы сделал?
Фтопку их. Сделай лучше функции отдельно и ссылайся на них, когда нажимаешь клавиши.
Кнопки - это же просто!
If KeyDown(адин_кнопка)=True ;если ЗАЖАЛИ такую-то кнопку...
If KeyDown(два_кнопка)=True ;+ ЗАЖАЛИ такую-то кнопку...
;Тут что-то происходит...
EndIf
EndIf
или
If KeyDown(адин_кнопка)=True and KeyDown(два_кнопка)=True then ;тут что-то происходит...
|
(Offline)
|
|
25.01.2013, 00:49
|
#23
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
короче написал код. пришлось час посидеть. но только толку от этого кода?. ты всеравно сути не поймешь. ты лучше с чегонить попроще начни, главное принцип понять и разбирать код. а не тупо копипастить
просто тут довольно сложный код . т.к. если делать как в играх то тут много ньюансов - например если сначала зажать шифт а потом вперед он сразу должен бежать, если зажать вперед и потом зажимать и отпускать шифт он должен то идти то бежать и т.д.
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_go=0 Global player_start_run=0 Global player_go=0 Global player_run=0 Global player_stop=1 Global player_still=1
Repeat If KeyHit(1) End UpdateWorld
down_up= KeyDown(200) hit_up=KeyHit(200) down_shift=KeyDown(54)
player_start_go=0 player_start_run=0
If hit_up player_start_go=1
If down_up And down_shift player_run=1 Else If player_run=1 And down_up=0 And player_go=0 And player_still=0 player_still=1: player_stop=1:player_run=0 If player_run=1 And down_up And player_still=0 player_start_go=1: player_run=0 EndIf
If player_run=0 And player_still=0 And player_go=0 And player_start_go=0 player_still=1:player_stop=1 If player_run=1 And (player_still=1 Or player_go=1) player_start_run=1:player_go=0:player_still=0
If down_up
If down_shift player_go=0 player_still=0 Else player_go=1 player_still=0 EndIf
Else player_go=0 EndIf
If player_start_go Animate m,1,0.5,men2,6 If player_start_run Animate m,1,0.5,men3,5 If player_stop Animate m,1,0.5,men,10
player_stop=0
RenderWorld tween Text 0,0,"player_run "+player_run Text 0,10,"player_go "+down_up Flip
Forever
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pepel за это полезное сообщение:
|
|
25.01.2013, 01:08
|
#24
|
AnyKey`щик
Регистрация: 24.01.2013
Сообщений: 15
Написано 2 полезных сообщений (для 3 пользователей)
|
Ответ: Смена анимации с помощью KeyDown
Если честно, я не ожидал что понадобится столько времени... Но вам, уважаемый, нужно памятник при жизни ставить за то что имеете терпение и не отказываете в помощи. Вобщем, спасибо за полный код. Теперь у меня есть над чем посидеть и разобраться. Постараюсь, по крайней мере...Однако, на мой взгляд, этот вопрос освещён полностью и у других будет возможность заглянуть как это делается
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:15.
|