Четверг, 25 Апреля 2024, 17:14

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Сложный многофункциональный корабль (Объект, создающий инстансы в разных частях своего спрайта)
Сложный многофункциональный корабль
КомиссарДата: Суббота, 20 Апреля 2013, 13:34 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Прошу помощи в реализации сложного многофункционального корабля.
Вот моя игра на данный момент (лучше скачать последнюю версию):
Можете немного поиграть, чтобы понять, о чём речь.
Управление - WASD, наведение и стрельба орудием - мышкой, Q и E - соответственно противокорабельные и противокосмолётные самонаводящиеся ракеты.

Собственно, задача вот в чём:
Мне нужно сделать так, чтобы разные ракеты создавались в разных частях спрайта. Т.е. противокорабельные ракеты создавались поочерёдно на левом и правом борту спрайта, противокосмолётные - где-то ближе к середине, орудие было прикреплено к корпусу в носовой части спрайта, а снаряды вылетали не из его середины, а с конца ствола, а сам корабль осуществлял повороты вокруг точки в кормовой части корабля.

Если бы у меня была вертикальная стрелялка - можно было бы просто добавить к координате x или y соответствующее значение, но сложность в том, что спрайт моего корабля поворачивается (меняет угол наклона), и потому если орудие прикреплено не к центру спрайта, оно оказывается где-то сбоку от корабля. Поэтому орудие у меня прикреплено к заданному мной центру спрайта, однако и поворачивает корабль вокруг него же.

Вобщем, я так понимаю, вся проблема заключается в том, что я не знаю, как задать координаты привязки другого объекта или инстанса относительно координат спрайта, а не координат комнаты.

Прошу помочь в решении этой проблемы.


LunarPixelДата: Суббота, 20 Апреля 2013, 13:47 | Сообщение # 2
старожил
Сейчас нет на сайте
Вообще, тут в помощь функции lengthdir_x|lengthdir_y и геометрия. smile
Но если лень считать, можно сделать по другому. Берешь спрайт корабля, рисуешь поверх снаряд в том месте от куда он должен лететь, стираешь корабль. Теперь объект с этим спрайтом снаряд будет создаваться в том месте, где нужно (тупо накладываться поверх корабля) и если его direction/image_angel будет равен direction'у корабля, то снаряд при любом повороте корабля будет создаваться в правильной позиции. smile


КомиссарДата: Суббота, 20 Апреля 2013, 14:13 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
LunarPixel, а можно простенький пример реализации функции lengthdir_x|lengthdir_y?
Второй вариант мне кажется ужасным "костылём". Например, при стрельбе одиними и теми же ракетами побортно, мне придётся создавать разные спрайты для ракет, отстреливаемых с левого и правого борта.


LunarPixelДата: Суббота, 20 Апреля 2013, 14:34 | Сообщение # 4
старожил
Сейчас нет на сайте
Лови: http://rghost.ru/45421689
Стрелять на Ентер. smile


КомиссарДата: Суббота, 20 Апреля 2013, 17:49 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
LunarPixel, спасибо!
Ушёл разбираться, как это работает и как теперь это внедрить у себя. smile

Добавлено (20.04.2013, 17:49)
---------------------------------------------
Что-то не получается. sad
Вот мой спрайт размером 128х64:

Центр спрайта находится в точке Х: 104; Y: 32 (в центре жёлтого круга).
Я рассчитал, что ракеты должны появляться в точках 80;6 и 80;58 поочерёдно.
Написал следующий код:
Код

if leftboard = 1
{
if missiles > 0 and fire_missile = 1
{
instance_create(x+lengthdir_x(-24,image_angle),y+lengthdir_y(-26,image_angle), o_missile)
missiles -= 1
alarm[3] = 10
fire_missile = 0
leftboard -= 1
rightboard += 1
}

}

if rightboard = 1
{
if missiles > 0 and fire_missile = 1
{
instance_create(x+lengthdir_x(-24,image_angle),y+lengthdir_y(26,image_angle), o_missile)
missiles -= 1
alarm[3] = 10
fire_missile = 0
leftboard += 1
rightboard -= 1
}

}

Ракеты образовываются, но не в тех местах, где хотел (при разных углах наклона спрайта по-разному, там где надо только под углом 90 градусов).
Прописывать в качестве параметра L image_direction или direction - разницы нет.
Что я делаю не так?




Сообщение отредактировал Комиссар - Суббота, 20 Апреля 2013, 17:51
LunarPixelДата: Суббота, 20 Апреля 2013, 18:05 | Сообщение # 6
старожил
Сейчас нет на сайте
Комиссар, ну во-первых я тебе код для instance_create другой скидывал, x и y не до конца высчитал. smile

КомиссарДата: Суббота, 20 Апреля 2013, 18:12 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
LunarPixel, сейчас попробую, я так понял, что вторые X и Y просто задают направление полёта снарядов, вот и не стал их вписывать.
Код

if leftboard = 1
{
if missiles > 0 and fire_missile = 1
{
instance_create(x+lengthdir_x(-24,direction) - lengthdir_y(-26,direction),y+lengthdir_y(-26,direction) - lengthdir_x(-24,direction), o_missile)
missiles -= 1
alarm[3] = 10
fire_missile = 0
leftboard -= 1
rightboard += 1
}

}

if rightboard = 1
{
if missiles > 0 and fire_missile = 1
{
instance_create(x+lengthdir_x(-24,direction) - lengthdir_y(26,direction), y+lengthdir_y(26,direction) - lengthdir_x(-24,direction), o_missile)
missiles -= 1
alarm[3] = 10
fire_missile = 0
leftboard += 1
rightboard -= 1
}

}

ХЗ, всё-равно что-то не так.




Сообщение отредактировал Комиссар - Суббота, 20 Апреля 2013, 18:19
LunarPixelДата: Суббота, 20 Апреля 2013, 18:31 | Сообщение # 8
старожил
Сейчас нет на сайте
Опять напутал. Так попробуй:
Код
instance_create(x+lengthdir_x(-24,direction)-lengthdir_y(-26,direction),y+lengthdir_y(-24,direction)+lengthdir_x(-26,direction), o_missile)


КомиссарДата: Суббота, 20 Апреля 2013, 18:49 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
LunarPixel, да, левый борт теперь стреляет без замечаний. В отличие от правого. smile
Объясни, пожалуйста, сам принцип, когда ставится минус, а когда плюс. А то я в этом моменте не разобрался.

П.С.: По аналогии сделал правый борт. smile




Сообщение отредактировал Комиссар - Суббота, 20 Апреля 2013, 19:09
zaicev9797Дата: Воскресенье, 21 Апреля 2013, 16:27 | Сообщение # 10
AbRaKaDaBrA
Сейчас нет на сайте
я лично с этой функцие так до конца и не разобрался( одна из причин-алгебра 3-4)
но использую ее очень часто, а в помощь мне прога написанная на гамаке "расчет" можешь поискать на сайтах гамака там все интуитивно поняино и не косячит вроде

Добавлено (21.04.2013, 16:27)
---------------------------------------------
извините за ошибки просто не на своей клаве пишу biggrin


проект Mysterious Space. The losted moment
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Сложный многофункциональный корабль (Объект, создающий инстансы в разных частях своего спрайта)
  • Страница 1 из 1
  • 1
Поиск:

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