doom2d.org

Главная база плоских морпехов
It is currently 30 Sep 2020, 11:17

All times are UTC + 3 hours




Post new topic Reply to topic  [ 358 posts ]  Go to page Previous  1 ... 14, 15, 16, 17, 18  Next
Author Message
PostPosted: 27 Nov 2013, 10:00 
Offline
User avatar

Joined: 29 Oct 2013, 05:01
Posts: 32
St.AnGer > Вроде игрок активирует монстров?
Сейчас влом думать (давно спать пора), но игрока они могут преследовать...

Если(Игрок.X > Монстр.Х) //Х - Координата по горизонтали.
Монстр(Двигаться вправо)
Ещё
Монстр(Двигаться влево)

Можно чуть усложнить и всё такое, но имхо, желательно чаще нечто простое отыскивать. Другая деталь, можно не по жизням считать, а добавить (если есть) булевую переменную, где будет написано жив, или нет. Если жмурик, то монстр просто не активируется.
Если конечно, векторные операции не менее тормознутые, чем if else.


Top
 Profile  
 
PostPosted: 27 Nov 2013, 10:07 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
INHELLER wrote:
Если(Игрок.X > Монстр.Х) //Х - Координата по горизонтали.
Монстр(Двигаться вправо)
Ещё
Монстр(Двигаться влево)

У меня примерно так и есть, только у меня не Игрок.Х, а Цель.Х, и вообще у меня всё так и завязано на координаты ведь. Только вот Цель как раз таки ищется лучом, потому что им гораздо удобнее тыкать в стены и объекты, что бы определить во что монстр/игрок упёрся. Иначе получается перебор всех стен, всех дверей и т.д. Это вообще убивает скорость наглухо. А так я лучом определяю объект и сразу с ним работаю без всяких там лишних циклов (каждый объект имеет имя наподобие "monster17", где monster - тип объекта, 17 - его хэндл (своеобразный указатель блица)).

А про жизни у меня как раз есть переменная killed (правда не булева), которая описывает состояние смерти (0 - жив, 1 - просто мёртв, 2 - порван в куски)

зыЖ блин, чойт непонятно с клавой на работе, некоторые клавиши не всегда нажимаются с первого раза

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 27 Nov 2013, 10:12 
Offline
User avatar

Joined: 29 Oct 2013, 05:01
Posts: 32
St.AnGer
Quote:
Иначе получается перебор всех стен, всех дверей и т.д.

Так это и не требуется. Ну, по-крайней мере так сильно. Можно сделать типа: если монстр упёрся в стену, то прыгнуть. Если снаряд "попал" куда-то, ближе чем игрок (или цель), то он "посылает" сообщение, что там стена, или дверь.
Ну и так далее.


Top
 Profile  
 
PostPosted: 27 Nov 2013, 10:15 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
INHELLER wrote:
St.AnGer
Quote:
Иначе получается перебор всех стен, всех дверей и т.д.


Так это и не требуется. Ну, по-крайней мере так сильно. Можно сделать типа: если монстр упёрся в стену, то прыгнуть. Если снаряд "попал" куда-то, ближе чем игрок, то он "посылает" сообщение, что там стена, или дверь.
Ну и так далее.

Ну примерно на тот же уровень как у меня сейчас это и выйдет, даже чуть тормознее (я поначалу так и попробовал, когда убирал лучи в одной из версий). Тормозит не из за лучей, а из за сложности условий у монстров (если я конечно правильно понял причину тормозов, хотя чего я выше где то описывал псевдокодом эти условия и ничего сложного в них не вижу). Да, и, впринципе если забить на слоупочные машины (типа моего нэтбука) то проект можно смело развивать далее, так как возможностей блица вполне хватает, а косяки можно поправить (наподобие решённого мной косяка с водой и лучами).

ну и плюсом - если сделать "монстр упёрся в стену, то прыгнуть", то монстры получатся тупыми и очень предсказуемыми. У меня всё таки элемент рандомности присутствует какой то :) Можно конечно добавить ещё пару условий (если рядом ловушка, дверь и т.п.), но это опять плохо скажется на скорости.

зыЖ вообще, если по хорошему, надо весь код монстров выкинуть и написать заново. Думаю должно заработать гораздо быстрее, если не будет вложенности 4+ условий друг в друге, как у меня. Ну и оптимизации добавить - разбивку карты на небольшие сектора и обновление только того сектора в котором игрок находится (ну и, допустим, +левый+правый+верхний+нижний сектор от текущего).

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 27 Nov 2013, 23:57 
Offline
User avatar

Joined: 29 Oct 2013, 05:01
Posts: 32
St.AnGer > Мне и правда надо было проспаться. Всё-таки... По-моему, оно тормозит не из-за самого кода, а больше из-за того, что он выполняется дохрена раз, за кадр. Хотя это не отменяет некоторых других, тяжёлых кусков (возможных). Тем более, если уж при удалении небольших кусков, чувствуется прибавка к скорости.


Top
 Profile  
 
PostPosted: 28 Nov 2013, 08:22 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
INHELLER wrote:
St.AnGer > По-моему, оно тормозит не из-за самого кода, а больше из-за того, что он выполняется дохрена раз, за кадр.

Вот! Именно поэтому оно и тормозит. Чот я кстати протупил, сейчас попробую ввести таймер какой нибудь простенький, чтоб раз в 3 кадра логика монстров обрабатывалась. Ну правда это не отменит пересчёт цикла всех монстров, но должно резко упростить жизнь процессору.

