Создание простейшей стратегии на GM для полных новичков
Привет всем! Сейчас я расскажу вам как сделать простую ртс-ку (РТС - RTS - Real Time Strategy то есть стратегия в реальном времени) открываем гамак 8.1 (на 8.0 работоспособность не гарантируется) создаём объект objControl, то есть это будет наш главный объект создаём событие создания (Create) Добавить событие => Создание (Add event => Create) событие создание делается всего один раз - при создании, нажимаем на вкладку control в правом вертикальном меню и нажимаем ПКМ по Execute code (Выполнить код) и пишем код (лучше всего не копировать код, а писать его самому, так гораздо легче запомнить):
Code
startx=0; //Объявляем переменную начала точки по х starty=0; //Объявляем переменную начала точки по у draw_rect=false; //Не рисуем прямоугольник выбора
Переменная: часть памяти, которая содержат информацию. Они имеют своё имя, с помощью которого Вы можете обратиться к ним. Переменные в GML могут содержать реальное число или строку. К примеру, стол - это переменная, деревянный или стеклянный - значение Теперь создаём событие шага (Step, Add Event = > Step) и выполняем операцию заново (нажимаем ПКМ по Execute code (Выполнить код)):
Code
if mouse_check_button_pressed(mb_left) //Если ЛКМ нажата { draw_rect=true; //Мы рисуем прямоугольник startx=mouse_x; //Стартовая х позиция = положение х мыши starty=mouse_y; //Стартовая у позиция = положение у мыши with all selected=false; //Это пока не объявленная переменная, что она будет делать мы узнаем позже }
if mouse_check_button_released(mb_left) //Если ЛКМ отпущенна { draw_rect=false; //Мы не рисуем прямоугольник for(i=0;i<=instance_number(par);i+=1) //Читайте про цикл for ниже { ii=instance_find(par,i); //Мы ищем пока не сделанный объект if(collision_rectangle(startx,starty,mouse_x,mouse_y,ii,true,false)) //Вот наш прямоугольник коллизии (соприкосновения) { ii.selected=true; } } }
Код большой и сложный, пока мы узнаем про оператор условия if: Код с if выполняется так:
Code
if (условие) { действие }
также в нём может быть оператор else (иначе), пример:
Code
if (условие) { действие } else { действие 2 }
а for - это оператор цикла, он выполняется так:
Code
for (<переменная> ; <выражение> ;<действие переменной>) { <действия> }
оператор for очень мощная вещь, он очень помогает в трудных ситуациях
Оператор - встроенные в ЯП действия, например, самая распространённая это int, if, else, string, switch, for, case, break, exit, и т.д и т.п.
Теперь также создаём событие рисования (draw) и таким же путём пишем:
Code
if draw_rect=true { alpha=.8; draw_rectangle_color(startx,starty,mouse_x,mouse_y,c_green,c_green,c_green,c_green,true); }
Здесь всё легко, вот то же самое только по Русски: если нам нужно рисовать прямоугольник, то мы выбираем прозрачность и рисуем прямоугольник вот аргументы
Code
draw_rectangle_color(x1,y1,x2,y2,color 1, color 2, color 3, color 4, outline)
outline - будет ли рисоваться только грань (true) или залитый прямоугольник (false) Мы нашли новое слово - константа, это заменённое словом числовое выражение или код, в гамаке есть встроенные константы:
Code
true (правда) - 1 false (ложь) - 0 pi - 3.1415...
Ну вот, разобрались, теперь нам нужно создать новый объект - родительский объект, который будет подключаться к дочерним. Назовём его par (чтобы сменить имя нужно менять код в событие шага контрольного объекта), в событие создания пишем:
Code
selected=false; //Вот и наша переменная, выбран ли объект
Это всё. Теперь нам конечно же нужен объект, который может передвигаться, называем его objTest, в событие создания пишем код:
Code
gox=x; //Куда идти по х... goy=y; //по у selected=false; //Мы не выбраны =) object_set_parent(self,par) //Вот и выбор родителя
Новое действие:
Code
object_set_parent(ind,obj)
- Устанавливает родительский объект для объекта с именем ind. И новый оператор: self, он означает что действие будет переходить к себе Не бойтесь, ещё немного осталось, в событие шага:
, speed - скорость, checkall - обходить всех (true) или нет (false) тут тоже всё просто. И последнее - рисование:
Code
draw_self() //рисуем себя, если не написать, рисоваться объест не будет! (в gm8.0 не работает!) if selected=true { draw_circle_color(x,y,16,c_green,c_green,1) }
- рисуем круг с радиусом radius Всё! Теперь создаём новую комнату и ставим несколько объектов теста (objTest), родительский объект (par) и контроллер (objControl)
Вот исходник: http://narod.ru/disk/23258019001/Strategy.gm81.html Обозначения: гамак: Game Maker ЛКМ - Левая Кнопка Мыши ПКМ - Правая Кнопка Мыши