Войти на сайт

Авторизация, ждите ...
×

ТЕМА: [VX Ace] Event Move Speed

[VX Ace] Event Move Speed 6 года 2 мес. назад #102215

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • ОраторДаритель СтимкеяПрограммист JavaScript 2 место Организатор конкурсовУчитель
«Эх, давно не брал я в руки шашек» © Василий Иванович :D

Итак по просьбе многоуважаемого Котè (он же PanzerCat) удалось выдушить из меня пару строк на ruby, а именно скрипт — «Event Move Speed» :blush:

Как ясно из названия данный скрипт позволяет задать для отдельно взятого события(event) на карте произвольную скорость перемещения. В частности Котè хотел что бы ивент буквально ползал по карте. К сожалению стандартными средствами этот вопрос было не решить, ибо скорость перемещения оставалась всё ровно очень большая.

Скрипт просто до безобразия. Создаём необходимый нам event, прописываем в первой строчке комментарий вида <speed: NN> где NN число с плавающей точкой. Значение 0 стандартная скорость перемещения (с учётом настроек). Если задать число меньше нуля скорость будет падать. Подобрать можно экспериментальным путём, например -1.5 или даже -3.5 даёт вполне ползающую тушку. Если значение увеличить (вдруг кому надо) ивент будет летать :)

1-8.png



2-6.png



Дабы персонаж не спотыкался на каждом шаге в обязательно порядке надо установить частоту обновления (Freq:) на максимальное значение.

Скрипт доступен как всегда на GitHub.
Последнее редактирование: 6 года 2 мес. назад от Mur.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Демий, Amphilohiy, KageDesu, PanzerCat

[VX Ace] Event Move Speed 6 года 2 мес. назад #102217

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • ОраторДаритель СтимкеяПрограммист JavaScript 2 место Организатор конкурсовУчитель
Поскольку изначально мы с Котè не совсем поняли друг дружку. Скрипт немного доработан :blush:

Теперь помимо скорости перемещения, можно задать задержку для кадров анимации, с помощью команды <nextframe: NN> где NN число которое будет прибавляться для смены следующего кадра. По умолчанию оно равно 1, но если например задать значение 0.1:

3-5.png


то мышка будет ну ооооочень медленно махать крыльями.

Обновлённая версия, всё там же на GitHub.
Последнее редактирование: 6 года 2 мес. назад от Mur.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Демий, Amphilohiy, PanzerCat

[VX Ace] Event Move Speed 6 года 2 мес. назад #102218

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Учитель2 место ГотвПобедитель Сбитой кодировкиПрограммист RubyОратор
Ну, никто не просил, но я все равно парочку замечаний сделаю по поводу руби. Так сказать на будущее.

Первое - лучше прописывать сетеры/гетеры через attr_reader и attr_accessor. Первое само расписывает геттеры, второе расписывает геттер и сеттер. То бишь
class Game_CharacterBase
  attr_accessor :event_speed
end
эквивалентен
class Game_CharacterBase
  def event_speed
    @event_speed
  end
 
  def event_speed=(value)
    @event_speed = value
  end
end
И да, в таком случае приставки set и get обычно не приписываются.

Второе - для блоков кода существует 2 нотации: {|| } и do || end. Первый используют, если код помещается в одну строку, второй если строк несколько.
# одна строка
@events.values.each { |e| puts e }
#несколько строк
@events.values.each do |e|
  # ...
end

Дальше я просто умничать буду. Есть unless модификатор, который работает так же, как и if, только условие не должно выполняться.
# примерно одно и то же
next if !e.list
next unless e.list
Но в данном случае же обычно используют метод nil?
next if e.list.nil?
Вроде как хороший стиль написания.
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Mur

[VX Ace] Event Move Speed 6 года 2 мес. назад #102219

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • ОраторДаритель СтимкеяПрограммист JavaScript 2 место Организатор конкурсовУчитель
Amphilohiy пишет:
Первое - лучше прописывать сетеры/гетеры через attr_reader и attr_accessor. Первое само расписывает геттеры, второе расписывает геттер и сеттер. То бишь
class Game_CharacterBase
  attr_accessor :event_speed
end

Я правильно понимаю, что после объявления:
attr_accessor :event_speed

Я смогу установить event_speed обратившись как e.event_speed = 123, вместо того что бы вызывать свой set_event_speed(123)?


По поводу each и list это просто пример из чужого кода обработки комментариев ;)
Последнее редактирование: 6 года 2 мес. назад от Mur.
Администратор запретил публиковать записи гостям.

[VX Ace] Event Move Speed 6 года 2 мес. назад #102220

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Учитель2 место ГотвПобедитель Сбитой кодировкиПрограммист RubyОратор
Mur пишет:
Я правильно понимаю, что после объявления:
attr_accessor :event_speed

Я смогу установить event_speed обратившись как e.event_speed = 123, вместо того что бы вызывать свой set_event_speed(123)?
Да, все верно
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Mur

[VX Ace] Event Move Speed 6 года 2 мес. назад #102221

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • ОраторДаритель СтимкеяПрограммист JavaScript 2 место Организатор конкурсовУчитель
Внемля настоятельным рекомендациям Amphilohiy, код был почищен и наведён марафет :kiss:

Так что качаем свежую «конфетку» всё так же на GitHub. :woohoo:
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, Amphilohiy

[VX Ace] Event Move Speed 6 года 2 мес. назад #102223

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 911
  • Спасибо получено: 565
  • Программист RubyОраторДаритель СтимкеяПрограммист JavaScript Ветеран
Ну, раз уж тут пообсуждали код, добавлю и я :)
В регекспе точку, которая любой символ, лучше заменить на [\d\.] и проверить на длину $1, чтоб потом не искать ошибку, если случайно значение после двоеточия стёр или вписал левый символ.
Остальное по-мелочам для упрощения структуры кода, писать не буду, ато тут обычно такое не любят. :)
Последнее редактирование: 6 года 2 мес. назад от Lekste. Причина: Упс, опечатка
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy

[VX Ace] Event Move Speed 6 года 2 мес. назад #102224

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • ОраторДаритель СтимкеяПрограммист JavaScript 2 место Организатор конкурсовУчитель
Lekste пишет:
В регекспе точку, которая любой символ, лучше заменить на [\d\.]

Эмм,… я конечно не специалист,… но меня терзают смутные сомнения, а сработает ли твоё \d на отрицательное число? а на число с точкой?
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy

[VX Ace] Event Move Speed 6 года 2 мес. назад #102225

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 911
  • Спасибо получено: 565
  • Программист RubyОраторДаритель СтимкеяПрограммист JavaScript Ветеран
Конечно сработает, там же точка или цифра. Ну, да. Если персонаж может задом пятиться и надо проигрывать анимацию в обратном порядке, можно и минус добавить.
А ещё лучше так: \-?\d+(?:\.\d*)?

А для номера кадра минус не нужен, т.к. кадр не бывает отрицательным
Последнее редактирование: 6 года 2 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.

[VX Ace] Event Move Speed 6 года 2 мес. назад #102227

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • ОраторДаритель СтимкеяПрограммист JavaScript 2 место Организатор конкурсовУчитель
Lekste пишет:
А ещё лучше так: \-?\d+(?:\.\d*)?

Ну не знаю. Я подумаю. Спасиб. :unsure:
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy
Модераторы: NeKotZima
Время создания страницы: 0.235 секунд