Войти на сайт

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

ТЕМА: Скриптинг урок 2, Leon перевод by gromdron

Скриптинг урок 2, Leon перевод by gromdron 17 года 6 мес. назад #5512

  • gromdron
  • gromdron аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 512
  • Спасибо получено: 6
  • Учитель
Теперь мы начнем 2 главу.
Для того чтобы нормально ориентироваться, вам нужно будет знать следующее:
-Урок 1
-Знать как пишутся сцены
-Знать о наследовании
-Создать основу окна статуса

Сделать сцену это тоже самое что создать окно… . Вы должны создать новое окно, но вы можете его и не создавать, вы можете воспользоваться вашим предыдущем окном, но я советую сам создавать новое окно на каждый урок .
Для упрощения мы воспользуемся нашим предыдущем окном Scene_Name. И так, начнем с строки:
class Scene_Name

Теперь вы инициализировали все окна… но вы не должны делать это с каждой сценой, это делается только с определенными сценами. С какими? Это уже зависит от того что это за скрипт. Если вы будете делать переключатель с актера на актера, вам это понадобиться. Но в этом случае вы должны обращаться к индексу в скрипте , а не к актеру.
def initialize(actor_index = 0)
  @actor_index = actor_index
end

Это все хорошо, но… у нас нет актера с ID 0Значит скрипт автоматически поставит значение в 1. Следовательно при использовании I.D. долен быть вывод определенного актера на экран, а точнее информации о нем? Хорошо, мы определим это в окне. Так, давайте отступим от правил в первой сцене.
class Window_Name   Window_Base
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $defaultfonttype
    self.contents.font.size = $defaultfontsize
    refresh
  end
 
  def refresh
  self.contents.clear
    self.contents.draw_text(0, 0, 600, 32,  This is a test of the your scripting ability. )
    self.contents.draw_text(0, 32, 600, 32,  Apparently, you learned something new! )
  end
end

Подождите, как мы определим актера? Хм.. это может показаться сверхъестественным. Поместите: (actor) около слова ‘initialize’, и перед рефреш поставьте: @actor = actor before refresh. Почему? Эта комбинация вызывает информацию актера на протяжении всей инициализации, и хранит все в переменной @actor. Подождите, это переменная? Где ID героя ? Вы создали все. И это будет id первого актера у вас. Почему? Это случается в сцене. Как насчет цикла? Хм…а де но заканчивается? Очень скоро, вот ответ.
И так, наше окно выглядит так:
class Window_Name   Window_Base
  def initialize(actor)
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
@actor = actor
    refresh
  end
 
def refresh
  self.contents.clear
    self.contents.draw_text(0, 0, 600, 32,  This is a test of the your scripting ability. )
    self.contents.draw_text(0, 32, 600, 32,  Apparently, you learned something new! )
  end
end

Вернемся назад к нашей сцене.
class Scene_Name
  def initialize(actor_index = 0)
    @actor_index = actor_index
  end

Теперь нам нужно создать основной метод. Каждая сцена должна иметь метод! Это довольна крутая сцена поэтому мы должны инициализировать метод. Это идентифицирует материал. Теперь я покажу как это должно быть. Это очень важно.
def main
  @actor = $game_party.actors[@actor_index]
  @name_window = Window_Name.new
 
  Graphics.transition
  loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
end
    Graphics.freeze
    @name_window.dispose
  end
Стоп, стоп, стоп… А как быть с символами #*%& которые загружаются?
Ладно, я опишу вам функции.
def main  #главный метод
  @actor = $game_party.actors[@actor_index]  #Id актера!
  @name_window = Window_Name.new  #Идентификатор @name_window в вашем окне.
  
  Graphics.transition  #Графический переход
  loop do  #Начало цикла
      Graphics.update  #Обновление графики
      Input.update  #Обновление ввода
      update  # обновляет метод
      if $scene != self  #Если сцена не ровняется сцене..
        break  #Ломаем цикл
      end  #Закрытие оператора
end  #Закрытие цикла
    Graphics.freeze  #Останавливаем графику
    @name_window.dispose  #Диспозируем окно.
  end  #конец главного метода

Не трудно? Теперь в каждой сцене мы должны использовать линии от Graphics.transition до Graphics.freeze .
Это неизбежно. К счастью у виндовса есть функция copy/paste.

Теперь у нас есть скрипт, но при его использовании вы получите ошибку. ‘unidentified local variable or method ‘update’ for your scene.’
Нам нужно идентифицировать ‘update’.
Это основа первых 2 классов, давайте же сделаем скрипт.

В ‘update’, вы должны его идентифицировать следующей вставкой.
def update
  @name_window.update
end

Это уберет ошибку, если вы поместите в конец сценария ‘end’ и закончите тем самым скрипт. Давайте же добавим нашей сценку дополнительную структуру. Сделаем та что при нажатии на клавишу мы вернемся к карте. Довайте начнем.
if Input.trigger?(Input::B)  #Есди нажата В
  $game_system.se_play($data_system.cancel_se)  #Начнет играть игровая музыка.
  $scene = Scene_Map.new  #И мы вернемся к карте
end
Это хорошо, но там нет ничего. Вернемся назад к окну чтобы этого избежать.


class Window_Name   Window_Base
  def initialize(actor)
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
@actor = actor
    refresh
  end
 
def refresh
  self.contents.clear
    self.contents.draw_text(0, 0, 600, 32,  This is a test of the your scripting ability. )
    self.contents.draw_text(0, 32, 600, 32,  Apparently, you learned something new! )
  end
end

Сначала удалите self.contents.draw_text. А точнее все.

class Window_Name   Window_Base
  def initialize(actor)
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
@actor = actor
    refresh
  end
 
def refresh
  self.contents.clear
  end
end

Теперь создадим немого информации. Например название актера, его класс и его спрайт.
Мы уже идентифицировали актера и это должно быть просто, правильно? Хорошо, пока вы знаете как работает суперкласс. Здесь вы можете использовать любой метод в суперклассе, если вы идентифицируете его должным образом. Window_Base, один из тех которые должны быть идентифицируемы, включая draw_actor_name, draw_actor_class, and draw_actor_sprite. Довольно круто, да?! Но… как добавить это? Для этого необходимо использовать суперкласс.
def draw_actor_name(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 120, 32, actor.name)
end

Вы видите что в скобке около actor написано x, y ? tЭто означает что они должны быть включены. К счастью первый и последний очень просты! Вы можете разместить его месторасположение прямо в мею. Давайте сделаем так:

draw_actor_name(@actor, 40, 0)

и поместите это прямо под self.contents.clear и теперь вы можете видеть имя актера. Если вы продолжите смотреть Window_Base, вы найдете еще несколько элементов. Вот фактически все:
draw_actor_graphic(actor, x, y)
draw_actor_name(actor, x, y)
draw_actor_class(actor, x, y)
draw_actor_level(actor, x, y)
draw_actor_exp(actor, x, y)
draw_actor_hp(actor, x, y, width = 144)
draw_actor_sp(actor, x, y, width = 144)
draw_actor_parameter(actor, x, y, type)

Хорошо… большинство из них одинаковы… но есть двое… они совершенно новые! Как вы догадались это hp и sp, its они почти подобны первомы, но как быть с шириной: width = 144? Вы можете устанавливать это число в то значение которое захотите вы. Вы можете оставить это число 144, даже удалив ‘width = ‘ . Но оставить это последним параметром. Ну и где же этот список? Он в Window_Base в методе. Вот список:

0 = атака
1 = защита
2 = магическая защите
3 = сила
4 = ловкость
5 = проворство
6 = интеллект

Вы можете провести пару экспериментов с этими функциями.


А как быть с надписями, если я хочу показать их?
Это проще чем вы думаете. Если вы хотите добавить вещи они должны быть в одном цвете, а точнее в первом (normal color) опробуйте это:

System1
System2

Normal1
Normal2

Теперь поместите выше вашей системы такую строку: self.contents.font.color = system_color
И выше нормального материала: self.contents.font.color = normal_color

Отлично, но вы должны написать материалы к разным словам, (обычно это ‘Имя:’, ‘Класс:’, ‘Снаряжение’, и др).
Это не сложно. Вы можете создать свой текст. Это сделать можно вот так:
self.contents.draw_text(x, y, tx, ty, text, z)
x = Месторасположение слева на право от того где начинается текст.
y = месторасположение слева на право от того где текст.
tx = длинна текста. Если длинна текста будет больше этого значения, то редактор просто обрежет лишний текст.
ty = количество ячеек для текста.
z = выравнивание текста. Если не введено, или равно 0, то текст выровняется о левому краю , если будет равно 1 текст будет в центре, если будет равно 2, выравнивание будет по правому краю.

Теперь вы можете рисовать метки, а как насчет снаряжения? Это могло быть стимулом.
В Window_Base, если еще один метод:
draw_item_name(item, x, y)

Эта функция вырисовывает предмет. Она должна быть всегда определена. А как же мы сделаем это? Хм…мы хотим оборудовать актера, таким образом мы должны призвать информацию о предмете, оружии или броне.

Чтобы вызвать данные оружия, вы можете воспользоваться функцией $data_weapons[x], где x id оружия. Теперь оружие всегда изменяется так когда оружие равняется оружию актера. Мы получили эту функцию из Game_Actor. Именно это делает @actor запросом. Чтобы получить оружия актеров нам нужна @actor.weapon_id. Мы должны поместить то вместо ‘x’.
И так, строка будет выглядеть у нас так $data_weapons[@actor.weapon_id] ее мы должны вставить в item. Тогда, x, y тоже самое, а точнее прежнее местонхождение текста.

Это хорошо но как на счет брони? За нее отвечают armor1, armor2, armor3, и armor4. И что же это означает? Вы узнаете это посредством эксперимента, который вы проведете уже без меня. Я уверен что вы не тупы и можете проделать это самостоятельно.

Создание и проверка сценария .

Теперь когда вы научились делать такие окна вы можете провести эксперимент с ними. В третей главе я научу вас как добавлять предметы к вашему сценарию и при этом не обращаться к стандартным объектам.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: akito66

Скриптинг урок 2, Leon перевод by gromdron 17 года 6 мес. назад #5570

  • HoF
  • HoF аватар
Мое мнение ты знаешь. Статья специализирована для профи. А людям надо с нуля.
А вообще - спасибо. Спасибо, что стараешься, хочешь людям и что меня подбиваешь на энтузиазм. Спасибо за то что хороший человек
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.614 секунд