User Tag List

Страница 43 из 47 ПерваяПервая ... 394041424344454647 ПоследняяПоследняя
Показано с 421 по 430 из 470

Тема: Помощь по редактору Dizzy-AGE

  1. #421

    Регистрация
    10.03.2011
    Адрес
    Украина, г. Днепропетровск
    Сообщений
    892
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, ты, наверное, забыл еще исправить мой скрипт на правильный (с коментариями), чтобы лучше воспринимать написаное тобой, да? Или я много хочу?

    Я не буду использовать остановку всех сэмплов. Ибо дойду до конца. Или с твоей помощью или народным способом - перебором всего возможного.

    Потерял. Это не тренировка. Это не мое. Я больше скриптов разобрал и написал, чем с этой долбаной СамплеСтоп долбаюсь. Не хватает хороших готовых примеров.

  2. #421
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #422

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,376
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от yuriy Посмотреть сообщение
    Titus, ты, наверное, забыл еще исправить мой скрипт на правильный (с коментариями), чтобы лучше воспринимать написаное тобой, да? Или я много хочу?
    Просто так не переписать, нужен хендлер запуска функции по таймеру.

  4. #423

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,376
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Итак, новинка - возможность запускать отложенные функции.

    Для начала добавляем в файл def.gs следующие строки:
    Код:
    #def G_TICKS		100			// Счетчик игрового времени
    #def G_TFUNC		101			// Идентификатор отложенной функции
    #def G_TVALUE		102			// Время вызова отложенной функции
    В данном случае мы вводим три новых игровых переменных с номерами 100, 101, 102 (или любые другие свободные для вашей игры номера глобальных игровых переменных). Эти переменные нам необходимы не только для реализации механизма запускоа отложенных функций, но и для корректного сохранения состояния в файле отгрузок.

    Переменная G_TICKS - это дополнительный таймер, приращиваемый каждый игровой фрейм (1/36 секунды для стандартных настроек). Этот счетчик инкрементируется в хендлере HandlerGameUpdate(), который вызывается только во время игрового процесса, тогда как в режиме меню он не вызывается, и счетчик, как нам и требуется, не инкрементируется.

    Переменная G_TFUNC содержит ID (по простому - номер) отложенной функции. Почему номер, а не имя? Все потому, что стандартный файл отгрузок не умеет сохранять строковые величины, и для упрощения каждой отложенной функции присваевается уникальный номер.

    Переменная G_TVALUE - это время вызыва отложенной функции.


    Далее, добавляем в файл handlers.gs в функцию HandlerGameUpdate() после строк:
    Код:
    	// update some particluar object(s) that need to be updated no matter in what room we are
    	// ...
    следующий фрагмент:
    Код:
    	TValue = GameGet(G_TVALUE);			// Получить время вызова отложенной функции
    	if (TValue)					// Если время = 0, то нет отложенных функций
    	{		
    		if (TValue <= GameGet(G_TICKS))		// Если текущее время достигло времени вызова функции, то
    			CallTimeFunc();			// вызвать обработчик отложенных функций
    	}
    	
    	GameSet(G_TICKS, GameGet(G_TICKS) + 1);		// Прирастить счетчик игрового времени
    Далее, в файл utils.gs добавляем функцию:
    Код:
    /////////////////////////////////////////////////////////////////////////////////
    //
    //			Store time function delay and ID
    //
    /////////////////////////////////////////////////////////////////////////////////
    func TimeFuncSet(fid, fdelay)
    {
    	GameSet(G_TFUNC, fid);				// Сохранить ID отложенной функции в переменной G_TFUNC
    	GameSet(G_TVALUE, GameGet(G_TICKS) + fdelay);	// Сохранить время вызыва отложенной функции в переменной G_TVALUE
    }
    Ну и, наконец, добавим в игру простой пример.
    В требуемое место игры в файле game.gs сперва добавляем первый запрос отложенной функции:
    Код:
    	TimeFuncSet(TM_FIRSTFUNC, 5*36);		// Запросить функцию TM_FIRSTFUNC через 5 секунд
    А так же добавляем в тот же файл game.gs обработчик отложенных функций:
    Код:
    /////////////////////////////////////////////////////////////////////////////////
    //
    //			  Time Functions (non-latent)
    //
    /////////////////////////////////////////////////////////////////////////////////
    
    #def TM_FIRSTFUNC	1
    #def TM_SECONDFUNC	2
    
    // ... etc
    
    func CallTimeFunc()
    {
    	TFunc = GameGet(G_TFUNC);				// Получить ID вызываемой функции
    			
    	if (TFunc == 1)						// TM_FIRSTFUNC
    	{
    		println("First Time Call");			// [отладочная информация]
    		
    		CM_EnterJump(0, 10); 				// Прыжок вверх
    		SamplePlay(1);					// Включить звук №1
    		
    		TimeFuncSet(TM_SECONDFUNC, 10*36);		// Запросить функцию TM_SECONDFUNC через 10 секунд
    		return;						// Выход
    	}
    			
    	if (TFunc == 2)						// TM_SECONDFINC
    	{
    		println("Second Time Call");			// [отладочная информация]
    		
    		PlayerSet(P_LIFE,PlayerGet(P_LIFE)-30);		// Отнять у Диззи 30 единиц энергии
    		SamplePlay(2);					// Включить звук №2
    		
    		GameSet(G_TVALUE, 0);				// Отключить запрос временных функций
    		return;						// Выход
    	}
    			
    	// ... etc
    
    	GameSet(G_TVALUE, 0);					// Отключить запрос временных функций
    								// (заглушка для неправильных ID функций)
    }
    Как видно из примера, сперва запрашивается отложенная функция TM_FIRSTFUNC через интервал 5 секунд. В этой функции игрока подбрасывает наверх и звучит звук, а так же сразу запрашивается следующая отложенная функция TM_SECONDFINC через интервал 10 секунц. В этой функции у игрока убавляется 30 единиц энергии и так же звучит звук, после чего отложенные функции отключаются.

    Замечание: поскольку, обработчик отложенных функций не фоновой (non-latent), то из него НЕ ДОЛЖНЫ вызываться фоновые (latent) функции. При желании вызвать фоновые функции, следует пользоваться конструкцией ScrRequest(). Однако, т.к. отложенная функция может вызваться в любой момент, в независимости от игровой ситуации (кроме нахождения в меню), отложенными функциями следует пользоваться с большой аккуратностью, чтобы не испортить ход игры.

    Так же статья опубликована на DizziAge-форуме
    Последний раз редактировалось Titus; 13.11.2012 в 03:24.

  5. #424

    Регистрация
    10.03.2011
    Адрес
    Украина, г. Днепропетровск
    Сообщений
    892
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    О, чудо! С этим нужно было переспать....

    Завел в gamedef.gs
    #def G_FXМ 100

    и конструкция

    func ActionObject_3050 ( idx )
    {
    if(ObjGet(ObjFind(3050),O_STATUS)==0)
    {
    G_FXM = SamplePlay(FX_MUSIC);
    ObjSet(ObjFind(3050),O_STATUS,1);
    }
    else
    {
    SampleStop(G_FXM);
    ObjSet(ObjFind(3050),O_STATUS,0);
    }
    }

    заработала как нужно.

    Теперь будем разбирать китайские письмена что выше. Спасибо.

    ---------- Post added at 09:48 ---------- Previous post was at 09:41 ----------

    Titus, а разве в game.gs можно заносить
    #def TM_FIRSTFUNC 1
    #def TM_SECONDFUNC 2
    переменные?

  6. #425

    Регистрация
    12.04.2010
    Адрес
    Шмелёво
    Сообщений
    2,263
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    афигеть.....

  7. #426

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,376
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от yuriy Посмотреть сообщение
    О, чудо! С этим нужно было переспать....

    Завел в gamedef.gs
    #def G_FXМ 100
    Только не в gamedef.gs, а в def.gs.
    И не 100, т.к. 100, 101 и 102 уже занято тем, что я описал выше, а, например 104.
    Далее - то, что у тебя - не могло заработать) Так как G_FXM - это не переменная, а константа)

    ---------- Post added at 12:16 ---------- Previous post was at 12:15 ----------

    Цитата Сообщение от yuriy Посмотреть сообщение
    а разве в game.gs можно заносить
    #def TM_FIRSTFUNC 1
    #def TM_SECONDFUNC 2
    переменные?
    Можно. Это не переменные, а, скажем так, константы. Все файлы .gs равнозначные.

  8. #427

    Регистрация
    10.03.2011
    Адрес
    Украина, г. Днепропетровск
    Сообщений
    892
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, но оно работает. у меня пока не занято 100, поскольку я еще разбираю твой пример и не вносил.

  9. #428

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,376
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от yuriy Посмотреть сообщение
    Titus, но оно работает. у меня пока не занято 100, поскольку я еще разбираю твой пример и не вносил.
    Твоя конструкция равносильна:

    100 = SamplePlay(FX_MUSIC);

    и

    SampleStop(100);

    что является абсурдом, и выдаст ошибку компиляции.

    Обьяснение одно - ты не там или неправильно прописал #def G_FXМ 100, в связи с чем G_FXM воспринимается компилятором не как константа, а как локальная переменная.

  10. #429

    Регистрация
    10.03.2011
    Адрес
    Украина, г. Днепропетровск
    Сообщений
    892
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Titus, проверил еще раз. Все, как описано выше. Только теперь по событию else игра не вываливается с ошибкой, а выключает эффект. Ну смысл мне обманывать?

    ---------- Post added at 11:21 ---------- Previous post was at 11:13 ----------

    Ну и наверное последнее, это SampleVolume( percent ). Можно ли как-то эту команду привязать только к одному спецэффекту, а не ко всем происходящим в игре сразу?

  11. #430

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,376
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от yuriy Посмотреть сообщение
    Titus, проверил еще раз. Все, как описано выше. Только теперь по событию else игра не вываливается с ошибкой, а выключает эффект. Ну смысл мне обманывать?
    Пришли-ка мне свою программу)

    ---------- Post added at 14:42 ---------- Previous post was at 13:26 ----------

    Разобрался.

    Оказывается в языке GS9, в отличие от Си, глобальные определения НЕ являются константами, хотя рекомендуется использовать их только в роли констант.

    9.COMPILE DIRECTIVES

    Even if the defines are actually global variables, it is recomended to be treated as constants and not change their values. There is more about those defines, but for the level of this book, this is enough.
    yuriy
    Для проверки можешь заменить #def G_FXМ 100 на #def G_FXМ 123456789, и все равно будет работать.

    Но конструкция все равно неправильная. Попробуй отпишись в середине проигрывания звука, а потом перезапусти игру и загрузи отгрузку. Посмотри, что получится)

Страница 43 из 47 ПерваяПервая ... 394041424344454647 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Dizzy-AGE: Summer Blast Dizzy
    от Titus в разделе Dizzy-AGE
    Ответов: 102
    Последнее: 31.05.2012, 16:15
  2. Dizzy-AGE: Treasure Tomb Dizzy
    от Titus в разделе Dizzy-AGE
    Ответов: 1
    Последнее: 12.11.2011, 02:10
  3. Dizzy-AGE: Illusion Island Dizzy
    от Titus в разделе Dizzy-AGE
    Ответов: 178
    Последнее: 27.10.2011, 22:03
  4. Dizzy-AGE: Diamond Mine Dizzy
    от Titus в разделе Игры
    Ответов: 2
    Последнее: 13.11.2008, 16:06
  5. где найти доки по редактору с VIRT'а?
    от TomCaT в разделе Музыка
    Ответов: 15
    Последнее: 09.11.2008, 22:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •