Категории раздела
Программирования [69]
разные языки программирования
Создания игр [10]
Статьи о создании игр
Движки [0]
Статьи о программах для создания игр
Игры [1]
Статьи об играх
Приложения (софт) [0]
Програми в помощь игроделу
Главная » Статьи » Создания игр

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) Запустите проект и поводите мышкой по полю.
Категория: Создания игр | Добавил: graimp (17.11.2011)
Просмотров: 586 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Наш опрос
На каком языке лучше программировать
Всего ответов: 38
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0