Войти на сайт
×
ТЕМА: Скриптинг урок 2, Leon перевод by gromdron
Скриптинг урок 2, Leon перевод by gromdron 17 года 6 мес. назад #5512
|
Теперь мы начнем 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) 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. И что же это означает? Вы узнаете это посредством эксперимента, который вы проведете уже без меня. Я уверен что вы не тупы и можете проделать это самостоятельно. Создание и проверка сценария . Теперь когда вы научились делать такие окна вы можете провести эксперимент с ними. В третей главе я научу вас как добавлять предметы к вашему сценарию и при этом не обращаться к стандартным объектам. |
Мой ICQ статус: <br />Галлерея и файловое хранилище. Вы можете хранить свои файлы и изображения - вечно
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: akito66
|
Скриптинг урок 2, Leon перевод by gromdron 17 года 6 мес. назад #5570
|
Мое мнение ты знаешь. Статья специализирована для профи. А людям надо с нуля.
А вообще - спасибо. Спасибо, что стараешься, хочешь людям и что меня подбиваешь на энтузиазм. Спасибо за то что хороший человек |
Администратор запретил публиковать записи гостям.
|
Время создания страницы: 0.614 секунд