| 
				
				Alarm и его применение в столкновении
				 | 
 | 
| Reker | Дата: Понедельник, 17 Июля 2017, 02:32 | Сообщение # 1 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Доброго времени суток. У меня есть проблема которую я не в состоянии решить уже давно. Так как я новичок и осваиваюсь в игростроении у меня возникла проблема. Я не могу сделать урон по промежуткам времени. Допустим в одну секунду hp-=10;. Расписываю я это так  alarm [0] = room_speed;  if hp <=0 { room_restart() } в Alarm[0] hp-=10; Но как я понимаю таймер постоянно обновляется, так как я нахожусь непосредственно в объекте соприкосновения.  К сожалению мой скудный умишка не может придумать ничего большего, кроме как написать без таймера меньшее значение hp-=0.5; . В гугле я искал и находил некоторые вещи, но не смог сделать всё правильно. Надеюсь поможете
 |  
| 
 | 
 |    | 
| ASH2 | Дата: Понедельник, 17 Июля 2017, 10:45 | Сообщение # 2 |  
 
участник 
Сейчас нет на сайте 
 
 | Немного не по теме, так как не пользуюсь Алярмами, но я б просто сделал бы в Step'e что-то типа
 
 Код nTimer+=fps/room_speed if (nTimer>room_speed) { hp-=10; nTimer=0; }  
  Карсон и Питееерс!!!
 
 Сообщение отредактировал ASH2 - Понедельник, 17 Июля 2017, 10:45  |  
| 
 | 
 |    | 
| Vuvk | Дата: Понедельник, 17 Июля 2017, 10:54 | Сообщение # 3 |  
| 
 заслуженный участник 
Сейчас нет на сайте 
 
 | Мое знакомство с GM закончилось на 8 версии, но... При входе в столкновение проверять какую-то переменную:
 Код  if (!canPlayerDamage) {   alarm [0] = room_speed;   canPlayerDamage = true; }
 
  А при выходе из столкновения:
 Код  canPlayerDamage = false; alarm[0] = -1;
 
  ASH2, предпочтительней использовать будильники, сокращая количество вычислений в шаге. /* могу наврать, но по логике вещей оно так */
 
 Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 10:55  |  
| 
 | 
 |    | 
| Reker | Дата: Понедельник, 17 Июля 2017, 11:03 | Сообщение # 4 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Цитата ASH2 (  )   nTimer 
  Что такое nTimer? У меня его нет. Или это переменная?
 |  
| 
 | 
 |    | 
| Vuvk | Дата: Понедельник, 17 Июля 2017, 11:09 | Сообщение # 5 |  
| 
 заслуженный участник 
Сейчас нет на сайте 
 
 | Reker, это переменная-счетчик. Так он имитирует будильник.
  Добавлено (17 июля 2017, 11:09) --------------------------------------------- И кстати тогда хотя бы так сделать: в Create
 Код  nTimer = 0; delta = fps/room_speed;  // для сокращения количества постоянных расчетов
 
  в Step
 Код  nTimer += delta; if (nTimer >= room_speed) {   hp -= 10;   nTimer -= room_speed;  // для равномерного хода }
 
  
 
 Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 11:11  |  
| 
 | 
 |    | 
| ASH2 | Дата: Понедельник, 17 Июля 2017, 11:09 | Сообщение # 6 |  
 
участник 
Сейчас нет на сайте 
 
 | Vuvk, может быть, просто мне не очень эти будильники нравятся, привык всё кодом писать. И да, точно сказать не могу, но уменьшение количества вычислений в шаге сомнительно, так как он сам-то как-то должен свои будильники обсчитывать... (тут же ещё как бонус тут отстройка от небольшого проседания ФПС   )
  Reker, да, простая переменная счётчик, которую в Create ты инициализируешь нулём
  Vuvk, в Create delta = fps/room_speed; не пойдёт. fps постоянно меняющееся динамическое значение.
  Карсон и Питееерс!!!
 
 Сообщение отредактировал ASH2 - Понедельник, 17 Июля 2017, 11:11  |  
| 
 | 
 |    | 
| Vuvk | Дата: Понедельник, 17 Июля 2017, 11:11 | Сообщение # 7 |  
| 
 заслуженный участник 
Сейчас нет на сайте 
 
 | Цитата ASH2 (  )   уменьшение количества вычислений в шаге сомнительно, так как он сам-то как-то должен свои будильники обсчитывать...  Это уже внутренняя реализация гамака, которая однозначно быстрее будет работать скриптов, которые ты пишешь.
 Цитата ASH2 (  )   в Create delta = fps/room_speed; не пойдёт  ну ОК. Но будильники всё равно кошерней
 
 Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 11:13  |  
| 
 | 
 |    | 
| ASH2 | Дата: Понедельник, 17 Июля 2017, 11:15 | Сообщение # 8 |  
 
участник 
Сейчас нет на сайте 
 
 | Vuvk, может быть, не тестировал, мне просто кажется, что так получается гибче, в смысле, на этот счётчик можно ещё какие-нибудь мигания привязать например или ещё что-то.. Но тут, согласен, индивидуально
  Карсон и Питееерс!!!
 |  
| 
 | 
 |    | 
| Reker | Дата: Понедельник, 17 Июля 2017, 11:15 | Сообщение # 9 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Цитата Vuvk (  )   (!canPlayerDamage  какую именно переменную поставить? Если я ставлю hp то они сразу отнимаются, а если создаю новую переменную с названием dmd = 10 то ничего
 |  
| 
 | 
 |    | 
| Vuvk | Дата: Понедельник, 17 Июля 2017, 11:24 | Сообщение # 10 |  
| 
 заслуженный участник 
Сейчас нет на сайте 
 
 | Чего куда поставить? У тебя в будильнике это должно остаться:
 Цитата Reker (  )    в Alarm[0] hp-=10;
 
  в Create  canPlayerDamage = false;
 |  
| 
 | 
 |    | 
| Reker | Дата: Понедельник, 17 Июля 2017, 11:31 | Сообщение # 11 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | всё сделал. Но никакого эффекта. При входе в объект переменная hp не убывает. Наверное я туплю  в create hp =100; canPlayerDamage = false; 
  в collision 
  if (!canPlayerDamage) {  alarm [0] = room_speed;  canPlayerDamage = true; } canPlayerDamage = false; alarm[0] = -1;
  в Alarm[0] hp-=10;
  Я сделал так, но ничего 
 
 Цитата Vuvk (  )   в Alarm[0] hp-=10;
  в Create  canPlayerDamage = false;   
 |  
| 
 | 
 |    | 
| Vuvk | Дата: Понедельник, 17 Июля 2017, 11:40 | Сообщение # 12 |  
| 
 заслуженный участник 
Сейчас нет на сайте 
 
 | Сейчас поглядел что там в гамаке, а там нет разделения на collision_enter и collision_exit, так что если ты это запихнул в collision (при чем всё сразу)
 Цитата Reker (  )   if (!canPlayerDamage) { alarm [0] = room_speed; canPlayerDamage = true; } canPlayerDamage = false; alarm[0] = -1;  оно не будет работать, ахах. попробуй убрать туда же в таймер
 Код  hp-=10; canPlayerDamage = false; alarm[0] = -1;
 
 
  
 |  
| 
 | 
 |    | 
| Reker | Дата: Понедельник, 17 Июля 2017, 11:42 | Сообщение # 13 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | Vuvk,  Спасибо большое. Получилось
 |  
| 
 | 
 |    |