Лазеры и зеркала
| |
Overdrave | Дата: Воскресенье, 09 Июня 2013, 21:22 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| В игре на вооружении три системы лазеров: 1)Объекты-лазеры Каждый лазер - объект 32х4. Есть стационарная лазерная туррель. Работает идеально, проста в реализации и установке, да и выглядит реалистично, вот только двигаться не может вообще. 2)"Лазеромёт" Та же стационарная туррель, но в этот раз стреляет небольшими объектами, которые в целом выглядят как лазер. Из преимуществ, нужных мне - это отражение от зеркала. Однако тут тоже есть недостатки и весомые: после движения зеркала игроком сверху лазер "делится" - очевидно, слишком маленькая скорость комнаты. Также недавно увеличил скорость самого игрока, и проблема медлительности лазера стала более ощутимой - лазер не успевал "отлетать", поэтому убивал игрока. 3)Рисование лазера. Есть туррель (внезапно), которая крепится в воздухе и направлена вниз. По форме круглая, "качается" примерно на 80 градусов вниз. Время от времени отключается. Работает так: находится координата столкновения со стеной. До неё рисуется линия. В событии игрока пишется код в стиле "Если пересеч линию х,хх,у,уу (т.е. линию, совпадающую с линией лазера), то игрок самоликвидируется". Всё работает прекрасно, пока в игру не вступает второй такой же лазер: работает лишь событие столкновение с линией первого такого лазера, т.е. Игрок умирает лишь от первого лазера.
На скриншоте все три вида систем.
Ну и, собственно, моя просьба: совместить все три системы в одну, т.е. максимально сохранить преимущества каждой и устранить их недостатки или, как вариант, написать другую.
|
|
| |
Andrey_M | Дата: Воскресенье, 09 Июня 2013, 22:11 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Код в студию! Без кода или скриншота эвентов ничего не понятно.
ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
|
|
| |
Overdrave | Дата: Воскресенье, 09 Июня 2013, 22:29 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Код события STEP объекта игрока: Код if instance_number(laser_turet)>0 { if laser_turet.attack=1 { if collision_line(laser_turet.x,laser_turet.y,laser_turet.xx,laser_turet.yy,id,0,0) instance_destroy() } }
Думаю, где-то здесь собака то и зарыта.
А скриншот прилагается под спойлером.
|
|
| |
Saladin | Дата: Понедельник, 10 Июня 2013, 11:53 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
|
Код while !функция_проверки_столкновений_в_точке_х/у("обьект",хx,уy) { xx+=1 или yy+=1 }
Код рисовать_линию(х,у,хх,уу)
Код if столкновение_с_линией(х,у,хх,уу) { with "обьект" уничтожить_обьект() }
Анбаннэд. Хэлоу эгин =)
Сообщение отредактировал Saladin - Понедельник, 10 Июня 2013, 11:58 |
|
| |
Overdrave | Дата: Понедельник, 17 Июня 2013, 10:51 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Saladin, извините за мою тупость, но я ничего не понял ._______.
UPD: Направил свою 3-юю систему: Код if instance_number(Player)>0 { if collision_line(x,y,xx,yy,Player,0,0) and attack=1 with Player { instance_destroy() } }
Почему я раньше не додумался до такого простого кода?..
В любом случае, я не знаю, как рисовать лазер, отражённый от зеркала :сДобавлено (17.06.2013, 10:51) --------------------------------------------- UP'аю тему. До сих пор интересуют зеркала.
Сообщение отредактировал Overdrave - Вторник, 11 Июня 2013, 19:05 |
|
| |
Saladin | Дата: Суббота, 22 Июня 2013, 09:25 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Что тут непонятного? Проверяешь циклом столкновение в точке х/у, и если его нет - переходишь к следующей точке, если есть - прерываешь перебор и выполняешь действие. У тебя же линия прямая, значит это либо перебор по оси икс, либо игрек. Или же, если линия идет по диагонали, тогда берем компоненты вектора lengthdir_x/у.
Анбаннэд. Хэлоу эгин =)
|
|
| |
|