[XP]Параллакс - Попиксельное смещение для ивентов
Предыстория:
Однажды мне захотелось, чтобы игрок запрыгнул на бочку из стандартного тайлсета. Сделал бочку, сделал событие, в котором персонаж запрыгивал и... тут понял, что ничего не получается! Персонаж запрыгивал и вставал либо над бочкой, либо рядом с ней, как я ни пробовал, как ни старался, ничего не получалось.
Решение пришло ко мне быстро и оно было самым простым - изменить тайлсет и бочку в ней.
Чуть позже, понаменяв кучу объектов, на которые я хотел бы запрыгнуть, мне подумалось, что самое просто решение - не самое лучшее. И тогда я начал писать этот скрипт.
Описание:
Скрипт позволяет сместить ивент с помощью комментариев на указанное количество пикселей.
Также, можно сместить ивент еще и с помощью команды вызова скрипта.
Использование:
Комментарии:
Смещение как по X, так и по Y пишем в
одну строку комментария.
Примеры:
- смещает ивент на 13 пикселей вправо
- смещает на 48 пикселей вниз
- смещает на 14 вправо и 27 вниз
Вызов скрипта:@event=$game_map.events[номер_ивента]
@event.moveto(@event.x,@event.y,смещение_x,смещение_y)
Номер_ивента - номер события, для которого нужно выполнить смещение.
Смещение_X - значение, на которое происходит смещение по X от
начальной позиции
Смещение_Y - значение, на которое происходит смещение по Y от
начальной позиции
Ограничения:
Можно смещать событие только в сторону увеличения, то есть можно ox+16, но нельзя ox-16 Исправлено, скрипт обновлен
- К сожалению, пока нет смещения для области столкновения, при смещении ивент становится только проходимым. Попробую исправить в ближайшее время.
Собственно, скрипт:
class Game_Character
attr_accessor :ox
attr_accessor :oy
alias some_def initialize
def initialize
some_def
@ox=0
@oy=0
end
def moveto(x, y,ox=0,oy=0)
@x = x
@y = y
@ox=ox
@oy=oy
@real_x = @x * 128+@ox*4
@real_y = @y * 128+@oy*4
end
def moving?
return (@real_x != @x * 128+@ox*4 or @real_y != @y * 128+@oy*4)
end
end
class Game_Event < Game_Character
alias old_refresh refresh
def refresh
old_refresh
setup_by_comments
end
def setup_by_comments
unless @erased && @list.nil?
for command in @list
if command.code == 108
for i in 0...command.parameters.size
if command.parameters[i].include?("[ox") or
command.parameters[i].include?("[oy") then
if command.parameters[i].scan(/\[ox[\+\-]([0-9]+)\]/)
@ox=$1.to_i
end
if command.parameters[i].scan(/\[oy[\+\-]([0-9]+)\]/)
@oy=$1.to_i
end
moveto(@event.x, @event.y,@ox,@oy)
end
end
return
end
end
end
end
end