Суббота, 23 Ноября 2024, 06:14

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Лазеры и зеркала
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/у.

Анбаннэд. Хэлоу эгин =)
  • Страница 1 из 1
  • 1
Поиск:

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