Mouse Event for Glob Left Button: if !instance_exists(o_joystick) // Если нет джостика {instance_create(mouse_x,mouse_y,o_joystick);}; // То создаём его
o_joystick
Create Event: maxdist = 40; // Максимальное расстояние от центра джостика instance_create(x,y,o_runner); // Создаём бегунок image_alpha = 0.5; // Делаем джойстик полупрозрачным
Step Event: dist = point_distance(x,y,mouse_x,mouse_y); // dist равна расстоянию до мыши
if dist > maxdist {dist = maxdist;}; // Проверка, чтобы dist не была больше максимального расстояния
if mouse_check_button(mb_left) // Если левая кнопка мыши зажата { direction = point_direction(x,y,mouse_x,mouse_y); // Джойстик "смотрит" на мышь o_player.speed = dist/5; // Скорость игрока равна расстоянию до мыши делённого на 5 o_player.direction = direction; // Направление игрока равно направлению джойстика };
if mouse_check_button_released(mb_left) // Если левая кнопка мыши отпущена { o_player.speed = 0; // Останавливаем игрока instance_destroy(); // Удалаем джойстик with (o_runner) // Обращаемся к бегунку {instance_destroy();}; // И удаляем его };
x = mouse_x; y = mouse_y; // Координаты равны координатам мыши
if x > xstart+lengthdir_x(o_joystick.dist,o_joystick.direction) || x < xstart+lengthdir_x(o_joystick.dist,o_joystick.direction) {x = xstart+lengthdir_x(o_joystick.dist,o_joystick.direction);}; if y > ystart+lengthdir_y(o_joystick.dist,o_joystick.direction) || y < ystart+lengthdir_y(o_joystick.dist,o_joystick.direction) {y = ystart+lengthdir_y(o_joystick.dist,o_joystick.direction);}; // Проверка, чтобы бегунок не уходил за пределы джостика
Проблема: Не знаю как привязать к своим спрайтам. как можно привязать анимации по таким направлениям?
Не знаю как привязать к своим спрайтам. как можно привязать анимации по таким направлениям?
http://s1.uploadpics.ru/images/ZyXQbSYotl.bmp
Сделать массив с изображениями на каждые 90/4 = 22.5 градусов,
Код
walk_spr[0] = spr_walk_deg0; walk_spr[1] = spr_walk_deg22_5; walk_spr[2] = spr_walk_deg45; walk_spr[3] = spr_walk_deg67_5; // ... walk_spr[15] = spr_walk_deg337_5; // (то же самое для stand_spr и что ещё)
потом, в шаге,
Код
var d = round(direction / 22.5) mod 16; // перевод направления в индекс if (d < 0) d += 16; // на случай если направление получилось меньше 0 if (speed > 0) { sprite_index = walk_spr[d]; } else sprite_index = stand_spr[d];
P.S.: советую запастись терпением, так как рисовать по 9+ анимаций для всех объектов в игре довольно долго.
Куда вписывать названия своих спрайтов(например: s_player1, s_player2... Прошу прощения за глупые вопросы.
Ну... spr_walk_ это и есть названия спрайтов, по твоему же рисунку (spr_walk_deg0 смотрит направо, spr_walk_deg22_5 смотрит на 22.5 градусов против часовой стрелки от правой позиции, и так далее). Если что, вместо "// ..." нужно таким же образом заполнить остальные спрайты для всех углов. И для stand_spr тоже.
Когда нажимаю на o_enemy(2,3), то переменная step = false. При этом, срабатывает код в STEP у o_system. Но почему-то красным выделяются сразу все противники. Как сделать так, чтобы выбирался случайный из них, притом что они занесены в массив?
(TDS) Как сделать так чтобы когда игрок сталкивается с объектом, если я верчу его мышью не задивал стенки? Чтобы он не крутился когда затронул своим боком стенку
(TDS) Как сделать так чтобы когда игрок сталкивается с объектом, если я верчу его мышью не задивал стенки? Чтобы он не крутился когда затронул своим боком стенку
И иногда он застрявает в ней
Сделать игроку отдельную переменную, отвечающую за поворот, и использовать её при рисовании (через draw_sprite_ext или прочее), а не менять image_angle (что так же поворачивает маску столкновений объекта, позволяя застрять в стенах после поворота).
Недавно приобрел GMS и увидев встроенную физику бокс2Д появились вопросы, вот пару из них: Например при метании ножа в стену (в платформере сбоку) , как реализовать полет ножа (пробовал physics_apply_impulse(x, y, mouse_x,mouse_y, но по моему это бред.) Так же хотелось бы, чтобы нож как бы застревал в стене (как я понял, для этого используются joint-ы, т.е надо к кончику ножа прикрепить джоинт, и в столкновении со стеной сделать соединение объекта нож и стена?) И в идеале еще хотелось бы получить ответ на вопрос: При создании физического тела (как я понял нож тоже им является) выбираешь его параметры, а можно ли как-то сделать, чтобы после застревания в стене, ГГ мог запрыгнуть на этот ножик (или копье) ? За ранние спасибо, знатокам ГМ - Опыт - это то, что получаешь, не получив того, чего хотел. Новая головоломка
Сообщение отредактировал arthur33 - Среда, 02 Декабря 2015, 19:07
Есть комната, вид ,панель с хелсбаром и игрок! Когда движется игрок то хелсбар трясется так-как он закреплен по координатам игрока, когда-то делал такое-же но крепил к виду (wiev), в таком случае он перестает трястись. За давностью времен забыл как это делать. может кто подскажет? Рок форева! Не графоМан! Холодный космос.
Сообщение отредактировал wasterman - Пятница, 25 Декабря 2015, 11:53
wasterman, смотри в справке view_xview, view_yview.
Еще вариант. Рисовать в Draw GUI Event. Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Пятница, 25 Декабря 2015, 12:35
Еще вопрос, при компиляции в студио выскакивает unable to set permissions. Раньше боролся вроде очисткой данных и еще чем-то не помню. Как это исправить!
Добавлено (27 декабря 2015, 15:14) --------------------------------------------- Сам разобрался, просто стал использовать файл с примера, откопировал его удалил лишнее и использовал как новый.
Подскажите 1 Выделение объекта (например, есть несколько объектов-солдат, выделяешь одного и управляешь ним стрелками) 2 В игре создаются новые объекты, при каком-то количестве игра начинает виснуть, что делать?
1 Ставишь в солдата переменную dvijenie = false. при выборе солдата изменяешь ему переменную на true. Движение разрешаешь только если переменная равна true. При выборе другого солдата этому ставишь false всё профит. 2 Постарайся удалять ненужные объекты или хоть-бы делать их невидимыми! (если расстояние до предмета больше половины видимого экрана то обьект становится невидимым если меньше то видимым).
Вот мои вопросы. Мультитач 1 Можно ли для определенной части экрана использовать свой тач и как (например слева используются мышки номер 1 и 2 справа 3 и 4). 2 как вообще организовать мультитач если у меня просчитываются не только варианты нажатия но и варианты не нажатия. причем они друг друга перекрывают. Рок форева! Не графоМан! Холодный космос.
Сообщение отредактировал wasterman - Пятница, 08 Января 2016, 15:42
Вот мои вопросы. Мультитач 1 Можно ли для определенной части экрана использовать свой тач и как (например слева используются мышки номер 1 и 2 справа 3 и 4). 2 как вообще организовать мультитач если у меня просчитываются не только варианты нажатия но и варианты не нажатия. причем они друг друга перекрывают.
Общая идея:
Код
for (var i = 0; i < 5; i += 1) { var _x = device_mouse_x(i); var _y = device_mouse_y(i); if (/* точка _x, _y в нужном регионе \ над нужным объектом \ ... */) break; } if (i < 5) { // есть касание в области } if (i >= 5) { // нет касания в области }
Пример (клик по выполняющему код объекту любым из касаний):
Код
for (var i = 0; i < 5; i += 1) { if (device_mouse_check_button_pressed(i, mb_left) && position_meeting(device_mouse_x(i), device_mouse_y(i), id)) break; } if (i < 5) show_debug_message("Click!");
Для удобства можно вынести в отдельный скрипт.
Сообщение отредактировал YellowAfterlife - Пятница, 08 Января 2016, 21:34