Среда, 15 Августа 2018, 14:38

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [309]
Статьи об общих понятиях связанных с созданием игр.
Программирование [69]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [123]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [4]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [81]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [63]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Вам хотелось бы стать модератором GcUp.ru?
Всего ответов: 1990
Главная » Статьи » Движки и Гейммейкеры

GML: Переменные, арифметические операции.
Любая программа, а значит и игра, состоит из двух частей: переменные (данные) и операторы (команды) для работы с переменными. Переменная - это какое-либо значение или число, хранящееся в памяти компьютера, а в некоторых языках программирования (в том числе и GML) переменной может быть и строка символов, например "Антарктида". Каждая созданная программистом переменная должна иметь свое имя, которым программист будет пользоваться при написании программы.

Имя переменной может содержать буквы латинского алфавита, цифры и знак подчеркивания "_", но начинаться имя переменной может только на букву. Например:
health_1 - допустимое имя
x - допустимое
_y - не допустимое, т.к. начинается не на букву
read! - не допустимое (используется запрещенный символ "!")
1x - не допустимое, т.к. начинается не на букву

Теперь рассмотрим оператор присваивания. Он позволяет изменять значение переменной и в коде программы обозначается как знак равенства "=" и изменяет значение переменной, стоящей слева от него, на значение, стоящее справа.

Итак, вот код небольшого скрипта:

{
a=5;
b='Game';
b=a;
}


Разберем его подробно:
Весь код должен находиться в фигурных скобках "{}". Они нужны для обозначения блока команд скрипта. Далее идет строка "a=5;", в которой создается переменная с именем "a", содержащая число 5. Так же в этой строке есть символ ";", которым желательно заканчивать каждое выражение. В следующей строке создается переменная "b", содержащая строку "Game". В предпоследней строке переменной "b" присваивается значение переменной "a". В итоге, после выполнения данного скрипта, будет создано две переменные, содержащие число 5.

Рассмотрим следующий скрипт:

{
a=b;
}


Этот код работать не будет и выдаст ошибку, потому что, создается две переменные "a" и "b", но переменной "b" еще не присвоено значение и по этому оператор присваивания не может изменить переменную "a". Но этой ошибки можно избежать: Откройте в Game maker'е окно "Глобальные игровые настройки" и на вкладке "Ошибки" поставьте галочку для "Обращаться с не инициализированными переменными как с 0". Теперь, когда будет создаваться переменная, ей сразу будет присвоено число 0, а значит вышеприведенный код не выдаст ошибки и в результате его работы будет создано две переменные со значением 0.

Есть еще несколько разновидностей оператора присваивания:
a+=b - к переменной "a" прибавляет переменную "b"
a-=b - вычитает из "a" переменную "b"
a*=b - умножает "a" на "b"
a/=b - делит "a" на "b"

Вот пример использования этих операторов:

{
a=0;
b=5;
a+=b; //теперь "a" равно 5
b*=a; //теперь "b" равно 25
b/=2; //теперь "b" равно 12.5
}


Для работы с переменными еще используются арифметические операции: сложение, вычитание, умножение, деление, деление без остатка и вычисление остатка от деления. Обозначаются как"+", "-", "*", "/", "div" и "mod".
Пример:

{
a=5;
b=6;
c=a+b;
a=c*b-b;
a-=(b+c)/(b-c+6);
c=a mod 5;
}


Круглые скобки определяют приоритет содержащегося в них выражения. Выражение, находящееся в скобках выполнится в первую очередь, а потом уже все остальные.

В Game Maker'е скрипты выполняются в качестве действия на событие объекта, а это значит, что один скрипт может выполняться для нескольких объектов. Объясню на простом примере какие это открывает возможности и как это влияет на объекты:
У нас есть два объекта - "ball" и "sky", к каждому из них по одному разу выполнится следующий скрипт:

{
k=5;
}


