Воскресенье, 22 Декабря 2024, 22:11

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Стрельба через поведение "Таймер"
SAMCROДата: Четверг, 27 Сентября 2012, 18:00 | Сообщение # 1
частый гость
Сейчас нет на сайте
Помогите реализовать стрельбу, ну и стрельбу очередями в том числе через поведение "Timer".
Почему не через EveryXmilliseconds? Потому что спрайт врага один а врагов много, соответственно все враги стреляют раз в х миллисекунд, а мне надо чтобы Каждый враг стрелят раз в х миллисекунд.Как вы понимаете все враги это размноженый один и тот же спрайт.
Мне тут подсказали что проблему возможно решить с помощью поведения "Таймер", Только не сказали как...
EldrineДата: Четверг, 27 Сентября 2012, 21:33 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
полюбому for each object (ordered) не подойдет...а timer нафига?

попробуй так:
system-> for each object и выбираешь спрайт врага
sub-event: every x milis.. а дальше знаешь


Модели оружия для CS:S
allxumukДата: Четверг, 27 Сентября 2012, 22:21 | Сообщение # 3
старожил
Сейчас нет на сайте
Quote (Eldrine)
полюбому for each object (ordered) не подойдет

Quote (Eldrine)
попробуй так: system-> for each object



Quote (SAMCRO)
Мне тут подсказали что проблему возможно решить с помощью поведения "Таймер", Только не сказали как...

Что там делать-то? Смотри: Абра-Кадабра - трунь. Нужно было всего лишь немного магии.


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
EldrineДата: Пятница, 28 Сентября 2012, 17:01 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
for each object (ordered) и for each object разные события...

Модели оружия для CS:S
allxumukДата: Пятница, 28 Сентября 2012, 18:56 | Сообщение # 5
старожил
Сейчас нет на сайте
Quote (Eldrine)
for each object (ordered) и for each object разные события...

Разница не принципиальна. Ordered пробегает объекты по заданному параметру, например по увеличению/уменьшению координаты, а обычный просто в порядке создания (или как-то так).


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
SAMCROДата: Суббота, 29 Сентября 2012, 16:42 | Сообщение # 6
частый гость
Сейчас нет на сайте
Quote (Eldrine)
system-> for each object и выбираешь спрайт врага
sub-event: every x milis.. а дальше знаешь

Видимо не уяснил суть вопроса.
Если сделать так - то каждый объект будет пулять одновременно.

Quote (allxumuk)
Что там делать-то? Смотри: Абра-Кадабра - трунь. Нужно было всего лишь немного магии.


Я не волшебник, я только учусь. Очередной раз большое спасибо Алхимику.

Добавлено (29.09.2012, 16:32)
---------------------------------------------
allxumuk, В чем проблема? кнопка 1 создать союзника, кнопка 2 создать врага.
Исходник

Добавлено (29.09.2012, 16:34)
---------------------------------------------
Искать в конце группы "видимость-невидимость"

Добавлено (29.09.2012, 16:42)
---------------------------------------------
Ясно, если кликать таймер запускается один раз, а если событие длительное он срабатывает постоянно и получается каша.
Но!!! Хоть и поставил триггер онс но не помогло. Как прописать чтобы работало корректно?

allxumukДата: Суббота, 29 Сентября 2012, 17:03 | Сообщение # 7
старожил
Сейчас нет на сайте
Етитская сила, что творится в исходнике cry ...
Зачем сравнивать расстояние от b1 до b2, с расстоянием от b2 до b1?
Что именно должно происходить?


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
SAMCROДата: Суббота, 29 Сентября 2012, 20:45 | Сообщение # 8
частый гость
Сейчас нет на сайте
Да там куча всего происходит. Согласен, сравнивать расстояние это лишнее, не помню зачем я это делал, мне казалось - так лучче (у меня мозг в то время плавился). Теперь убрал, ничего не изменилось, так и должно быть. Просто лишнее условие было.
Но проблемы, конечно это удаление не сняло. Суть в том чтобы все стреляли через промежутки времени а не постоянно, как это происходит сейчас.

Распишу что происходит, чтобы было совсем понятно:
Враг начинает стрелять по союзнику когда тот находится от него на расстоянии равном зоркость противника минус скрытность союзника. При условии что врагов много и все они это один и тот же спрайт, через евриХмилисекунд прописать не получается. Через таймер, пока тоже.

Когда тыкаешь по циферке 1 под мышой создается союзник, когда тыкаешь по цифре 2 противник. Чтобы проверить как действует надо просто создать союзника и противника. Тыкая ЛКМ по игрокам можно их выбирать, управлять выбранным можно кнопками ЦЫФВ, управлять выбранным врагом нельзя. Менять статы выбранного можно тыкая по ним ПКМ и ЛКМ. Управлять союзниками можно тыкая на нижние элепсовидные блямбы, которые возникают при создании каждого союзника и соответствуют ему. ЯЧС кнопки которыми можно заставить союзников 1бежать к активному союзнику 2бежать к курсору мыши 3остоновиться и ничего не делать. При том выполнять эти действия будут только союзники, которым соответствуют элепсовидные блямбы активированные нажатием на них ЛКМ.

