User Tag List

Показано с 1 по 10 из 470

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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,377
    Спасибо Благодарностей отдано 
    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.

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

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

Эту тему просматривают: 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

Ваши права

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