|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
24.06.2013, 16:44
|
#1
|
Нуждающийся
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений (для 8 пользователей)
|
Обработка 2d объектов
Здравствуйте столкнулся с такой проблемой:
Имеется игра такого вида
Нужно добавить монстров,я создал несколько массивов,массив с изображениями и массивы с информацией координат и номера кадра с направлением.
В игре один поток,обработка выглядит так
for i=0 to max
if monster(i)=1 then процедура обработки
Проблема в том,что игра изза этого может провисать,что довольно неприятно
Может кто натолкнуть на путь истинный? Я уже незнаю что делать
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
|
(Offline)
|
|
25.06.2013, 01:36
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Обработка 2d объектов
Держи число монстров, и итерируй от 0 до этого числа. А не максимальное число монстров.
И провисает не цикл, а логика в цикле.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.06.2013, 14:46
|
#3
|
Бывалый
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений (для 267 пользователей)
|
Ответ: Обработка 2d объектов
Сообщение от moka
Держи число монстров, и итерируй от 0 до этого числа. А не максимальное число монстров.
И провисает не цикл, а логика в цикле.
|
Мока, вот ты сам и объяснил, почему ты не прав. Провисает не цикл, а логика, которая, как я понял, вся завернута в условие. Т.е. разницы особой не будет, обходить все поле (оно явно не 10^5 на 10^5) или только монстров. Идеологически правильно, спору нет, но автора не спасет.
Судя по всему язык Basic'оподобный, я в них не разбираюсь особо, но должно же там быть что-то типа std::vector или списков из Blitz'a. Лучше их применять, ну и действительно копнуть в логику. Если там самая медленная часть завязана на обработку взаимодействия с игроком, вынести ее в отдельный цикл и обрабатывать только ближайших монстров.
|
(Offline)
|
|
25.06.2013, 16:50
|
#4
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Обработка 2d объектов
Сообщение от MiXaeL
Мока, вот ты сам и объяснил, почему ты не прав.
|
Где можно быть не правим в том что я написал выше? ЛоЛ
Сообщение от MiXaeL
Провисает не цикл, а логика, которая, как я понял, вся завернута в условие.
|
И провисает не цикл, а логика в цикле.
|
Сообщение от MiXaeL
Т.е. разницы особой не будет, обходить все поле (оно явно не 10^5 на 10^5) или только монстров. Идеологически правильно, спору нет, но автора не спасет.
Судя по всему язык Basic'оподобный, я в них не разбираюсь особо, но должно же там быть что-то типа std::vector или списков из Blitz'a. Лучше их применять, ну и действительно копнуть в логику. Если там самая медленная часть завязана на обработку взаимодействия с игроком, вынести ее в отдельный цикл и обрабатывать только ближайших монстров.
|
Я так понимаю ты хотел сказать, что нужно иметь сразу список монстров которые нужно обработать, а не список который проверяется monster(i) и затем применяется логика.
Короче говоря, автор выложил недостаточно инфы.
Могу предположить что он тяжко просчитывает если монстр в экране или т.п. Но делает это с каким-то извращением, что эта проверка и садит всё.
Если делать как полагается, то нужно разбивать пространство на сектора, и хранить списки монстров в секторах. И затем пробегаться только по секторам которые в камере и их спискам монстров.
Забудь о блице..
|
(Offline)
|
|
30.06.2013, 15:13
|
#5
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Обработка 2d объектов
тс, скинь код, посмотрим. только не жмись, целиком кидай
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:18.
|