Ну вроде и все. Как понимаете намучено очень и очень много, а проблема одна описаная выше.

Добавлено (29.09.2012, 20:15)
---------------------------------------------
Проблема вышеописанная. Стрельба через таймер с длительным условием вроде: "когда объект в ЛОСЕ", или "когда расстояние до него меньше определенного значения" работает не правильно. При том что "подсобытие триггер оанс" действием в которое можно пихнуть старт таймера в этом случае не пашет.
По видимому таймер запускается каждый тик и получается, что пули выпускаются постоянно а не по таймеру.

Добавлено (29.09.2012, 20:45)
---------------------------------------------
Вот очень простой исходник, чтобы не засорять мозг. Тут объект крутится когда к нему подходишь - управление стрелками.
Для большей наглядности
Наслоение таймера самого на себя. Очень наглядно. Неужели проблема со стрельбой размноженного спрайта врага никогда не у кого не возникала??? Не верю.

Сообщение отредактировал SAMCRO - Суббота, 29 Сентября 2012, 20:16
allxumukДата: Суббота, 29 Сентября 2012, 20:47 | Сообщение # 9
старожил
Сейчас нет на сайте
Вот простой исходник. ЛКМ - создать союзника, ПКМ - создать врага. Союзников можно перетаскивать мышью. Стреляют только враги, для союзников всё делается аналогично.
-----------------------------------
Кстати, поведение Turret не пробовал?


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
LetsOffBrainsДата: Суббота, 29 Сентября 2012, 20:54 | Сообщение # 10
Project SoRDeLKa
Сейчас нет на сайте
Похоже не успел... Ладно выложу свое творение на этот счет.


SAMCROДата: Суббота, 29 Сентября 2012, 22:19 | Сообщение # 11
частый гость
Сейчас нет на сайте
Еще один хороший исходник на ту же тему
Вот вам пожалста - реализация через евриХмиллисекунд. Не мой исходник, сделаный хорошим человеком в качестве примера. Все спрайты стреляют тут одновременно. Автор явно не ставил перед собою цели сделать нормальную стрельбу, но согласитесь, даже в самой простенькой игре такая механика стрельбы будет смотреться убого.

Добавлено (29.09.2012, 21:02)
---------------------------------------------
Шикарно Спасибо.

Добавлено (29.09.2012, 22:19)
---------------------------------------------

Quote (allxumuk)
Кстати, поведение Turret не пробовал?

на сколько я понимаю поведение пушки не решило бы проблемы, но оно может пригодиться.
Особо приятно, что в своем исходнике ты тоже сделал две приватки скрытность и зоркость. Хотя мог бы обойтись и ЛОСом. Я бы врубился.

Только мне не очень понятно выражение (random(2)+1) * 1000. Поставил фиксированную цифру 1000 работает так же нормально. Задержку в секунду можно списать на прицеливание. Вообще же я туда поставлю приватку "скорострельность" привязанную к конкретному типу оружия, возможно чуть рандомизировав ее в пределах миллисекунд.
allxumukДата: Воскресенье, 30 Сентября 2012, 10:51 | Сообщение # 12
старожил
Сейчас нет на сайте
Quote (SAMCRO)
Только мне не очень понятно выражение (random(2)+1) * 1000

Это даёт рандомный интервал между выстрелами у разных мобов. Можно и без этого, просто так показалось интереснее.


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
SAMCROДата: Понедельник, 01 Октября 2012, 22:31 | Сообщение # 13
частый гость
Сейчас нет на сайте
Quote (allxumuk)
Стреляют только враги, для союзников всё делается аналогично.

Есть еще проблема. В исходнике Аллхимика Если синих союзников больше одного то все перестает работать. И у меня то же самое.
В моем исходнике используется кривой рандом. Ну то есть он срабатывает постоянно, каждый тик. Попробуйте сделать одного синего - все будет в порядка. Два синих, уже ничего не работает.
меня в исходнике работает так
Мне бы хотелось сделать нормальный цикл, чтобы этот цикл заканчивался как только "враг" находил цель.
И начинался снова:
1. Когда враг уничтожил цель.
2. Когда враг обнаружил цель находящуюся ближе к нему.
Ну то есть мне необходимо создать цикл удовлетворяющий требованию, чтобы враг всегда стрелял в ближайший спрайт который он видит.
Проблема в том, что я циклы делать не умею.
allxumukДата: Вторник, 02 Октября 2012, 13:34 | Сообщение # 14
старожил
Сейчас нет на сайте
Новый вариант, работает с несколькими союзниками.

Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
SAMCROДата: Понедельник, 29 Октября 2012, 00:39 | Сообщение # 15
частый гость
Сейчас нет на сайте
Quote (allxumuk)
Новый вариант, работает с несколькими союзниками.

Похоже у меня за всю жизнь не хватит плюсов чтобы allxumuk отблагодарить. allxumuk, теперь, полагаю, ты понимаешь, почему у меня такой ужасный исходник. Просто мало знаю и прилагаю решения которые знаю, туда куда они не годтся, тогда как правильного короткого пути мне без подсказки не найти.

