Понедельник, 25 Ноября 2024, 01:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
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,
Спасибо большое. Получилось
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг