- Сообщений: 512
- Спасибо получено: 6
Скриптинг урок 2, Leon перевод by gromdron
19 года 1 нед. назад #5512
от gromdron
Мой ICQ статус: <br /> Галлерея и файловое хранилище. Вы можете хранить свои файлы и изображения - вечно
gromdron создал тему: Скриптинг урок 2, Leon перевод by gromdron
Теперь мы начнем 2 главу.
Для того чтобы нормально ориентироваться, вам нужно будет знать следующее:
-Урок 1
-Знать как пишутся сцены
-Знать о наследовании
-Создать основу окна статуса
Сделать сцену это тоже самое что создать окно… . Вы должны создать новое окно, но вы можете его и не создавать, вы можете воспользоваться вашим предыдущем окном, но я советую сам создавать новое окно на каждый урок .
Для упрощения мы воспользуемся нашим предыдущем окном Scene_Name. И так, начнем с строки:
Теперь вы инициализировали все окна… но вы не должны делать это с каждой сценой, это делается только с определенными сценами. С какими? Это уже зависит от того что это за скрипт. Если вы будете делать переключатель с актера на актера, вам это понадобиться. Но в этом случае вы должны обращаться к индексу в скрипте , а не к актеру.
Это все хорошо, но… у нас нет актера с ID 0Значит скрипт автоматически поставит значение в 1. Следовательно при использовании I.D. долен быть вывод определенного актера на экран, а точнее информации о нем? Хорошо, мы определим это в окне. Так, давайте отступим от правил в первой сцене.
Подождите, как мы определим актера? Хм.. это может показаться сверхъестественным. Поместите: (actor) около слова ‘initialize’, и перед рефреш поставьте: @actor = actor before refresh. Почему? Эта комбинация вызывает информацию актера на протяжении всей инициализации, и хранит все в переменной @actor. Подождите, это переменная? Где ID героя ? Вы создали все. И это будет id первого актера у вас. Почему? Это случается в сцене. Как насчет цикла? Хм…а де но заканчивается? Очень скоро, вот ответ.
И так, наше окно выглядит так:
Вернемся назад к нашей сцене.
Теперь нам нужно создать основной метод. Каждая сцена должна иметь метод! Это довольна крутая сцена поэтому мы должны инициализировать метод. Это идентифицирует материал. Теперь я покажу как это должно быть. Это очень важно.
Стоп, стоп, стоп… А как быть с символами #*%& которые загружаются?
Ладно, я опишу вам функции.
Не трудно? Теперь в каждой сцене мы должны использовать линии от Graphics.transition до Graphics.freeze .
Это неизбежно. К счастью у виндовса есть функция copy/paste.
Теперь у нас есть скрипт, но при его использовании вы получите ошибку. ‘unidentified local variable or method ‘update’ for your scene.’
Нам нужно идентифицировать ‘update’.
Это основа первых 2 классов, давайте же сделаем скрипт.
В ‘update’, вы должны его идентифицировать следующей вставкой.
Это уберет ошибку, если вы поместите в конец сценария ‘end’ и закончите тем самым скрипт. Давайте же добавим нашей сценку дополнительную структуру. Сделаем та что при нажатии на клавишу мы вернемся к карте. Довайте начнем.
Это хорошо, но там нет ничего. Вернемся назад к окну чтобы этого избежать.
Сначала удалите self.contents.draw_text. А точнее все.
Теперь создадим немого информации. Например название актера, его класс и его спрайт.
Мы уже идентифицировали актера и это должно быть просто, правильно? Хорошо, пока вы знаете как работает суперкласс. Здесь вы можете использовать любой метод в суперклассе, если вы идентифицируете его должным образом. Window_Base, один из тех которые должны быть идентифицируемы, включая draw_actor_name, draw_actor_class, and draw_actor_sprite. Довольно круто, да?! Но… как добавить это? Для этого необходимо использовать суперкласс.
Вы видите что в скобке около actor написано x, y ? tЭто означает что они должны быть включены. К счастью первый и последний очень просты! Вы можете разместить его месторасположение прямо в мею. Давайте сделаем так:
draw_actor_name(@actor, 40, 0)
и поместите это прямо под self.contents.clear и теперь вы можете видеть имя актера. Если вы продолжите смотреть Window_Base, вы найдете еще несколько элементов. Вот фактически все:
Хорошо… большинство из них одинаковы… но есть двое… они совершенно новые! Как вы догадались это 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
Отлично, но вы должны написать материалы к разным словам, (обычно это ‘Имя:’, ‘Класс:’, ‘Снаряжение’, и др).
Это не сложно. Вы можете создать свой текст. Это сделать можно вот так:
x = Месторасположение слева на право от того где начинается текст.
y = месторасположение слева на право от того где текст.
tx = длинна текста. Если длинна текста будет больше этого значения, то редактор просто обрежет лишний текст.
ty = количество ячеек для текста.
z = выравнивание текста. Если не введено, или равно 0, то текст выровняется о левому краю , если будет равно 1 текст будет в центре, если будет равно 2, выравнивание будет по правому краю.
Теперь вы можете рисовать метки, а как насчет снаряжения? Это могло быть стимулом.
В Window_Base, если еще один метод:
Эта функция вырисовывает предмет. Она должна быть всегда определена. А как же мы сделаем это? Хм…мы хотим оборудовать актера, таким образом мы должны призвать информацию о предмете, оружии или броне.
Чтобы вызвать данные оружия, вы можете воспользоваться функцией $data_weapons[x], где x id оружия. Теперь оружие всегда изменяется так когда оружие равняется оружию актера. Мы получили эту функцию из Game_Actor. Именно это делает @actor запросом. Чтобы получить оружия актеров нам нужна @actor.weapon_id. Мы должны поместить то вместо ‘x’.
И так, строка будет выглядеть у нас так $data_weapons[@actor.weapon_id] ее мы должны вставить в item. Тогда, x, y тоже самое, а точнее прежнее местонхождение текста.
Это хорошо но как на счет брони? За нее отвечают armor1, armor2, armor3, и armor4. И что же это означает? Вы узнаете это посредством эксперимента, который вы проведете уже без меня. Я уверен что вы не тупы и можете проделать это самостоятельно.
Создание и проверка сценария .
Теперь когда вы научились делать такие окна вы можете провести эксперимент с ними. В третей главе я научу вас как добавлять предметы к вашему сценарию и при этом не обращаться к стандартным объектам.
Для того чтобы нормально ориентироваться, вам нужно будет знать следующее:
-Урок 1
-Знать как пишутся сцены
-Знать о наследовании
-Создать основу окна статуса
Сделать сцену это тоже самое что создать окно… . Вы должны создать новое окно, но вы можете его и не создавать, вы можете воспользоваться вашим предыдущем окном, но я советую сам создавать новое окно на каждый урок .
Для упрощения мы воспользуемся нашим предыдущем окном Scene_Name. И так, начнем с строки:
Code:
class Scene_Name
Теперь вы инициализировали все окна… но вы не должны делать это с каждой сценой, это делается только с определенными сценами. С какими? Это уже зависит от того что это за скрипт. Если вы будете делать переключатель с актера на актера, вам это понадобиться. Но в этом случае вы должны обращаться к индексу в скрипте , а не к актеру.
Code:
def initialize(actor_index = 0)
@actor_index = actor_index
end
Это все хорошо, но… у нас нет актера с ID 0Значит скрипт автоматически поставит значение в 1. Следовательно при использовании I.D. долен быть вывод определенного актера на экран, а точнее информации о нем? Хорошо, мы определим это в окне. Так, давайте отступим от правил в первой сцене.
Code:
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 первого актера у вас. Почему? Это случается в сцене. Как насчет цикла? Хм…а де но заканчивается? Очень скоро, вот ответ.
И так, наше окно выглядит так:
Code:
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
Вернемся назад к нашей сцене.
Code:
class Scene_Name
def initialize(actor_index = 0)
@actor_index = actor_index
end
Теперь нам нужно создать основной метод. Каждая сцена должна иметь метод! Это довольна крутая сцена поэтому мы должны инициализировать метод. Это идентифицирует материал. Теперь я покажу как это должно быть. Это очень важно.
Code:
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
Ладно, я опишу вам функции.
Code:
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’, вы должны его идентифицировать следующей вставкой.
Code:
def update
@name_window.update
end
Это уберет ошибку, если вы поместите в конец сценария ‘end’ и закончите тем самым скрипт. Давайте же добавим нашей сценку дополнительную структуру. Сделаем та что при нажатии на клавишу мы вернемся к карте. Довайте начнем.
Code:
if Input.trigger?(Input::B) #Есди нажата В
$game_system.se_play($data_system.cancel_se) #Начнет играть игровая музыка.
$scene = Scene_Map.new #И мы вернемся к карте
end
Code:
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. А точнее все.
Code:
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, вы найдете еще несколько элементов. Вот фактически все:
Code:
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
Отлично, но вы должны написать материалы к разным словам, (обычно это ‘Имя:’, ‘Класс:’, ‘Снаряжение’, и др).
Это не сложно. Вы можете создать свой текст. Это сделать можно вот так:
Code:
self.contents.draw_text(x, y, tx, ty, text, z)
y = месторасположение слева на право от того где текст.
tx = длинна текста. Если длинна текста будет больше этого значения, то редактор просто обрежет лишний текст.
ty = количество ячеек для текста.
z = выравнивание текста. Если не введено, или равно 0, то текст выровняется о левому краю , если будет равно 1 текст будет в центре, если будет равно 2, выравнивание будет по правому краю.
Теперь вы можете рисовать метки, а как насчет снаряжения? Это могло быть стимулом.
В Window_Base, если еще один метод:
Code:
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
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- HoF
- Посетитель
-
19 года 1 нед. назад #5570
от HoF
HoF ответил в теме Скриптинг урок 2, Leon перевод by gromdron
Мое мнение ты знаешь. Статья специализирована для профи. А людям надо с нуля.
А вообще - спасибо. Спасибо, что стараешься, хочешь людям и что меня подбиваешь на энтузиазм. Спасибо за то что хороший человек
А вообще - спасибо. Спасибо, что стараешься, хочешь людям и что меня подбиваешь на энтузиазм. Спасибо за то что хороший человек
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.087 секунд
