Создание простейшей стратегии на GM для полных новичков
| |
MrIncrof | Дата: Понедельник, 29 Августа 2011, 09:51 | Сообщение # 1 |
Lite Programmer
Сейчас нет на сайте
| Привет всем! Сейчас я расскажу вам как сделать простую ртс-ку (РТС - 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, он означает что действие будет переходить к себе Не бойтесь, ещё немного осталось, в событие шага: Code if distance_to_point(gox,goy) > 20 { mp_potential_step(gox,goy,6,solid); } if(selected=true) && mouse_check_button_pressed(mb_right) { gox=mouse_x; goy=mouse_y; } Code distance_to_point(х,у) - узнаёт расстояние до точки Code mp_potential_step(х,у,speed,checkall) , speed - скорость, checkall - обходить всех (true) или нет (false) тут тоже всё просто. И последнее - рисование: Code draw_self() //рисуем себя, если не написать, рисоваться объест не будет! (в gm8.0 не работает!) if selected=true { draw_circle_color(x,y,16,c_green,c_green,1) }
Code draw_circle_color(x,y,radius,color 1,color 2,outline) - рисуем круг с радиусом radius Всё! Теперь создаём новую комнату и ставим несколько объектов теста (objTest), родительский объект (par) и контроллер (objControl) Вот то что у нас получилось: Вот исходник: http://narod.ru/disk/23258019001/Strategy.gm81.html Обозначения: гамак: Game Maker ЛКМ - Левая Кнопка Мыши ПКМ - Правая Кнопка Мыши
Сообщение отредактировал 4aBo - Понедельник, 29 Августа 2011, 12:03 |
|
| |
GameMix | Дата: Понедельник, 29 Августа 2011, 10:25 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Крутая статья. Вот такие статьи и пиши. А не про то, "что такое переменные" =)
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
Suirtimid | Дата: Понедельник, 29 Августа 2011, 11:27 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| 4aBo, Былоб неплохо, еслиб к уроку прилагался файлик с примером того, что может получиться из этого урока. А так не понятно, имеет смысл читать или нет...
бложек About Vampires Macro Evil Sun EvilMoon_Android
|
|
| |
MrIncrof | Дата: Понедельник, 29 Августа 2011, 12:03 | Сообщение # 4 |
Lite Programmer
Сейчас нет на сайте
| Добавил скриншот и пример
|
|
| |
Hommme | Дата: Понедельник, 29 Августа 2011, 14:03 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| 4aBo, пример не работает, а если быть точным то когда запускаешь, выдает кучу ошибок. ну во всяком случае у меня p.s. я на GM 8.1
|
|
| |
MrIncrof | Дата: Понедельник, 29 Августа 2011, 14:52 | Сообщение # 6 |
Lite Programmer
Сейчас нет на сайте
| Hommme, не знаю, у меня всё работает
|
|
| |
GameMix | Дата: Понедельник, 29 Августа 2011, 14:55 | Сообщение # 7 |
старожил
Сейчас нет на сайте
| 4aBo, у тебя точно GameMaker 8.1? В 8.1 баги. У тебя, скорее всего 8.0.
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
MrIncrof | Дата: Понедельник, 29 Августа 2011, 14:58 | Сообщение # 8 |
Lite Programmer
Сейчас нет на сайте
| аТнОтХоАн, ГМ 8.1, 100%, ведь функция draw_self(); есть только в 8.1
Сообщение отредактировал 4aBo - Понедельник, 29 Августа 2011, 15:00 |
|
| |
Лер_да_Рим | Дата: Понедельник, 29 Августа 2011, 15:02 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Сделай на 8.0, а то у многих именно он и будет в дальнейшем именно он.
Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.
|
|
| |
|