Войти на сайт

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

ТЕМА: "Разлом" карты

"Разлом" карты 11 года 5 мес. назад #61234

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • 2 место Проект месяца 1 местоПроект месяца 3 место3 место ГотвПроект месяца 2 место2 место Сбитая кодировка3 местоПрограммист JavaScript Победитель Сбитой кодировкиОрганизатор конкурсов
Всё-таки иногда я скучаю по "красивостям" старого доброго RM2k3. Например, там было множество возможностей красиво перенестись с карты на карту - а иногда и не только красиво, но ещё и со смыслом. Например - показать, что "земля развёрзлась под ногами", разломив карту на четыре части.
В RMVXA такого, к сожалению, не предусмотрено. Но - мы и сами с усами!
=begin
  Скрипт перемещения с анимацией "деления карты на четыре части"
  Автор: Cerberus
=end
 
module Division
 
  @map_bitmap = nil
  @trans_sprite = nil
  @trans_viewport = nil
  @turn = -1
  @tr_rect = Rect.new
  @black = Color.new(0, 0, 0, 255)
  @divided = false
 
  def self.start
    @map_bitmap = Graphics.snap_to_bitmap
    @trans_viewport = Viewport.new(0, 0, 544, 416)
    @trans_sprite = Sprite.new(@trans_viewport)
    @turn = 52
    @trans_sprite.bitmap = Bitmap.new(544, 416)
    @trans_sprite.bitmap.blt(0, 0, @map_bitmap, @tr_rect);
    @trans_sprite.x = 0
    @trans_sprite.y = 0
    @trans_sprite.z = 1000
    @trans_viewport.z = 1000
    @trans_sprite.visible = true
    @trans_viewport.visible = true
  end
 
  def self.turn
    @turn
  end
 
  def self.divided
    @divided
  end
 
  def self.divided= (val)
    @divided=val
  end
 
  def self.update
    print "Updating division... ", @turn, " "
    stop if (turn==0)
    shift if (turn>0) 
  end
 
  def self.shift
    print "Shifting... "
    @tr_rect.set(@trans_viewport.rect.width / 2 - 4, 0, 8, @trans_viewport.rect.height)
    @map_bitmap.fill_rect(@tr_rect, @black);
    @tr_rect.set(0, @trans_viewport.rect.height / 2 - 4, @trans_viewport.rect.width, 8)
    @map_bitmap.fill_rect(@tr_rect, @black);
    @tr_rect.set(4, 4, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
    @map_bitmap.blt(0, 0, @trans_sprite.bitmap, @tr_rect)
    @tr_rect.set(@trans_viewport.rect.width / 2, 4, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
    @map_bitmap.blt(@trans_viewport.rect.width / 2 + 4, 0, @trans_sprite.bitmap, @tr_rect)
    @tr_rect.set(4, @trans_viewport.rect.height / 2, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
    @map_bitmap.blt(0, @trans_viewport.rect.height / 2 + 4, @trans_sprite.bitmap, @tr_rect)
    @tr_rect.set(@trans_viewport.rect.width / 2, @trans_viewport.rect.height / 2, @trans_viewport.rect.width / 2 - 4, @trans_viewport.rect.height / 2 - 4)
    @map_bitmap.blt(@trans_viewport.rect.width / 2 + 4, @trans_viewport.rect.height / 2 + 4, @trans_sprite.bitmap, @tr_rect)
    @tr_rect.set(0, 0, @trans_viewport.rect.width, @trans_viewport.rect.height)
    @trans_sprite.bitmap.blt(0, 0, @map_bitmap, @tr_rect)
    @turn-=1
  end
 
  def self.stop
    @turn = -1
    @divided = true
  end
 
  def self.dispose
    @map_bitmap.dispose
    @trans_sprite.bitmap.dispose
    @trans_sprite.dispose
    @trans_viewport.dispose
    @divided = false
  end
 
end
 
class Scene_Base
 
  alias divis_update update
 
  def update
    if Division.turn>=0
      Division.update 
      print "Divis.upd ", Division.turn, "\n"
    end
    divis_update
  end
 
end
 
class Game_Interpreter
 
  def run
    wait_for_message
    while @list[@index] do
      Fiber.yield while Division.turn>=0
      execute_command
      @index += 1
    end
    Fiber.yield
    @fiber = nil
  end
 
  alias divis_fadeout command_221
 
  def command_221
    if Division.divided
      screen.start_fadeout (1)
      Division.dispose
    else
      divis_fadeout
    end
  end
 
end
 
class Scene_Map < Scene_Base
 
  alias divis_pre_transfer pre_transfer
 
  def pre_transfer
    if Division.divided
      @map_name_window.close
      Graphics.brightness = 0
      $game_temp.fade_type = 0
      Division.dispose
    else
      divis_pre_transfer
    end
  end
end
Запускается короткой и простой командой - Division.start.

Демо

Жду критики от матёрых скриптеров, ибо наверняка сделал не оптимально. Но, по крайней мере, пока мне этот скрипт сломать не удалось :)
Жуть болотная, на лапках, в тапках и с пулемётом...
Последнее редактирование: 11 года 5 мес. назад от Cerberus.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: alexander85

"Разлом" карты 11 года 5 мес. назад #61235

  • KoHcTPyKTop
  • KoHcTPyKTop аватар
  • Вне сайта
  • Мастер
  • Сообщений: 186
  • Спасибо получено: 16
а для xp есть?
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61236

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • ОраторПроект месяца 2 место2 место ГотвПаладинПроект месяца 3 местоОрганизатор конкурсовВетеранПроект года 3 местоРазработчикПрограммист Ruby
а я нашел нечто подобное (transitions зовутся) просто евентами с вызовом уже существующих стандартных скриптов
forums.rpgmakerweb.com/index.php?/topic/...nsitionsscreen-wipe/

И для XP, и для аси

осталось подобрать картинку разлома
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61237

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • 2 место Проект месяца 1 местоПроект месяца 3 место3 место ГотвПроект месяца 2 место2 место Сбитая кодировка3 местоПрограммист JavaScript Победитель Сбитой кодировкиОрганизатор конкурсов
Для XP я, к сожалению, скриптинг пока не осваивал. Мне бы в Эйсе наловчиться :)
caveman, такой метод, если я не ошибаюсь, не позволяет смещать изображение во время перехода. Мой скрипт заточен именно на это.
Жуть болотная, на лапках, в тапках и с пулемётом...
Последнее редактирование: 11 года 5 мес. назад от Cerberus.
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61238

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • ОраторПроект месяца 2 место2 место ГотвПаладинПроект месяца 3 местоОрганизатор конкурсовВетеранПроект года 3 местоРазработчикПрограммист Ruby
поясни, что значит "смещать"?
ЗЫ: я нарисовал картинку (черный прямоугольник с белым крестом посредине), размыл её гауссом и прицепил для перехода. делает почти то же самое, что и твой скрипт (я потестил его, конечно), только наоборот - сходится :)))
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61240

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • 2 место Проект месяца 1 местоПроект месяца 3 место3 место ГотвПроект месяца 2 место2 место Сбитая кодировка3 местоПрограммист JavaScript Победитель Сбитой кодировкиОрганизатор конкурсов
Если тестил - наверное, обратил внимание, что картинка не просто попиксельно исчезает, а движется. Стандартные скрипты этого, кажется, не умеют.
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61241

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • ОраторПроект месяца 2 место2 место ГотвПаладинПроект месяца 3 местоОрганизатор конкурсовВетеранПроект года 3 местоРазработчикПрограммист Ruby
понял тебя. неужели 2003й мейкер умел так делать?
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61242

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • 2 место Проект месяца 1 местоПроект месяца 3 место3 место ГотвПроект месяца 2 место2 место Сбитая кодировка3 местоПрограммист JavaScript Победитель Сбитой кодировкиОрганизатор конкурсов
Именно что умел. Причём не только на четыре части, но и пополам (горизонтально и вертикально), и собирать так же. А вот затирать по кускам (а-ля эти самые transitions в более новых версиях) - кажется, нет.
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61243

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • ОраторПроект месяца 2 место2 место ГотвПаладинПроект месяца 3 местоОрганизатор конкурсовВетеранПроект года 3 местоРазработчикПрограммист Ruby
Интересно, что еще мы потеряли? :)
Потестил с переходом на другую карту, все отлично работает.
Хорошо бы, если б была возможность задать число turn в вызове Division.start (52, я полагаю, подобрано просто под размер экрана, а сдвиги там на 4 всегда), и научиться управлять скоростью разлома.

Offtop: замучала эта защита от флуда *facepalm*
Последнее редактирование: 11 года 5 мес. назад от caveman. Причина: я
Администратор запретил публиковать записи гостям.

"Разлом" карты 11 года 5 мес. назад #61244

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • 2 место Проект месяца 1 местоПроект месяца 3 место3 место ГотвПроект месяца 2 место2 место Сбитая кодировка3 местоПрограммист JavaScript Победитель Сбитой кодировкиОрганизатор конкурсов
Скорее, не turn, а величину сдвига, а turn считать как высота-экрана/(2*величина-сдвига). Обратные расчёты просто не всегда возможно сделать точно.
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.217 секунд