Добавлено (02.10.2012, 22:48)
---------------------------------------------
ААААу эНННооо!!!! Как же просто и как здорово. Даже я понимаю этот исходник! Только подумать! 2 месяца мучался из за такой простой ерунды.

Добавлено (29.10.2012, 00:22)
---------------------------------------------
Я тут сделал таки для ИИ правильное поведение. Теперь надо прописать стрельбу для ГГ тоже через таймер. Получилось как то так.
Новая проблема
А сделал я это через одно место. Ну, допустим, для узи и калаша время между выстрелами доли секунды. А для "однозарядной"(допустим) снайперки?
Нажал кнопку - начался цикл равный времени перезарядки, и пуля вылетит из снайперки только в конце цикла. Ну в случае с ИИ я даже не замечал такой задержки. А как начал с ГГ работать сразу выбесило - нажимаешь на спуск, а пуля не вылетает. Поэтому сделал событие что при клике вылетает пуля. Соответственно опять проблема - кликать можно быстрее чем пушка стреляет а это не правильно. Пришлось вводить переменные, чтобы решить все проблемы.
Вот и получился кривой пример сделаный, чтобы кто-нибудь мне помог.
Проблема так же заключается в том, что ИИ с не скорострельным оружием будет тупить. Это тоже необходимо исправить. Как прописать это вооще не представляю, даже через опу.

!Внимание! даблклик правой кнопкой создать стреляющий квадрат!

Добавлено (29.10.2012, 00:39)
---------------------------------------------

Quote (allxumuk)
Кстати, поведение Turret не пробовал?

Не пробовал, может поможет?


Сообщение отредактировал SAMCRO - Понедельник, 29 Октября 2012, 00:35
allxumukДата: Понедельник, 29 Октября 2012, 08:40 | Сообщение # 16
старожил
Сейчас нет на сайте
Quote (SAMCRO)
Не пробовал, может поможет?

Turret сам определяет расстояние до цели и имеет возможность ограничить угол обзора. Самое главное, что это всё "под капотом" и не раздувает эвент лист.


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
SAMCROДата: Пятница, 02 Ноября 2012, 16:36 | Сообщение # 17
частый гость
Сейчас нет на сайте
Долго думал, но ничего не придумал. Turret behavor -> Reload time Звучит как будто это то что мне нужно а Как действует непонятно.
Ну если бы в поведении туррет было бы событие "выстрелить спрайтом" то время перезарядки можно было бы туда действием пихнуть.
А так как там такого действия нет приходится ставить действие set Reload time в стандартное событие: спавн обжект. Естественно это ничего не меняет.
А событие On Shoot??? Это что за прикол. По идее это значит "когда стреляет". А когда поведение Turret стреляет? Никогда. Стреляет скирра только одним действием Спавн обжект с поведением пули. Насколько я понимаю поведению Turret наплювать на действие спавн обжект.
В чем прикол? Возможно, я просто чего то не понимаю?

Добавлено (30.10.2012, 23:14)
---------------------------------------------
Turret Стрельба
Очень не очевидный для меня исходник собственного сочинения. Тем не менее стреляет правильно и через поведение "туррет"

Добавлено (31.10.2012, 00:34)
---------------------------------------------
Если кому интересно.
Родной исходник через Turret
Так лучше. Сначало было через таймер, а потом я просто все события переписал на туррет за полминуты управился.
Спасибо Алхимику. Через Туррет гораздо логичнее. Вывод: "делайте через туррет и не делайте через таймер."

Добавлено (02.11.2012, 16:36)
---------------------------------------------
Проблема на лицо
Ну уже не совсем в тему. Тут стрельба через туррет. Решение allxumukа, сломанное так чтобы враг стрелял более менее правильно.

В оригенальном была проблема оказывается, которую я только вчера заметил. Представьте себе лежит солдат в комуфляже, совсем слился с природой. И тут далеко на горизонте появляется такой здоровый подлец размахивающий здоровым красным флагом. Что в этом случае думает ИИ в исходнике allxumuk? Он думает: "Наплювать мне на этого подлеца с флагом, я сосредоточен на лежащем солдате в комуфляже, потому что он ближе, а не стреляю я в него, потому что я его типо не вижу,ну мне типо сказали, что я его не вижу. Мне сказали, что я должен выбирать ближайшую цель, даже если ее не разглядеть и пусть там хоть целая армия на меня прет со знаменами, пока они не подойдут ближе чем залег солдат в комуфляже я на них реагировать отказываюсь."

Я же сделал так, что ИИ будет всегда метаться между спрайтами которые он действительно видит и плювать на те которые он не видит, без разницы на каком они от него расстоянии. То есть если он будет видеть двоих но будет дергаться постоянно между выбором в кого стрелять, если же их будет больше, да еще со всех сторон он вооще весь издергается как ненормальный. Хотя такое поведение правильным назвать нельзя оно все же лучше на мой взгляд.

  • Страница 1 из 1
  • 1
Поиск:

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