Сложный многофункциональный корабль
| |
Комиссар | Дата: Суббота, 20 Апреля 2013, 13:34 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Прошу помощи в реализации сложного многофункционального корабля. Вот моя игра на данный момент (лучше скачать последнюю версию): Можете немного поиграть, чтобы понять, о чём речь. Управление - WASD, наведение и стрельба орудием - мышкой, Q и E - соответственно противокорабельные и противокосмолётные самонаводящиеся ракеты.
Собственно, задача вот в чём: Мне нужно сделать так, чтобы разные ракеты создавались в разных частях спрайта. Т.е. противокорабельные ракеты создавались поочерёдно на левом и правом борту спрайта, противокосмолётные - где-то ближе к середине, орудие было прикреплено к корпусу в носовой части спрайта, а снаряды вылетали не из его середины, а с конца ствола, а сам корабль осуществлял повороты вокруг точки в кормовой части корабля.
Если бы у меня была вертикальная стрелялка - можно было бы просто добавить к координате x или y соответствующее значение, но сложность в том, что спрайт моего корабля поворачивается (меняет угол наклона), и потому если орудие прикреплено не к центру спрайта, оно оказывается где-то сбоку от корабля. Поэтому орудие у меня прикреплено к заданному мной центру спрайта, однако и поворачивает корабль вокруг него же.
Вобщем, я так понимаю, вся проблема заключается в том, что я не знаю, как задать координаты привязки другого объекта или инстанса относительно координат спрайта, а не координат комнаты.
Прошу помочь в решении этой проблемы.
|
|
| | |
Комиссар | Дата: Суббота, 20 Апреля 2013, 14:13 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| LunarPixel, а можно простенький пример реализации функции lengthdir_x|lengthdir_y? Второй вариант мне кажется ужасным "костылём". Например, при стрельбе одиними и теми же ракетами побортно, мне придётся создавать разные спрайты для ракет, отстреливаемых с левого и правого борта.
|
|
| |
LunarPixel | Дата: Суббота, 20 Апреля 2013, 14:34 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Лови: http://rghost.ru/45421689 Стрелять на Ентер.
|
|
| |
Комиссар | Дата: Суббота, 20 Апреля 2013, 17:49 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| LunarPixel, спасибо! Ушёл разбираться, как это работает и как теперь это внедрить у себя.
Добавлено (20.04.2013, 17:49) --------------------------------------------- Что-то не получается. Вот мой спрайт размером 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 не до конца высчитал.
|
|
| |
Комиссар | Дата: Суббота, 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, да, левый борт теперь стреляет без замечаний. В отличие от правого. Объясни, пожалуйста, сам принцип, когда ставится минус, а когда плюс. А то я в этом моменте не разобрался.
П.С.: По аналогии сделал правый борт.
Сообщение отредактировал Комиссар - Суббота, 20 Апреля 2013, 19:09 |
|
| |
zaicev9797 | Дата: Воскресенье, 21 Апреля 2013, 16:27 | Сообщение # 10 |
AbRaKaDaBrA
Сейчас нет на сайте
| я лично с этой функцие так до конца и не разобрался( одна из причин-алгебра 3-4) но использую ее очень часто, а в помощь мне прога написанная на гамаке "расчет" можешь поискать на сайтах гамака там все интуитивно поняино и не косячит вродеДобавлено (21.04.2013, 16:27) --------------------------------------------- извините за ошибки просто не на своей клаве пишу
проект Mysterious Space. The losted moment
|
|
| |
|