апд Попробовал, сильно ситуация не изменилась :(

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 29 Nov 2013, 07:20 
Offline
User avatar

Joined: 29 Oct 2013, 05:01
Posts: 32
St.AnGer > Ну да. Теперь тормоза происходят раз в 3 кадра, а не каждый кадр. :D
Я имел в виду скорее... Постараться так сделать, чтобы оно поменьше вызывалось в течении одного кадра... Или "внутри" одного кадра (как удобнее). Всё-таки надо бы понять из-за чего всё это безобразие очень часто вызывается. Хотя как вариант, там ещё могут быть скрыты и какие-нибудь части, которые тоже вызывают интенсивный перебор.
Ну просто не верю, что несколько if else-ов могут так тормозить. Да ещё и с учётом того, что их выполняется не каждый if else.

Хы. Или как вариант Blitz3D реально хрень.


Top
 Profile  
 
PostPosted: 29 Nov 2013, 08:08 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
INHELLER wrote:
St.AnGer > Ну да. Теперь тормоза происходят раз в 3 кадра, а не каждый кадр. :D
Я имел в виду скорее... Постараться так сделать, чтобы оно поменьше вызывалось в течении одного кадра... Или "внутри" одного кадра (как удобнее). Всё-таки надо бы понять из-за чего всё это безобразие очень часто вызывается. Хотя как вариант, там ещё могут быть скрыты и какие-нибудь части, которые тоже вызывают интенсивный перебор.
Ну просто не верю, что несколько if else-ов могут так тормозить. Да ещё и с учётом того, что их выполняется не каждый if else.

Хы. Или как вариант Blitz3D реально хрень.

Там всё от количества монстров зависит ведь. У меня нет разбивки на сектора или какой то зависимости от положения игрока - все монстры обновляются каждый кадр. Т.е. если 20 монстров - идёт 20 переборов цикла for each со всеми этими условиями. Если 100 монстров - соответственно 100 переборов. Ну и к этому прибавляем перебор циклов дверей, декораций, игроков, триггеров, снарядов, лифтов, воды, партиклов... И это получается жесть для слабенького проца. Но, если честно, у меня нэтбук умирает уже на 5 одновременно активных монстрах.

И да, Blitz3d не хрень :) он просто уже лет 5-6 как устарел, но такой мне родной, что прям аж не могу :)
Ну и тут всё таки главную роль играет то, что из меня очень плохой оптимизатор. Изначально у меня на нэтбуке и без монстров на более-менее больших картах всё лагало, потому что каждый квадратик текстуры отрисовывался отдельным квадом и физическим телом. Но это я решил, объединив все квады в один сюрфейс (читай один объект, который отрисовывается за один дип, а не тучу объектов за тучу дипов), и оптимизировав количество физических тел. А вот с монстрами проблема... Понимаю, что решить её как то можно, а как - не знаю :( уже всё перепробовал что можно. Если монстры не активны - хоть 50 штук воткни около игрока, всё летает без тормозов. Осталось разбивку уровня на виртуальные сектора попробовать, но там будет другая проблема сразу - монстры в неактивных секторах не будут обновляться, т.е. не будут делать ничего. На это, в принципе, можно закрыть глаза, но блин, в DooM'ах всегда все монстры были активны и это работало.

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 01 Dec 2013, 08:06 
Offline
User avatar

Joined: 29 Oct 2013, 05:01
Posts: 32
St.AnGer > Не, всё-таки, чувствую, лучшим вариантом будет глянуть как у них сделано. Как в том же классическом DooM2D. А то так... Я знаю некоторые сведения, как и могу примерно представить как оптимизировать некоторые вещи, но... С одной стороны, я не очень силён и хорошо знаю программирование, с другой, не уверен что придумываю велосипеды.

И хм. Может стоит в начале подумать о том как это всё можно оптимизировать. Может так проще будет, но рассуждать обо-всём этом не в виде кода, а схематично, что-ли. Не знаю как это называется. Потом сделать паузу и пару дней заниматься чем-то совершенно левым. Не задумываясь об этом вопросе. И уже не замыленым взглядом снова посмотреть на решение проблемы. Может ещё какие идеи придут на ум.
Ну и можно порыскать различную литературу, на эту тему. Правда больше на английском, так как с переводами не густо, да ещё и переводят так, что бывает нифига не понятно.

Ну а что касается Blitz3D, то тут... Я его с года 2006-ого, не видел. В начале глянул, он чего-то мне не понравился, после чего и забыл.


Top
 Profile  
 
PostPosted: 02 Dec 2013, 16:29 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
INHELLER wrote:
St.AnGer > Не, всё-таки, чувствую, лучшим вариантом будет глянуть как у них сделано. Как в том же классическом DooM2D. А то так... Я знаю некоторые сведения, как и могу примерно представить как оптимизировать некоторые вещи, но... С одной стороны, я не очень силён и хорошо знаю программирование, с другой, не уверен что придумываю велосипеды.

И хм. Может стоит в начале подумать о том как это всё можно оптимизировать. Может так проще будет, но рассуждать обо-всём этом не в виде кода, а схематично, что-ли. Не знаю как это называется. Потом сделать паузу и пару дней заниматься чем-то совершенно левым. Не задумываясь об этом вопросе. И уже не замыленым взглядом снова посмотреть на решение проблемы. Может ещё какие идеи придут на ум.
Ну и можно порыскать различную литературу, на эту тему. Правда больше на английском, так как с переводами не густо, да ещё и переводят так, что бывает нифига не понятно.

Ну а что касается Blitz3D, то тут... Я его с года 2006-ого, не видел. В начале глянул, он чего-то мне не понравился, после чего и забыл.

Паузы у меня были, как раз по этой причине. И паузы были продолжительные, от нескольких дней, до двух месяцев. И код весь свой я в "псевдоСхемоКод" раскладывал, в поисках узких мест... Узкие места нашёл, многие исправил, но вот это как исправить я не знаю, не хватает знаний.

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 02 Dec 2013, 16:53 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Слушай, а покажи-ка код из вот этого сообщения в нормальном виде. Сейчас там не понять, что хранится в переменных, а что получается функциями, поэтому невозможно продумать оптимизацию.
Буду благодарен если к тому же прокомментируешь код.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 02 Dec 2013, 17:07 
Offline
User avatar

Joined: 08 Dec 2012, 18:42
Posts: 622
Location: Куда?
По-моему, луч, чтобы выбрать объект, должен каждый пиксел перебирать все объекты. Если объекты списком. Или там клеточками?


Top
 Profile  
 
PostPosted: 02 Dec 2013, 18:18 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
Черный Думер wrote:
Слушай, а покажи-ка код из вот этого сообщения в нормальном виде. Сейчас там не понять, что хранится в переменных, а что получается функциями, поэтому невозможно продумать оптимизацию.
Буду благодарен если к тому же прокомментируешь код.

Ох... Это очень стрёмный код :) Попозже попробую выложить, надо ещё закоментить как то ведь :)

pss88 wrote:
По-моему, луч, чтобы выбрать объект, должен каждый пиксел перебирать все объекты. Если объекты списком. Или там клеточками?

