Войти на сайт

Авторизация, ждите ...
×
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

ТЕМА: Ошибка скрипта rpg maker VX

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97416

  • Kouta555
  • Kouta555 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 576
  • Спасибо получено: 835
  • РазработчикВетеран2 место Проект месяца 1 местоОраторПроект месяца 3 местоПобедитель конкурсаПроект месяца 2 место
Значит дело такое, я изменил всю стандартную систему скриптов мейкера, но нахимичил немного хуже, чем нужно.
ТО есть что-то удалил, что-то заменил, что-то добавил.
Теперь большая часть команд завязана на скриптах и все работает так как мне надо, но дело в том, что я удалил программу вывода картинки из папки picture. То есть стандартная система не работает,

из Game_Interpreter я удалил несколько пунктов а именно
#--------------------------------------------------------------------------
  # * Show Picture
  #--------------------------------------------------------------------------
  def command_231
    if @params[3] == 0    # Direct designation
      x = @params[4]
      y = @params[5]
    else                  # Designation with variables
      x = $game_variables[@params[4]]
      y = $game_variables[@params[5]]
    end
    screen.pictures[@params[0]].show(@params[1], @params[2],
      x, y, @params[6], @params[7], @params[8], @params[9])
    return true
  end
  #--------------------------------------------------------------------------
  # * Move Picture
  #--------------------------------------------------------------------------
  def command_232
    if @params[3] == 0    # Direct designation
      x = @params[4]
      y = @params[5]
    else                  # Designation with variables
      x = $game_variables[@params[4]]
      y = $game_variables[@params[5]]
    end
    screen.pictures[@params[0]].move(@params[2], x, y, @params[6],
      @params[7], @params[8], @params[9], @params[10])
    @wait_count = @params[10] if @params[11]
    return true
  end
  #--------------------------------------------------------------------------
  # * Rotate Picture
  #--------------------------------------------------------------------------
  def command_233
    screen.pictures[@params[0]].rotate(@params[1])
    return true
  end
  #--------------------------------------------------------------------------
  # * Tint Picture
  #--------------------------------------------------------------------------
  def command_234
    screen.pictures[@params[0]].start_tone_change(@params[1], @params[2])
    @wait_count = @params[2] if @params[3]
    return true
  end
  #--------------------------------------------------------------------------
  # * Erase Picture
  #--------------------------------------------------------------------------
  def command_235
    screen.pictures[@params[0]].erase
    return true
  end

Конечно же после этого, вывода картинок я не добьюсь, но когда я снова поместил этот код на его законное место, вывод картинки параллельным процессом нихт арбайтен, а когда персонаж касается эвента в котором стоит эта команда
игра выдаёт ошибку

Script 'Game_Interpreter' line 472: NoMethodError occurred.

undefined method `pictures' for #<Game_Screen:0x9ee52c8>

ссылается оно на эту screen.pictures[@params[0]].show(@params[1], @params[2], строку.
В коде выше она находится в разделе Show pictures.






такие дела :unsure:
Последнее редактирование: 7 года 2 нед. назад от Kouta555.
Администратор запретил публиковать записи гостям.

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97418

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

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97420

  • Kouta555
  • Kouta555 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 576
  • Спасибо получено: 835
  • РазработчикВетеран2 место Проект месяца 1 местоОраторПроект месяца 3 местоПобедитель конкурсаПроект месяца 2 место
class Game_Screen
 
  attr_reader   :brightness
  attr_reader   :tone
  attr_reader   :flash_color
  attr_reader   :shake_owner
  attr_reader   :shake_x
  attr_reader   :shake_y
  attr_reader   :weather_type
  attr_reader   :weather_max
  attr_reader   :fog_bitmap
  attr_reader   :fog_opacity
  attr_reader   :fog_x_speed
  attr_reader   :fog_y_speed
 
  def initialize
    clear
  end
 
  def clear
    @brightness = 255
    @fadeout_duration = 0
    @fadein_duration = 0
    @tone = Tone.new(0, 0, 0, 0)
    @tone_target = Tone.new(0, 0, 0, 0)
    @tone_duration = 0
    @flash_color = Color.new(0, 0, 0, 0)
    @flash_duration = 0
    clear_shake
    @weather_type = 0
    @weather_max = 0.0
    @weather_type_target = 0
    @weather_max_target = 0.0
    @weather_duration = 0
    @fog_bitmap = nil
    @fog_opacity = 0
    @fog_x_speed = 0.0
    @fog_y_speed = 0.0
  end
 
  def clear_shake
    @shake_owner = nil
    @shake_power = 0
    @shake_speed = 0
    @shake_duration = 0
    @shake_direction = 1
    @shake_x = 0
    @shake_y = 0
    @shake_power_random = false
    @shake_speed_random = false
    @shake_direction_random = false
  end
 
  def clear_flash
    @flash_duration = 0
    @flash_color = Color.new(0, 0, 0, 0)
  end
 
  def clear_fog
    @fog_bitmap = nil
    @fog_opacity = 0
    @fog_x_speed = 0.0
    @fog_y_speed = 0.0
  end
 
  def start_fadeout(duration)
    @fadeout_duration = duration
    @fadein_duration = 0
  end
 
  def start_fadein(duration)
    @fadein_duration = duration
    @fadeout_duration = 0
  end
 
  def black_screen
    @brightness = 0
    @fadein_duration = 0
    @fadeout_duration = 0
  end
 
  def start_tone_change(tone, duration)
    @tone_target = tone.clone
    @tone_duration = duration
    if @tone_duration == 0
      @tone = @tone_target.clone
    end
  end
 
  def start_flash(color, duration)
    @flash_color = color.clone
    @flash_duration = duration
  end
 
  def start_shake(args) # power, speed, duration, direction, owner
    return if @shake_duration > args[2]
    clear_shake
    @shake_owner = args[4]
    @shake_duration = args[2]
    if args[0] == 0
      @shake_power = rand(9) + 1
      @shake_power_random = true
    else
      @shake_power = args[0]
      @shake_power_random = false
    end
    if args[1] == 0
      @shake_speed = rand(9) + 1
      @shake_speed_random = true
    else
      @shake_speed = args[1]
      @shake_speed_random = false
    end
    if args[3] == 0
      @shake_direction_random = true
    else
      if @shake_direction != args[3] and @shake_direction != (10 - args[3])
        @shake_direction = args[3]
        @shake_x = 0
        @shake_y = 0
      end
      @shake_direction_random = false
    end
  end
 
  def weather(type, power, duration)
    @weather_type_target = type
    if @weather_type_target != 0
      @weather_type = @weather_type_target
    end
    if @weather_type_target == 0
      @weather_max_target = 0.0
    else
      @weather_max_target = (power + 1) * 8.0
    end
    @weather_duration = duration
    if @weather_duration == 0
      @weather_type = @weather_type_target
      @weather_max = @weather_max_target
    end
  end
 
  def save_fog(bitmap, opacity, x_speed, y_speed)
    @fog_bitmap = bitmap
    @fog_opacity = opacity
    @fog_x_speed = x_speed
    @fog_y_speed = y_speed
  end
 
  def update
    update_fadeout
    update_fadein
    update_tone
    update_flash
    update_shake
    update_weather
  end
 
  def update_fadeout
    if @fadeout_duration >= 1
      d = @fadeout_duration
      @brightness = (@brightness * (d - 1)) / d
      @fadeout_duration -= 1
    end
  end
 
  def update_fadein
    if @fadein_duration >= 1
      d = @fadein_duration
      @brightness = (@brightness * (d - 1) + 255) / d
      @fadein_duration -= 1
    end
  end
 
  def update_tone
    if @tone_duration >= 1
      d = @tone_duration
      @tone.red = (@tone.red * (d - 1) + @tone_target.red) / d
      @tone.green = (@tone.green * (d - 1) + @tone_target.green) / d
      @tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d
      @tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d
      @tone_duration -= 1
    end
  end
 
  def update_flash
    if @flash_duration > 0
      d = @flash_duration
      @flash_color.alpha = @flash_color.alpha * (d - 1) / d
      @flash_duration -= 1
    end
  end
 
  def update_shake
    if @shake_duration != 0 or @shake_x != 0 or @shake_y != 0
      return if $game_temp.stop_time_count > 0
      delta = (@shake_power * @shake_speed) / 10.0
      if @shake_x.abs < delta and @shake_y.abs < delta
        if @shake_power_random == true
          @shake_power = rand(9) + 1
        end
        if @shake_speed_random == true
          @shake_speed = rand(9) + 1
        end
        if @shake_direction_random == true
          @shake_direction = rand(8) + 1
          @shake_direction += 1 if @shake_direction > 4
        end
        delta = (@shake_power * @shake_speed) / 10.0
        @shake_x = 0
        @shake_y = 0
      end
      if @shake_x.abs > @shake_power * 2 or @shake_y.abs > @shake_power * 2
        @shake_direction = 10 - @shake_direction
      end
      if @shake_duration > 0
        @shake_duration -= 1
      end
      if @shake_duration == 0 and @shake_x.abs <= delta and @shake_y.abs <= delta
        @shake_x = 0
        @shake_y = 0
      else
        @shake_x += delta if @shake_direction % 3 == 0
        @shake_x -= delta if (@shake_direction + 2) % 3 == 0
        @shake_y += delta if @shake_direction < 4
        @shake_y -= delta if @shake_direction > 6
      end
    end
  end
 
  def update_weather
    if @weather_duration >= 1
      d = @weather_duration
      @weather_max = (@weather_max * (d - 1) + @weather_max_target) / d
      @weather_duration -= 1
      if @weather_duration == 0
        @weather_type = @weather_type_target
      end
    end
  end
end
Администратор запретил публиковать записи гостям.

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97422

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Победитель Сбитой кодировкиОраторУчительПрограммист Ruby2 место Готв
Ты же не думал что я смогу пройти мимо такого поста не пумничав?
Во первых - довольно часто дают совет изначальные скрипты не трогать, а вонсить изменение отдельными скриптами. Так у тебя всегда под боком будет оргиниал, и любые изменения можно откатить простым комментированием.
Во вторых - Керберус тебе уже дал наводку, что соль в классе Game_Screen, как впрочем и сама ошибка
undefined method `pictures' for #<Game_Screen:0x9ee52c8>
Суть - есть экземпляр класса Game_Screen в переменной screen, у которого ты пытаешься вызвать метод pictures, которого нет
В третьих - ты скинул код, в котором такого метода у класса Game_Screen нет.

Ну, истоки более менее ясны - нет ни метода, ни переменной хотя бы отдаленно напоминающей нужную. Что сказать - надо прописывать всю логику картинок. Однако с учетом того что тут все наверчено буквально в исходниках, то сложно прогнозировать как все это фиксить не наступив на мину. Код интепретатора, кстати, совпадает с эйсовским, а вот Game_Screen не очень. Ты их точно не намешиваешь? Простого VX у меня и в помине нет.

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

Такие дела :unsure:
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Последнее редактирование: 7 года 2 нед. назад от Amphilohiy.
Администратор запретил публиковать записи гостям.

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97423

  • Kouta555
  • Kouta555 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 576
  • Спасибо получено: 835
  • РазработчикВетеран2 место Проект месяца 1 местоОраторПроект месяца 3 местоПобедитель конкурсаПроект месяца 2 место
тогда можно -ли сделать отдельно скрипт для вывода картинок на экран, не через команду меню, а просто используя скрипт?
Администратор запретил публиковать записи гостям.

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97424

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Победитель Сбитой кодировкиОраторУчительПрограммист Ruby2 место Готв
Можно, но тут есть подвох... Врятли кто-то возьмет писать скрипт на фитчу, которая уже есть в мейкере. Почему бы тебе не вернуть кусок Game_Screen с картинками? Особенно учитывая, что тебе по сути придется инстанцировать внутри Game_Screen класс Game_Picture и вернуть пару методов.

Или же сделать эдакий глобальный Game_Pictures и уже все действия мутить самому вызовом скриптов, методы ты можешь подглядеть в классе Game_Picture.
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97425

  • Kouta555
  • Kouta555 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 576
  • Спасибо получено: 835
  • РазработчикВетеран2 место Проект месяца 1 местоОраторПроект месяца 3 местоПобедитель конкурсаПроект месяца 2 место
Вернуть я его не могу, потому что это нарушит процесс работы, основной системы.
Как раз эдакий глобальный гейм пикчер подойдёт.
Администратор запретил публиковать записи гостям.

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97426

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 688
  • Спасибо получено: 350
Я конечно извиняюсь, но зачем было городить такие огороды, если можно было просто отдельные скрипты мутить? Мне чисто из интереса.
Администратор запретил публиковать записи гостям.

Ошибка скрипта rpg maker VX 7 года 2 нед. назад #97428

  • Kouta555
  • Kouta555 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 576
  • Спасибо получено: 835
  • РазработчикВетеран2 место Проект месяца 1 местоОраторПроект месяца 3 местоПобедитель конкурсаПроект месяца 2 место
Из-за конфликтов в коде.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.277 секунд