Всего будет создано две разные переменные с именем "k", но находиться они будут в разных местах: одна переменная "внутри" объекта "ball", а другая в объекте "sky". Теперь выполним следующий скрипт для объекта "ball":

{
k+=1;
}


В результате изменится только одна переменная, находящаяся объекте "ball", а переменная "k", находящаяся в объекте "sky", не будет изменена, потому что скрипт был выполнен только для объекта "ball". Для того, чтобы, выполняя скрипт для объекта "ball", повлиять на переменную, находящуюся в объекте "sky", перед именем этой переменной надо приписать имя нужного объекта и точку вот таким образом:

{
sky.k+=1;
}


Теперь если выполнить этот скрипт для объекта "ball", изменится только переменная, находящаяся внутри объекта "sky". Если в комнате присутствует сразу несколько объектов "sky" и во всех них есть своя переменная "k", то изменится переменная только в одном из этих объектов. В каком именно объекте "sky" изменить переменную - решает компьютер и, скорее всего, он выберет для этого тот объект, который был создан раньше всех.

Некоторые переменные в объектах уже созданы и они могут влиять на сам объект. Например в каждом объекте есть переменная "x", которая хранит координату объекта по горизонтали. Если изменить эту переменную, то изменится и положение самого объекта. Есть и аналогичная переменная "y" с координатой по вертикали.
Внимание! Оси координат в Game Maker направлены не так, как принято в геометрии: тут ось Y направлена вниз, а начало координат находится в левом верхнем углу окна.

Вот еще некоторые наиболее необходимые переменные объектов:
id - индивидуальный номер объекта. Изменять нельзя, он используется только для обращения к объекту по его номеру (иногда так к нему обращаться удобнее, чем по имени).
depth - слой, на котором рисуется объект. Изменяйте эту переменную, чтобы объект рисовался перед или за другими объектами.
image_alpha - прозрачность спрайта объекта. Может быть любое значение от 0 до 1, где 0 - это полностью прозрачный спрайт, а 1 - не прозрачный. Например, присвойте этой переменной значение 0.5, чтобы спрайт объекта стал полупрозрачным.
image_angle - угол наклона спрайта объекта в градусах.
image_xscale - относительный размер спрайта объекта по горизонтали. 100%-й масштаб равен 1.
image_yscale - то-же по вертикали.
xstart - x координата, в которой был создан объект.
ystart - y координата.
Более полный список переменных можно посмотреть в "Скрипты"->"Показать встроенные переменные".

Также, кроме переменных внутри объектов, есть и глобальные переменные. Чтобы упростить понимание сути глобальных переменных, представьте объект (или некий контейнер), который существует в течении всей игры, содержит в себе стандартные и пользовательские переменные и называется "global". Обращаться с ним как с объектом нельзя, да и стандартные переменные у него другие. Глобальные переменные имеют преимущества перед переменными, находящимися внутри объектов: к ним, зачастую, легче обращаться и они существуют в течении всей игры, когда переменные объектов могут быть удалены вместе со своими объектами. Обращаться к глобальным переменным очень просто: перед названием переменной надо написать "global.", например:

{
global.f=5; //создана глобальная переменная.
global.a=global.f*2
}


Вот некоторые стандартные глобальные переменные (к ним можно обращаться без приставки "global."):
background_color - код цвета фона.
current_day - эта и несколько следующих переменных хранят информацию о дате и времени.
current_hour
current_minute
current_month
current_second
current_time
current_weekday
current_year
fps - количество кадров в секунду (frames per second)
mouse_x - x координата положения курсора мыши.
mouse_y - y координата положения курсора мыши.
Более полный список глобальных переменных можно посмотреть в "Скрипты"->"Показать встроенные переменные".

Пример 1_1
В этом примере рассматривается влияние на переменные объекта другим объектом.
1) Загрузите в проект два разных спрайта и назовите их "sp1" и "sp2".
2) Создайте два объекта "obj1" и "obj2", затем присвойте им спрайты "sp1" и "sp2" соответственно.
3) Создайте комнату и разместите на ней два экземпляра объекта "obj1" и один экземпляр объекта "obj2"
4) Создайте скрипт с именем "sc1", содержащий код:

