Войти на сайт

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

ТЕМА: Не происходит обновление окна

Не происходит обновление окна 9 года 9 мес. назад #71733

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоВетеран3 место1 место в ГотвОрганизатор конкурсовПроект месяца 1 местоПрограммист RubyУчительПроект месяца 2 место
Я не знаю, что мне с этим скриптом сделать, чтобы он работал и даже не могу понять, с какой стороны подступиться к нему, чтобы узнать, в чем состоит ошибка.

Скрипт разбит на несколько частей, приведу только те, которые нужны для проверки, в чем дело.
module DEFFFIIREM_Vocab
# ---------------------------------------
# TITLE MENU
  NEW_GAME = 'Новая игра'
  LOAD_GAME = 'Загрузить игру'
  EXIT_GAME = 'Выход'
# ---------------------------------------
# IN-GAME MENU
  MENU_ITEM = 'Предмет'
  MENU_ITEMS = 'Предметы'
  MENU_MAGIC = 'Магия'
  MENU_EQUIPMENT = 'Снаряжение'
  MENU_STATUS = 'Статус'
  MENU_FORMATION = 'Расположение'
  MENU_KEY_TERMS = 'Словарь'
  MENU_CONFIG = 'Настройки'
  MENU_SAVE = 'Сохранить'
# ---------------------------------------
# ITEMS MENU
  ITEMS_USE = 'Использовать'
  ITEMS_SORT = 'Сортировать'
# ---------------------------------------
# MAGIC MENU
  MAGIC_DISCARD = 'Забыть'
# ---------------------------------------
# EQUIPMENT MENU
  EQUIPMENT_EQUIP = 'Надеть'
  EQUIPMENT_OPTIMAL = 'Оптимальное'
  EQUIPMENT_BEST_ARMOR = 'Наилучшее'
  EQUIPMENT_L_HAND = 'Лев. рука'
  EQUIPMENT_R_HAND = 'Прав. рука'
  EQUIPMENT_HEAD = 'Шлем'
  EQUIPMENT_BODY = 'Тело'
  EQUIPMENT_HANDS = 'Наручи'
end
class DEFFFIIREM_MenuBase
  def initialize
    Graphics.transition
    @disposed=false
  end
 
  def main
    Graphics.update
    Input.update
    update
    dispose if $scene!=self
  end
 
  def update
 
  end
 
  def dispose
    if not disposed?
      Graphics.freeze
      instance_variables.each do |varname|
        ivar = instance_variable_get(varname)
        ivar.dispose if ivar.is_a?(Window)
        ivar.dispose if ivar.is_a?(Sprite)
        ivar.dispose if ivar.is_a?(Spriteset_Map)
      end
      disposed=true
    end
  end
 
  def disposed=(value)
    @disposed=value
  end
 
  def disposed?
    @disposed
  end
 
  def start_new_game
    $game_system.se_play($data_system.decision_se)
    Audio.bgm_stop
    Graphics.frame_count = 0
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    $game_party.setup_starting_members
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $game_map.autoplay
    $game_map.update
    $scene = Scene_Map.new
  end
 
  def init_gfx_and_audio
    if $scene.is_a?(Scene_Title)
      $game_system.bgm_play($data_system.title_bgm)
      Audio.me_stop
      Audio.bgs_stop
    end
      Graphics.transition
  end
 
  def audio_fadeout
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
  end
 
  def load_database
		if $BTEST
		  battle_test
		  return
		end
		$data_actors        = load_data("Data/Actors.rxdata")
		$data_classes       = load_data("Data/Classes.rxdata")
		$data_skills        = load_data("Data/Skills.rxdata")
		$data_items         = load_data("Data/Items.rxdata")
		$data_weapons       = load_data("Data/Weapons.rxdata")
		$data_armors        = load_data("Data/Armors.rxdata")
		$data_enemies       = load_data("Data/Enemies.rxdata")
		$data_troops        = load_data("Data/Troops.rxdata")
		$data_states        = load_data("Data/States.rxdata")
		$data_animations    = load_data("Data/Animations.rxdata")
		$data_tilesets      = load_data("Data/Tilesets.rxdata")
		$data_common_events = load_data("Data/CommonEvents.rxdata")
		$data_system        = load_data("Data/System.rxdata")
		$game_system = Game_System.new
	end
 
	def battle_test
		$data_actors        = load_data("Data/BT_Actors.rxdata")
		$data_classes       = load_data("Data/BT_Classes.rxdata")
		$data_skills        = load_data("Data/BT_Skills.rxdata")
		$data_items         = load_data("Data/BT_Items.rxdata")
		$data_weapons       = load_data("Data/BT_Weapons.rxdata")
		$data_armors        = load_data("Data/BT_Armors.rxdata")
		$data_enemies       = load_data("Data/BT_Enemies.rxdata")
		$data_troops        = load_data("Data/BT_Troops.rxdata")
		$data_states        = load_data("Data/BT_States.rxdata")
		$data_animations    = load_data("Data/BT_Animations.rxdata")
		$data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
		$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
		$data_system        = load_data("Data/BT_System.rxdata")
		Graphics.frame_count = 0
		$game_temp          = Game_Temp.new
		$game_system        = Game_System.new
		$game_switches      = Game_Switches.new
		$game_variables     = Game_Variables.new
		$game_self_switches = Game_SelfSwitches.new
		$game_screen        = Game_Screen.new
		$game_actors        = Game_Actors.new
		$game_party         = Game_Party.new
		$game_troop         = Game_Troop.new
		$game_map           = Game_Map.new
		$game_player        = Game_Player.new
		$game_party.setup_battle_test_members
		$game_temp.battle_troop_id = $data_system.test_troop_id
		$game_temp.battle_can_escape = true
		$game_map.battleback_name = $data_system.battleback_name
		$game_system.se_play($data_system.battle_start_se)
		$game_system.bgm_play($game_system.battle_bgm)
		$scene = Scene_Battle.new
	end
end

А вот код с ошибкой:
class DEFFFIIREM_Menu < DEFFFIIREM_MenuBase
  def initialize
    init_gfx_and_audio
    pose_all_windows
  end
 
  def pose_all_windows
    pose_commands
  end
 
  def pose_commands
    @command_window = Window_Command.new(192,[
      DEFFFIIREM_Vocab::MENU_ITEMS,
      DEFFFIIREM_Vocab::MENU_MAGIC,
      DEFFFIIREM_Vocab::MENU_EQUIPMENT,
      DEFFFIIREM_Vocab::MENU_STATUS,
      DEFFFIIREM_Vocab::MENU_FORMATION,
      DEFFFIIREM_Vocab::MENU_KEY_TERMS,
      DEFFFIIREM_Vocab::MENU_CONFIG,
      DEFFFIIREM_Vocab::MENU_SAVE
    ])
    @command_window.x=640-@command_window.width
    @command_window.active=true
  end
 
  def update
    @command_window.update
    if Input.trigger? (Input::B) then
      $scene=Scene_Map.new
    end
  end
end

Конкретно сама ошибка заключается в том, что @command_window.update не дает никакого эффекта и окно не обновляется. Может быть, так оно работает только у меня, но я бы не стал на это рассчитывать.

Для вызова этого меню следует вызвать следующий скрипт из события: $scene=DEFFFIIREM_Menu.new
Последнее редактирование: 9 года 9 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.

Не происходит обновление окна 9 года 9 мес. назад #71734

  • Kian Ni
  • Kian Ni аватар
  • Вне сайта
  • Заблокирован
  • Я души кушаю людей.
  • Сообщений: 1247
  • Спасибо получено: 412
Возможно проблема в самом update в классе command_window. Или же внимательно проверь все названия, с этим тоже заподлянка бывает.
Администратор запретил публиковать записи гостям.

Не происходит обновление окна 9 года 9 мес. назад #71737

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоВетеран3 место1 место в ГотвОрганизатор конкурсовПроект месяца 1 местоПрограммист RubyУчительПроект месяца 2 место
Решение нашлось, но я хоть убей не пойму, почему оно работает именно так.
def update
    super
    Graphics.transition # Добавил эту строку
    @command_window.update
    if Input.trigger? (Input::B) then
      $scene=Scene_Map.new
    end
  end

Интересно, почему эта же процедура не работает при вызове из initialize о.О
Администратор запретил публиковать записи гостям.

Не происходит обновление окна 9 года 9 мес. назад #71738

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

Не происходит обновление окна 9 года 9 мес. назад #71739

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоВетеран3 место1 место в ГотвОрганизатор конкурсовПроект месяца 1 местоПрограммист RubyУчительПроект месяца 2 место
Цербер, потому то я пытался решать как-то. Я изменил код в MenuBase:
def update
    update_basics
  end
 
  def update_basics
    Graphics.update
    Input.update
  end

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

Не происходит обновление окна 9 года 9 мес. назад #71741

  • Lipton
  • Lipton аватар
  • Вне сайта
  • Просветлённый
  • Ух ты!
  • Сообщений: 379
  • Спасибо получено: 670
  • 2 место Организатор конкурсовПрограммист Ruby
На сколько помню initialize вызывается единожды при создании класса.
Администратор запретил публиковать записи гостям.

Не происходит обновление окна 9 года 9 мес. назад #71742

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоВетеран3 место1 место в ГотвОрганизатор конкурсовПроект месяца 1 местоПрограммист RubyУчительПроект месяца 2 место
Липтон, так вызов же $scene=DEFFFIIREM_Menu.new
Дописывал Graphics.transition в него, ноль эмоций от класса - только окна разложились.
Администратор запретил публиковать записи гостям.

Не происходит обновление окна 9 года 9 мес. назад #71745

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • 2 место ГотвПроект месяца 2 местоПроект года 3 местоПроект месяца 1 местоОраторУчительПроект года 1 местоРазработчикПаладин3 место
Косяк в том, что транзишн по идее отрабатывает после подготовки перехода Freeze.

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

А вот если пихнуть его в main или в тот же апдейт, то никто уже переход не сломает.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Не происходит обновление окна 9 года 9 мес. назад #71746

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоВетеран3 место1 место в ГотвОрганизатор конкурсовПроект месяца 1 местоПрограммист RubyУчительПроект месяца 2 место
О! Хоть кто-то мне это объяснил)) Спасибо)) Теперь все понял, буду работать аккуратнее
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.218 секунд