Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > FAQ и уроки

Ответ
 
Опции темы
Старый 13.09.2007, 18:20   #16
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

elmortem, это неправильный новичёк, правильный, это тот кто отрубиться от интернета возмёт RTMF и будет учиться. Вот только таких нету почти, но таким респект и они становяться в итоге лучшими...
(Offline)
 
Ответить с цитированием
Старый 13.09.2007, 18:34   #17
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

MoKa, где ж ты видел таких новичков, которые сами будут "постигать тонкую науку мирового бытия", ведь проще задать вопрос на форуме, пусть чужие мозги парятся.Вижу как форум молодеет, приходят парни лет по 13-15 и задают глупые впросы, вот не знаю хорошо ли это?
(Offline)
 
Ответить с цитированием
Старый 13.09.2007, 18:40   #18
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

dimanche13, вот от сюда можно заключить. Интернет - зло. Я сидел без инета и зубрил, и на то время считался новичком, и щас в б3д много не знаю, но главное тут опыт иметь, знать мало. И знакомые есть кто так постигал кодинг.
(Offline)
 
Ответить с цитированием
Старый 13.09.2007, 18:44   #19
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

приходят парни лет по 13-15 и задают глупые впросы, вот не знаю хорошо ли это?
то что такие приходят - хорошо !! приятно что люди интересуются кодингом !!
но то что задают глупые вопросы - плохо !! ведь можно было действительно это прочитать и мозги други не парить !!
(Offline)
 
Ответить с цитированием
Старый 13.09.2007, 18:45   #20
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

Но все таки без инета тоже как-то неинтерестно прогить.. согласитесь, сделали супер мега игру, а показать почти некому(... также если возник вопрос, а в книги нет овтета, что делать? Инет...

Правда, с появлением безлимитного инета я почти забросил кодить.. так, по чуть-чуть бывает кодю че-нить
(Offline)
 
Ответить с цитированием
Старый 13.09.2007, 18:49   #21
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

согласитесь, сделали супер мега игру, а показать почти некому
ты когда зделаеш ее, то она сама засветится как звезда в ночном небе (кхм извеняюсь) !!
а форум тебе для того что бы спросить что то , что не получается у самого !!
(Offline)
 
Ответить с цитированием
Старый 13.09.2007, 18:55   #22
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

Данил, не думаю что сделаешь сам мега игру кодя годик, только единицы, редкость. И я не про книги говорил, а про справку, и голову на плечах, книги - учат, и это уже не тот эффект, хотя лучше чем когда человек учит.
В общем заканчиваем оффтоп! FAQ раздел как никак.
(Offline)
 
Ответить с цитированием
Старый 13.09.2007, 19:08   #23
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

"мега игру" это образное выражение.. Незнаю, МоКа, но меня лично книга научила первому моему языку - VisualBasic и при чем вполне норм.. основные понятия и как это делается я понял... по этому книги - это весчь. но не все... =)
(Offline)
 
Ответить с цитированием
Старый 14.09.2007, 10:28   #24
LD
ПроЭктировщик
 