{
sp2.x+=4; //двигаем объект "obj2" вправо
x-=4; //двигаем в право объект, для которого выполняется этот скрипт
}


5) Для объекта "obj1" добавьте событие "Мышь - левая кнопка" и, в качестве действия на него, выберите выполнение скрипта "sc1" (вкладка "control", действие "Execute Script", в появившемся окне в поле "script" напишите "sc1" и нажмите ОК).
6) Запустите проект и нажимайте на объекты "obj1"

Пример 1_2
Этот пример демонстрирует работу с глобальными переменными.
1) Создайте спрайт "sp1".
2) Создайте объект "obj1" и примените к нему спрайт "sp1".
3) Создайте комнату и разместите в ней несколько объектов "obj1"
4) В свойствах комнаты выберите вкладку "Установки" и нажмите кнопку "Создать код". В появившемся окне разместите следующий скрипт:

{
global.xc=50; //создание глобальной переменной "xc"
global.yc=50; //создание глобальной переменной "yc"
}


Этот скрипт выполнится один раз при создании комнаты.
5) Создайте скрипт "sc1" с кодом:

{
x=global.xc; //перемещает объект
y=global.yc;
global.xc+=10; //изменяет глобальную переменную
global.yc+=10;
}


6) Для объекта "obj1" добавьте событие "Мышь - левая кнопка" и, в качестве действия на него, выберите выполнение скрипта "sc1".
7) Запустите проект и нажимайте на объекты "obj1"

Пример 1_3
Демонстрирует работу со стандартными переменными объектов.
1) Создайте спрайт "sp1".
2) Создайте объект "obj1" и примените к нему спрайт "sp1".
3) Создайте комнату и разместите в ней один экземпляр объекта "obj1"
4) Создайте скрипт "sc1" с кодом:

{
x=mouse_x;
y=mouse_y;
}


5) Для объекта "obj1" добавьте событие "Шаг - Шаг" и, в качестве действия на него, выберите выполнение скрипта "sc1".
6) Запустите проект и поводите мышкой по полю.
Категория: Движки и Гейммейкеры | Добавил: Apati (22 Августа 2011)
Просмотров: 6141 | Комментарии: 7 | Рейтинг: 5.0/2 |
Теги: Game Maker, GML, Программирование, Game Maker Language, gamemaker, основы
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «GML: Переменные, арифметические операции.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 7
+0-
3 GameMix   (22 Августа 2011 16:10)
GameMixApati, выдели код специальным тегом. Так код лучше читается smile

Сейчас уроки по GML не для новичков - редкость.

+0-
4 Apati   (22 Августа 2011 16:21)
ApatiА каким? Я пытался через code, но не получилось.

+0-
5 Apati   (22 Августа 2011 16:35)
ApatiВсе, разобрался smile

+-2-
6 Transced   (23 Августа 2011 11:48)
Transcedпросто он сам выучил немного язык и сразу уроки писать))

+0-
7 Apati   (23 Августа 2011 16:11)
ApatiС чего ты взял, что ГМЛ я знаю немного?
И еще ты писал, что статья безалаберна. Знаешь, критика должна быть аргументированной, иначе это просто словесный понос. Скажи, чем она безалаберна?

+-2-
1 Transced   (22 Августа 2011 14:08)
TranscedСтатья безалаберна
Люди Справка Рулит))) cool

+0-
2 Apati   (22 Августа 2011 14:21)
ApatiЭта статья для полных нубов, не знакомых с программированием. А в справке не все так подробно разжевывается.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Amp II Game Engine
  • EasyRPG
  • IsoEasyEditor
  • StemCell Game Engine
  • RTS Creator
  • UkiRAD
  • EF-12: Fighting Game Maker
  • OpenSceneGraph
  • SpriteCraft
  • Doom Classic iOS
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг