Ок, большинство программ обучающих скриптингу или скриптописанию,изучающего материал написаны как учебник, и запутывают большинство людей. Этоттуториал совсем непохож на них. Я расскажу все, что должен знать скриптер и даже буду пдробно уходить в нкоторые темы, но все это будет происходить по моей методике.
В первой главе мы будем проходить основу скриптинга и некоторые другие темы:
- Окна
- Рисунок в окне
- Основные функции управляющие окном
- Что такое методы, классы, и супер классы.
Описание руби: обьект ориентирует программа.
Определение Леона: игра в роли Бога , управляя знаками *$ ^ создовать программу. (Не волнуйтесь! Это легко!)
Дейтвительно ли большое различие определений? Нет. Я буду учить, как использовать ориентируемое программирование объекта , но своими словами...
В основном, все в скриптинге руби должно быть определено, прежде чем вы будете работать. Хорошо ... как я определяю что-нибудь? вы наверное задаете себе этот вопрос? Хороший вопрос, и очень легкий.
Если когда-то вы учились алгебре вы знаете что:
X = 7
X+3=10
Теперь я сделаю из этого скрипт. Давайте взьмем это в пример, я сделаю на скорую руку.
class Bogus
def initialize
@your_knowledge = 0
end
def your_knowledge_of_ruby
@chapter_read = 1
@your_knowledge += @chapter_read
end
end
Хорошо, признаки здесь могут казаться немного разными, но это - в основном однои то же. Вместо этого компьютеры отличимы от нас. Признаки здесь весьма просты:
class - означает id названия скрипта.
def - это, определяет метод в пределах скрипта.
Символ @ перед your_knowledge означает, что это - переменная.
Я думаю вы знаете что означает = . Это устаовка переменной в число.
И + = означает добовление числа\переменной к числу\переменной.
Теперь, когда есть демонстрация того, как Руби должен определить вещи прежде, чем они могут использоваться, давайте пойдем дальше к фактическому определению вещей, и структуры скрипта окна/сцены BASIC.
Ваш скрипт окна/сцены Basic может быть подомен CMS. Ах ... CMS... стандартный бок обучающей прораммы по скриптингу на первых уроках. Приличная CMS (не любят в RmXP) берет значние больше чем задание. Она также требует задание, как покзывая какртинки, добовляя информацию и т.д. Об этомбудет расказано позже, но поа вернемся к скрипту
Мы фактически начнем с 1 скрипта окна со сценой. Это может показаться нудным, но каждый большой скрипт начинается с маленького, нудного шага...
Комбинация окна/сцены будет показывать окно статуса героя. Основа это понимать как выводить все на экран.
Это не сложно.
Windows имеет 3 супер класса:
Window_Base - окно выводящее все на экран. Без индекса.
Window_Selectable - выбираемое окно с индексом.
Window_Command информации ничьи -супер класс который позволяет различные особенности чем Window_Selectable, типа колонок и дополнительных рядов. Супер класс- класс призывал в другом классе, чтобы вывести кроме того информацию. Вот - основная установка:
class Window_Name Window_Type
def initialize
super(x, y, lx, ly)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
end
end
Довайте рассотрим данный скрипт.
Линия 1:
class Window_Name Window_Type
Каждый скрипт должен быть определен как класс с названием. Это было сделано в 1 линии.
Теперь
это средство призыва супер класса.
Линия 2:
Определяет метод инициализации. Инициализация означает, что это настраивает все в том окне. Переменные, определения и т.д. В этом случае, это определяет следующие линии:
Линия 3:
super определяет строку и вызывет супер переменную 1. (x, y, lx, ly) - измерения окна. Первые два - местоположение окна, вторые два - стороны окна, в этом запросе: (положение справа0, положение 0 внизу, ширина окна, высота окна) Неправда ли просто?
Линия 4:
self.contents = Bitmap.new(width - 32, height - 32)
это идентифицирует то, чему self.contents является. Сам только означает окно (в этом случае).
содержание - то, что - в окне. В этом случае, это называет новый Битовый массив. (Bitmap.new соответственно), теперь, ширина - 32 и высота - 32. содержание окна будет иметь 16 x 16 границами все вокруг внутренней части границы окна. Все это учитывая границу!
Линии 5 и 6:
self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
self.contents вы должны знать то что является этим окном!
.font.name изменяет название,
.font.size изменяет размер. Устанавливая их равняются переменной в Главном, это будет стандартизировано с другими окнами в игре.
Линии 7 и 8:
end
end
Если вы делаете что-то товы должны закончить это. Вот тогда-то и используется end.
Мы идентифицировали окно. Хорошо. Что дальше? А дальше зависит от окна. В нашем случае, давайте добавим кое-что новое. Между линиями 6 и 7, вставьте слово refresh, у нас получиться нечто такое:
class Window_Name Window_Type
def initialize
super(x, y, lx, ly)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
refresh
end
end
Теперь, если Вы задаетесь вопросом, это слово делает. Хорошо! Я поместил его туда по 2 причинам.
1: я поместил слово в эту локацию до того как задание выполниться потому что слово очищают строку
2: таким образом это вызывает новый метод. (методы должны быть определены).
Куда поместить новый метод? Перед окончанием класса. Так что мы должны вывести в этом окне? Пержде чем вывести что-нибудь надо сначало определить параметры окна. Под этим подразумевается (x, y, lx, ly). Давайте сделаем окно на весь экран. Что-бы сделать это вы должны установить окно в 0, 0 и сделать окно 640 x 480. Вы конечно можете знать как это сделать, но все же давайте ассмотрим это.
Это будет выглядеть так (0, 0, 640, 480). Помните почему? Отлично, потому что x = положение правого верхнего и ниженего углов, y = положение нижнего верхнего левых углов, lx - длинна слева направо, а ly - высота сверх до низу. Это даст намокно в полный экран. Эли вы проверите скрипт то он выдаст ошибку: неопределенная местная переменная или метод reresh ..
Давайте сделаем изменение в скрпте. Он будет похож на тот что мы уже писали. Фактически они одинаковы.
class Window_Name Window_Base
def initialize
super(x, y, lx, ly)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize
refresh
end
end
Видите изменения? Единственное различие - супер класс. Это изменение от поддельного до рельного. От этого будет польза, но у нас еще есть нерешенная ошибка с refresh ?
Это может показаться сложным по изучению, но легким в установке. Давайте определим refresh как переменную или метод. Давате определим как метод, потому что вы еще незнаете про переменные.
Это просто:
def refresh
self.contents.clear
self.contents.draw_text(0, 0, 600, 32, “Это тест выших скриптовых способностей.”
self.contents.draw_text(0, 32, 600, 32, “Очевидно вы узнали что-то новое!”
end
Если вы незнаете куда это встявлять, то специально для вас я выведу скрипт который у нас должен получиться:
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, “Это тест выших скриптовых способностей.”
self.contents.draw_text(0, 32, 600, 32, “Очевидно вы узнали что-то новое!”
end
end
Теперь я отвечу на вопрос почему же все-таки там поставил этот метод, а ответ будет такой: вы неможете определить что-то из класса. Вы должны знать, что к методу вы должны обращаться чтобы он выполнил. Если бы вы удалили слово refresh из метода инициализации, окно было бы пустым.
Теперь, в случае, использования команды Call Script , напечатайте это: Window_Name.new и скрипт должен работать! Но он будет работать несколько секунд, о том как заставить его работать долго я расскажу в слдующей главе.
Coming soon...(Продолжение следует)