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, Спасибо большое. Получилось
|
|
| |