Создание RTS игры
[ Поделиться ]
[ Спасибо! ]
|
19:53
Привет всем! Сейчас я расскажу вам как сделать простую ртс-ку (РТС - 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);
}
Здесь всё легко, вот то же самое только по Русски:
если нам нужно рисовать прямоугольник, то мы выбираем прозрачность и рисуем прямоугольник
вот аргументы draw_rectangle_color(x1,y1,x2,y2,color 1, color 2, color 3, color 4, outline)
outline - будет ли рисоваться только грань (true) или залитый прямоугольник (false)
Мы нашли новое слово - константа, это заменённое словом числовое выражение или код, в гамаке есть встроенные константы:
true (правда) - 1
false (ложь) - 0
pi - 3.1415...
Ну вот, разобрались, теперь нам нужно создать новый объект - родительский объект, который будет подключаться к дочерним. Назовём его par (чтобы сменить имя нужно менять код в событие шага контрольного объекта), в событие создания пишем:
Code
selected=false; //Вот и наша переменная, выбран ли объект
Это всё. Теперь нам конечно же нужен объект, который может передвигаться, называем его objTest, в событие создания пишем код:
Code
gox=x; //Куда идти по х...
goy=y; //по у
selected=false; //Мы не выбраны =)
object_set_parent(self,par) //Вот и выбор родителя
Новое действие:
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;
}
distance_to_point(х,у) - узнаёт расстояние до точки
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)
}
draw_circle_color(x,y,radius,color 1,color 2,outline) - рисуем круг с радиусом radius
Всё! Теперь создаём новую комнату и ставим несколько объектов теста (objTest), родительский объект (par) и контроллер (objControl)
Обозначения:
гамак: Game Maker
ЛКМ - Левая Кнопка Мыши
ПКМ - Правая Кнопка Мыши
За остальными уроками пишем:
Mail: grisha.ykpon4uk@gmail.com , gmod_man_grisha@mail.ru
Skype: grisha_super
А вот и исходник: http://rghost.ru/14256781
Категория: Game Maker | Просмотров: 10752 | Добавил: MrIncrof (08.10.2012) | Рейтинг: 0.0/0 |
HTML ссылка на материал: BB ссылка на материал: |
Всего комментариев: 2 | |
| |