тут немного не по пикселам, у меня же 3д как бы пространство, и физика 3д. Но как на уровне физического движка пик происходит я не знаю, поэтому не буду утверждать.

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 03 Dec 2013, 20:38 
Offline
User avatar

Joined: 29 Oct 2013, 05:01
Posts: 32
St.AnGer
Quote:
И код весь свой я в "псевдоСхемоКод" раскладывал, в поисках узких мест... Узкие места нашёл, многие исправил, но вот это как исправить я не знаю, не хватает знаний.

Так в этом-то и смысл, заглядывания в чужие реализации (или просто поиск инфы).
Кстати мне тут подумалось... Встроенные функции Bliz3D, вроде должны быстрее работать, так как уже скомпилированы да и написаны на... На том, на чём Bliz3D написан. Правда это по идее.


Top
 Profile  
 
PostPosted: 03 Dec 2013, 21:40 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
INHELLER wrote:
Так в этом-то и смысл, заглядывания в чужие реализации (или просто поиск инфы).
Кстати мне тут подумалось... Встроенные функции Bliz3D, вроде должны быстрее работать, так как уже скомпилированы да и написаны на... На том, на чём Bliz3D написан. Правда это по идее.

У блица ооооооооочень хреновая скорость работы математики, любой. Потому я сейчас ушёл на С++ :) Написан блиц на си, но математика там убога до невозможности почему то...

На счёт чужой реализации - я честно пытался понять исходники DF :) Но паскалеподобные ЯП терпеть ненавижу, потому не особо преуспел в этом деле.

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 04 Dec 2013, 15:17 
Offline
User avatar

Joined: 20 Apr 2013, 00:03
Posts: 18
St.AnGer wrote:
Написан блиц на си, но математика там убога до невозможности почему то...

Объясню почему.
Блиц работает на собственной виртуальной машине, коей EXE-файл, собранный блицем, наполовину и является. Вторая половина - байткод собственного формата, который на этой машине интерпретируется. Касаемо математики - она таже разбирается на опкоды, и в итоге мы имеем кучу add, sub, mul и div. Чем их больше - тем медленнее выражение считается. Если бы это был x86 ассемблер, это просто космически быстро, но ведь блиц - виртуалка. Поэтому, чтобы выполнить какой нибудь ADD, блицу нужно сначала обратиться к массиву с опкодами, прочитать аргументы, найти необходимые переменные и только потом складывать.


Top
 Profile  
 
PostPosted: 05 Dec 2013, 15:18 
Offline
User avatar

Joined: 29 Oct 2013, 05:01
Posts: 32
Kirpi4 > Так я же о встроенных функциях говорил (или как там они называются?). Ну типа... Если написать свой raytrace() (ничего другого на ум не пришло), внутри Blitz3D, то тогда да. Оно будет медленно работать, по описанным выше причинам. Но если воспользоваться встроенным raytrace-ом, то по идее, он должен шустро работать (ну насколько шустро работает raytrace), так как оно уже на Си написано и скомпилировано по всем правилам.

Я это имел в виду.


Top
 Profile  
 
PostPosted: 05 Dec 2013, 15:23 
Offline
User avatar

Joined: 08 Dec 2012, 18:42
Posts: 622
Location: Куда?
Может там нет нужных функций? ))


Top
 Profile  
 
PostPosted: 05 Dec 2013, 19:40 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
есть не менее тормозящие LinePick и CameraPick. Я потому и выбрал стороннюю библиотеку физики с рейтрейсером, что всё написанное мной вручную будет в 100крат тормознее, чем уже готовая библиотека.

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 07 Dec 2013, 20:11 
Offline
User avatar

Joined: 20 Apr 2013, 00:03
Posts: 18
Привет, народ.
Намутили 2D двиг на си, хотя вся игра будет написана на Lua, поэтом при желании можно сделать чуть ли не другую игру. Сейчас пишется скелетка и интегрируется Lua как следует. С моей же стороны - редактор карт. Выглядит не так круто конечно как от D2DF, но зато универсален.

Image


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 358 posts ]  Go to page Previous  1 ... 14, 15, 16, 17, 18  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
doom2d.org, since 2007