forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Обработка 2d объектов (http://forum.boolean.name/showthread.php?t=18284)

MoteX 24.06.2013 16:44

Обработка 2d объектов
 
Вложений: 1
Здравствуйте:) столкнулся с такой проблемой:
Имеется игра такого вида
Вложение 19283
Нужно добавить монстров,я создал несколько массивов,массив с изображениями и массивы с информацией координат и номера кадра с направлением.
В игре один поток,обработка выглядит так
for i=0 to max
if monster(i)=1 then процедура обработки
Проблема в том,что игра изза этого может провисать,что довольно неприятно:(
Может кто натолкнуть на путь истинный? Я уже незнаю что делать

moka 25.06.2013 01:36

Ответ: Обработка 2d объектов
 
Держи число монстров, и итерируй от 0 до этого числа. А не максимальное число монстров.
И провисает не цикл, а логика в цикле.

MiXaeL 25.06.2013 14:46

Ответ: Обработка 2d объектов
 
Цитата:

Сообщение от moka (Сообщение 261998)
Держи число монстров, и итерируй от 0 до этого числа. А не максимальное число монстров.
И провисает не цикл, а логика в цикле.

Мока, вот ты сам и объяснил, почему ты не прав. Провисает не цикл, а логика, которая, как я понял, вся завернута в условие. Т.е. разницы особой не будет, обходить все поле (оно явно не 10^5 на 10^5) или только монстров. Идеологически правильно, спору нет, но автора не спасет.
Судя по всему язык Basic'оподобный, я в них не разбираюсь особо, но должно же там быть что-то типа std::vector или списков из Blitz'a. Лучше их применять, ну и действительно копнуть в логику. Если там самая медленная часть завязана на обработку взаимодействия с игроком, вынести ее в отдельный цикл и обрабатывать только ближайших монстров.

moka 25.06.2013 16:50

Ответ: Обработка 2d объектов
 
Цитата:

Сообщение от MiXaeL (Сообщение 262033)
Мока, вот ты сам и объяснил, почему ты не прав.

Где можно быть не правим в том что я написал выше? ЛоЛ

Цитата:

Сообщение от MiXaeL (Сообщение 262033)
Провисает не цикл, а логика, которая, как я понял, вся завернута в условие.

Цитата:

И провисает не цикл, а логика в цикле.
Цитата:

Сообщение от MiXaeL (Сообщение 262033)
Т.е. разницы особой не будет, обходить все поле (оно явно не 10^5 на 10^5) или только монстров. Идеологически правильно, спору нет, но автора не спасет.
Судя по всему язык Basic'оподобный, я в них не разбираюсь особо, но должно же там быть что-то типа std::vector или списков из Blitz'a. Лучше их применять, ну и действительно копнуть в логику. Если там самая медленная часть завязана на обработку взаимодействия с игроком, вынести ее в отдельный цикл и обрабатывать только ближайших монстров.

Я так понимаю ты хотел сказать, что нужно иметь сразу список монстров которые нужно обработать, а не список который проверяется monster(i) и затем применяется логика.

Короче говоря, автор выложил недостаточно инфы.
Могу предположить что он тяжко просчитывает если монстр в экране или т.п. Но делает это с каким-то извращением, что эта проверка и садит всё.

Если делать как полагается, то нужно разбивать пространство на сектора, и хранить списки монстров в секторах. И затем пробегаться только по секторам которые в камере и их спискам монстров.

Забудь о блице..

Reizel 30.06.2013 15:13

Ответ: Обработка 2d объектов
 
тс, скинь код, посмотрим. только не жмись, целиком кидай


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot