Собственно, пора начать без лишних предисловий. Для начала разберемся, какие спрайты нам нужны: spr_ball (вместо птичек - шарики) spr_enemy (враг) Не рисуйте круг, иначе не увидите его физики (точнее не всю физику)! spr wall (тут стена, потом будем менять). Далее создаем аналогичные объекты(obj_ball,obj_enemy,obj_wall) Заходим к мячику, в создание пишем:
Теперь создаем событие "глобальная правая кнопка отпущена", пишем:
Код
if (varDrag = true) {//Если зажим активирован... varDist = distance_to_point(mouse_x, mouse_y) / 5;//Скорость полета равна расстоянию до курсора.. if varDist>15 varDist=15;//Ограничение на скорость (не больше 15) motion_add(point_direction(x, y, mouse_x, mouse_y), varDist);//Направление равно месту нахождения мыши, скорость равна расстоянию до мыши/5. Запуск! varDrag = false;//Дезактивируем зажим. }
Надеюсь вы поняли этот код, так как для новичков он довольно сложен. Так-с, почти закончили с мячиком. Добавим столкновение с врагом, пишем:
Код
varDir = point_direction(x, y, other.x, other.y);//Направление равно месту нахождения врага... with (other) {//Действие для другого объекта (врага) motion_add(other.varDir, other.speed/2);//Отскок другого объекта если возможно. Скорость отскока в уменьшается в 2 раза (значение не волнует) } move_bounce_all(true);//Отскок мяча vspeed = vspeed / 2;//Уменьшаем в 2 раза вертикальную... hspeed = hspeed * 0.50;//и горизонтальную скорость.
Хух.. С игроком закончили. Переходим к врагу, пишем в создание:
Код
hp=100;//Жизнь равна 100
gravity = 0.2;//Гравитация=0.2 gravity_direction = 270;//Гравитация тянет вниз varDrag = false;//Это уже не зажим, а, скорее переменная для столкновения с игроком varDir=0;//Направление отскока в случае столкновения с игроком. rot=0//Переменная поможет нам с физикой
В step пишем мега-сложный код:
Код
if hp<=0 {instance_destroy()}//Если жизнь меньше или равна нулю - уничтожение
И добавим столкновение с игроком. Пишем до боли знакомый код (или не знакомый?)
Код
varDir = point_direction(x, y, other.x, other.y);//направление равно стороне столкновения с игроком with (other) {//Для другого объекта... motion_add(other.varDir, other.speed/2);//Отскок, с уменьшенной в 2 раза скоростью игрока и его направлением. }
move_bounce_all(true);//Отскок от любого объекта (твердого или нет) vspeed = vspeed / 2;//Уменьшаем в 2 раза вертикальную... hspeed = hspeed * 0.50;//И горизонтальную скорости
hp-=other.varDir/10;//Отнимаем столько жизни, скольки равна скорость игрока деленная на 10
И наконец то заканчиваем. Пишем последний код в рисовании:
Код
draw_sprite_ext(sprite_index,image_index,x,y, image_xscale,image_yscale,rot,noone,image_alpha)//Рисуем спрайт врага, возможность изменения поворота есть (при столкновении с игрком или стеной).
Только у врага измените значение 0.90 на 0.50. Этот код служит для остановки при столкновении.
Я понимаю, что подобную статью писал arkady, однако тут у врагов есть жизни и физика. А главное присутствуют комментарии к уроку (надеюсь, эти изменения в лучшую сторону). До свидания!
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «"Angry birds" физика в Game Maker. Враги. ч.1», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Урок может и про злых птичек, но тут опять же, недоделка, можно было дописать ограничения, к примеру на направление запуска птицы, запрет на повторное использование птиц и подобное. Вообще сыро, лучше доделать статью про злых птиц до конца чем брать и корректировать чужое....