|
FAQ Туториалы и часто задаваемые вопросы |
15.01.2008, 08:49
|
#91
|
|
Ответ: FAQ по B3D
NovICE
If KeyDown(17) Then
действия по анимации
Else
действия чтобы остановить анимацию
End if
|
|
|
15.01.2008, 20:29
|
#92
|
Бывалый
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений (для 452 пользователей)
|
Ответ: FAQ по B3D
да нет jimon, ты не прав... вернее логически-то ты прав, но только средствами блица так не прокатит... там надо немного иначе обрабатывать.
|
(Offline)
|
|
15.01.2008, 20:57
|
#93
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Ответ: FAQ по B3D
2avel: Средствами Блица так прокатит замечательно.
Хоть бы так, к примеру:
IF KEYDOWN(17)=1 THEN
IF AnimFlag=0 THEN
AnimFlag=1
Animate Object
;...etc...
ENDIF
ELSE
IF AnimFlag=1 THEN
AnimFlag=0
Animate Object,0
;...etc...
ENDIF
ENDIF
Последний раз редактировалось Diplomat, 15.01.2008 в 21:04.
|
(Offline)
|
|
15.01.2008, 22:59
|
#94
|
Бывалый
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений (для 452 пользователей)
|
Ответ: FAQ по B3D
Diplomat ладно, признаю. прокатит.
я просто имел ввиду, что если, просто, написать внутри Animate, то толку не будет... Все равно надо вводить переменную-флаг. а jimon этого не указал. Думаешь до новичков дойдет, что там надо ее написать? я думаю, что нет. именно это я и имел ввиду. а то, что это можно реализовать я и сам знаю. и давно уже указал как... просто, некоторые плохо читают темы...
да и все-равно этот вариант как-то через Ж... слишком много условий...
ИМХО мой вариант проще... хотя бы не надо лишней переменной...
для множества моделей в твоем случае прийдется массив задавать для одних только флагов... хотя, конечно, это кому как удобнее. посему я и указал, что вариантов много...
вот, решил все же продублировать...
вопрос: при использовании команды Animate объект начинает двигаться ни тогда, когда нажата клавиша, а когда она отпускается. почему?
ответ: когда ты пишешь в главном цикле if KeyDown(...) Animate ... блиц запускает эту команду постоянно, когда ты нажимаешь клавишу, а надо ее запустить один раз. решение: используй KeyHit()(это мой вариант), либо введи переменну-флаг(это то, что предложил ты). примерно так:
If speed#=0 Then Animate меш,0
If KeyHit(17)=True Or KeyHit(31)=True Then Animate меш,1
|
вообще принцип везде один...
Последний раз редактировалось avel, 15.01.2008 в 23:12.
|
(Offline)
|
|
16.01.2008, 01:28
|
#95
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Ответ: FAQ по B3D
Такое количество ветвлений необходимо. Более того, логичным решением в сколь-нибудь более серьезной ситуации было бы вынести модуль анимаций в отдельную функцию. Но в условном случае данного простейшего примера это было бы все таки не вполне целесообразно.
А насчет твоего решения... Если представить ситуацию, когда обьект должен иметь несколько различных анимационных последовательностей и не замирать намертво при остановках, а проявлять признаки жизнедеятельности, то оно теряет свою прелесть. А так- для примера конечно может жить. )
|
(Offline)
|
|
16.01.2008, 01:49
|
#96
|
Бывалый
Регистрация: 12.10.2006
Сообщений: 737
Написано 131 полезных сообщений (для 452 пользователей)
|
Ответ: FAQ по B3D
Diplomat да я этим примером и не претендую на что-то серьезное... это простейший случай, тупо для разъяснения общего принципа. понятно, что для чего-то серьезного надо писать систему управления анимацией. а вот насчет нескольких анимационных последовательностей, я с тобой не соглашусь, ибо при очень незначительной модификации все отлично работает. собственно, твой вариант, в том виде, как оно есть сейчас, тоже расчитан на одну анимацию. оно и понятно, ведь у тебя, как и у меня это лишь пример, для новичков, в котором убрано все лишнее для большей читабельности и понятливости. думаю, что оба варианта вполне жизнеспособны! главное, чтобы у того, кто их пользует руки были прямые...
|
(Offline)
|
|
16.01.2008, 02:04
|
#97
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: FAQ по B3D
в маленькой аркадке функция управления анимацией занимает 230 строк.
Там сам черт ногу сломит.
))
Нужно пользоваться переменными . тогда все просто
he\a_seq=AnimSeq (he\en)
управление:
If sit_key Or he\pickup
If up_key Or down_key
he\mode=1:he\speed=max*1.25:he\seq=roll:he\tran=10
Else
If (he\seq<>roll)Or(he\seq=roll And AnimTime(he\en)>=13)
he\mode=1:he\speed=.5:he\seq=sit:he\tran=10
EndIf
EndIf
Else
If (he\seq<>roll)Or(he\seq=roll And AnimTime(he\en)>=13)
If up_key Or down_key
he\mode=1:he\speed=max*1.25:he\seq=run_up:he\tran=10
EndIf
EndIf
EndIf
.....
анимация:
If he\seq<>he\a_seq
Animate he\en,he\mode,he\speed,he\seq,he\tran
EndIf
какая то пост-обработка:
If he\seq=jump
If AnimTime# (he\en)>=19
he\mode=2:he\speed=.15:he\seq=jump_as:he\tran=20
EndIf
EndIf
If he\seq=jump2
If AnimTime# (he\en)>=13
he\mode=2:he\speed=.15:he\seq=jump_as:he\tran=20
EndIf
EndIf
весь код для примеры вырван из реального проекта. конечно это малые кусочки большой функции.
Главное - понять принцип
Он удобен
__________________
|
(Offline)
|
|
16.01.2008, 12:16
|
#98
|
ПроЭктировщик
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений (для 25 пользователей)
|
Re: FAQ по B3D
Вопрос: Как пользоватся командами - "таймер1 = CreateTimer("длительность"), WaitTimer("таймер1") , FreeTimer("таймер1") ".
Сколько не эксперементировал, нечего путнего не вышло...
|
(Offline)
|
|
16.01.2008, 12:19
|
#99
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: FAQ по B3D
Crayzi, в справке блица, есть примеры для работы с этими функциями.
|
(Offline)
|
|
16.01.2008, 13:30
|
#100
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: FAQ по B3D
попробуй создай таймер Createtimer(200) и помести команду Waittimer() в цикл перед Renderworld(), сразу поймешь как это работает, а значит и научишься как ими пользоваться. В общем говоря, это таймер который затормаживает работы программы на установленное время ( в миллисекундах ).
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.01.2008, 13:33
|
#101
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: FAQ по B3D
хм. имхо одна из бесполезнейших команд.
Delay(200) сделает то же самое. или, имеется ввиду на 200мс с последнего вызова?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.01.2008, 14:29
|
#102
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Ответ: FAQ по B3D
Нет, сравнивать таймер с задержкой- нельзя.
Таймер- есть самый простой, наиболее стабильный и наименее затратный по ресурсам из существующих ныне способов стабилизации ФПС в Блице. Можно сказать, что он является одним из лучших способов синхронизации.
Копий на этот счёт сломано немало, но факт остаётся фактом: для маленькой игры таймер предпочтительней любых других методов синхронизации.
Delay методом синхронизации очевидно не является.
Createtimer(200) создавать не стОит. Диапазон оптимальных значений для таймера- 30-40. В крайнем случае- 25-60. Кроме того, для придания эксперименту чистоты логично выключить вертикальную синхронизацию.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.01.2008, 14:35
|
#103
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: FAQ по B3D
или, имеется ввиду на 200мс с последнего вызова?
|
получается таймер эквивалентен:
while a_time+30>millisecs()
wend
a_time=millisecs()
?
|
(Offline)
|
|
16.01.2008, 15:12
|
#104
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Ответ: FAQ по B3D
Ну, почти. Во-первых, таймеру указывается желаемый ФПС, а не желаемая задержка; во-вторых, таймер просто останавливает выполнение программы, уменьшая ФПС до нормы, а не глушит систему намертво пустым циклом для этих же целей; и в-третьих... гм.. в нем меньше букафф. ))
|
(Offline)
|
|
16.01.2008, 15:27
|
#105
|
Гигант индустрии
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений (для 92 пользователей)
|
Ответ: FAQ по B3D
Да. Таймер полезная функция. У себя в игрушке (небольшая аркада) я им и пользуюсь. Ограничиваю FPS до 60.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:54.
|