Регистрация: 18.11.2006
Сообщений: 179
Написано 7 полезных сообщений
(для 16 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

Сорри, но присоединюсь к всеобщему флуду изобретать велосипеды полезно каждому новичку (и мне в том числе, я тоже задаю на форуме тупые вопросы) очень хорошо сказываетьс9 на логике и дает прирост +10 к умению построения алгоритма. По мне, так лучше изобрести кривой велосипед и потом его доравтывать, чем скопипастить мотоцикл. извините, если что не так сказал.
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 06:48   #25
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

Данил, молодец.
дядя дима, две сферы соприкасаются если растояние между их центрами меньше чем сумма радиусов.

еще пара советов:
1. не сравнивайте строки (долго), ессено если в этом нет крайней необходимости.
2. не сравнивайте float на равентсово, может смутить.
3. если есть вложенные условия, проверяйте сначала самые маловероятные, если они не выполнются , то вложенные даже небудут проверяться.
4. не используйте "магические числа". т.е. если у вас есть 10 врагов, то заведите константу на их кол-во, чтобы потом незабыть что к чему.
5. скрвайте невидимые еммитеры (ето даже в варкрафте сделано)
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 12:01   #26
jimon
 
Сообщений: n/a
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

HolyDel
есть 2000 сфер
из них надо узнать коллизии для 10 сфер (с какой колизится)
как ето оптимизировать ?
20 тыс проходов тормозит однако

я тут усилино думаю о разбиении пространства
хотя бы просто сегментную сетку наложить
но все ручки не доходят
 
Ответить с цитированием
Старый 16.09.2007, 17:04   #27
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

простая сегментная разбивка (впрочем, ты наверное и сам знаеш).
разбиваеш ограниченное пространство на n^3 кубов.
создаеш n^3 списков (aka list из <list>)

игровой цикл:
отчищаеш все спсики
первым прогоном 2000 операций, заносиш сферу в список. к которому она принадлежит (по координатам), если к нескольким (большая сфера), то заносиш во все списки к которым она принадлежит.
далее, прогоняеш все сферы
2000 проходов.
далее проеверяеш на коллизии тока сферы из тогоде списка (или кщк соседних), если сфера большая.

аналогичная система юзается в вартич (тога 2д , n^2), она помогла офигенно поднять производительность при большом кол-ве юнитов (хотя немного ее снизила при малом кол-ве).
исходники либы утеряны, в связи с потерей винта, и на данный момент усильно пишутся заново. Могу потом скинуть, прада ето будет 2д сегментная сетка.
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 18:58   #28
jimon
 
Сообщений: n/a
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

HolyDel
у меня тоже 2д для jAqua...
в общем в типе мира есть список существ
думаю там и можно его разбивать

идинственая трабла что сейчас нету границы мира
потому трудно представляю как наложить явную сетку
хотя можно сетку генерировать динамически
если юнит математически по координатам
относится к квадрату сетки то просто создадим етот квадрат
ето будет економно со стороны памяти
я уже начал все сильно оптимайзить...
а то памяти жрет много
зделал даж динамическую выгрузку ресурсов ...
ибо нефиг мне >100 картинок в памяти держать

в общем осталось подождать пока ручки дойдут
 
Ответить с цитированием
Старый 16.09.2007, 19:30   #29
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

хорошая идея.
сетка допустим из 20 на 20 ячеек.
перввм проходом просто узнаеш максимальные и минимальные координаты по обои осям, и запихиваеш в эту область сетку.
один угол (минимальные координаты в котором) береш за смещение.
пример:
сетка находится тут: (-20,-20)(180,180)
смещение dx = -20
смещение dy = -20
размер сетки sx 180 - (-20) =200 ; asx=1/sx;
размер сетки sy 180 - (-20) =200 ; asy=1/sy;
потом смотриш на сферу, допустим у нее координаты 50, 120
смотриш i = sphere.x-dx * asx * gridsize (размер сетки ето (в нашем случае 20))
смотриш j = sphere.y-dy * asy * gridsize (размер сетки ето)

кстати, как создать массив
typedef std::list<TSphere*> mylist
mylist* m = new mylist[20*20 (угадайте почему?)]

как обратиться к элементу?
m[i*21+j]

вот и получаем:

m[i*21+j].push_back(sphere);

на коллизии (предположим сферы в списке sphs)
for(sphstype (тут должно быть чо то сове)::const_iterator ci=sphs.begin();ci!=sphs.end();++ci)
{
i = sphere.x-dx * asx * gridsize;
j = sphere.y-dy * asy * gridsize;
for (mylist::const_iterator mi=m[i*21+j].begin();mi!=end();++mi)
{
а проврим ка мы их на коллизии тут!
}
}

PS. Данный пост направлен не дяде Диме в первую очередь, он и сам допрет.
а вот новичкам очень рекомендую принять на вооружение, способ сильно поднимет производительность, при огромном количстве объектов.

Да! писалось все в браузере, так что на работспособность не рассчитывайте, идея вроде верная.

И спасибо джимону, за идею с динамически меняющейся сеткой. а то так ее ячейки получаются слишком большими, и в них много юнитов помещаются, такчто пользы почти в ноль.
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 19:54   #30
jimon
 
Сообщений: n/a
Re: Увеличиваем производительность игры или как убить лишние коллизии. Советы новичкам.

HolyDel
из-за взаимонепонимания мы друг другу новые идеи даем

я имеел ввиду что размер стороны квадрата сетки будет статичным = A
и потом опишем
type NetCube
..
field objects:TList
..
end type

и Net:TList
но будем создавать квадрат только если обьект туда попадает
тоесть пустых квадратов в сетке у нас не будет

хотя идея с динамическим размером мне понравилась
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выкладываем советы zheland BlitzMax 17 19.09.2008 11:01
производительность smersh 3D-программирование 5 20.05.2007 13:02
Помогите убить баг... Raiter 2D-программирование 10 07.04.2007 22:07
Цвет. (Советы и ИМХО) moka Создание текстур 0 16.01.2007 08:43
полезные советы jimon Болтовня 28 23.11.2005 21:31


Часовой пояс GMT +4, время: 06:27.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com