Понедельник, 25 Ноября 2024, 16:49

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Создание простейшей стратегии на 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, не знаю, у меня всё работает wink
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, а то у многих именно он и будет в дальнейшем именно он.

Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг