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

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

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

Ответ
 
Опции темы
Старый 07.04.2011, 19:02   #1
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Восклицание Проблемка с памятью

есть класс


type TPro
field COUNT_FRAMES:int
field IMAGE:TImage
end type


type Ololo extends TObject
field PRO:TPro
field X,Y:int
field CurrentFrame:int

method Draw()
DrawImage PRO.IMAGE,X,Y,CurrentFrame
end method
end type


Когда вызывается метод Draw() типа Ololo, прога начинает жрать память , от 58 до 400 мб.
оказалось, что память жрет строчка
DrawImage PRO.IMAGE,x,y,CurrentFrame
(Offline)
 
Ответить с цитированием
Старый 07.04.2011, 19:28   #2
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблемка с памятью

Код создания объектов в студию!
__________________
(Offline)
 
Ответить с цитированием
Старый 07.04.2011, 23:10   #3
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Проблемка с памятью

Охх... Крорче:
Type TTreePro
	Global LIST:TList=CreateList()
	Field IMAGE:TImage
	Field SPEED:Int
	Field COUNT_F:Int
	Field ID:Int
	
	Function GetRandom:TTreePro()
		R=Rand(1,CountList(LIST))
		For T:TTreePro=EachIn LIST
			C:+1
			If(C=R) Return T
		Next 
	End Function 
End Type
Весьма бреадовшный код прототипов деревьев. Парсер читает файл, вычиывает из него параметры дерева, а потом идет сама картинка в формате PNG, просто дописанная по байтам в конец файла. Вот на ее начало я смещаю указатель в файле, и передаю в функцию LoadAnimImage в кач-ве пути (path:Object)

Картинка грузится верно.

Вот код деревьев:

Type TTree Extends TObject
	Field PRO:TTreePro 'Вот наш линк на прототип
	Field Timer:Int 
	Field CurrentFrame:Int=0
	
	Function Create(X#,Y#,Pro:TTreePro)
		If(PRO=Null) Return 
		T:TTree=New TTree
		T.X=X
		T.Y=Y
		T.NEED_INDEXED=0 'нам не нужна индексация в секторах!
		T.RENDER_SIZE=Max(PRO.IMAGE.Width,PRO.IMAGE.Height)
		T.PRO=PRO
		ListAddLast FULL_LIST,T
	End Function 
	
	Method Math()
		timer:+1
		If(Timer>PRO.Speed)
			Timer=0
			CurrentFrame:+1
			If(CurrentFrame=PRO.COUNT_F) CurrentFrame=0
		EndIf 
	End Method 
	
	Method Draw()
		DrawImage PRO.IMAGE,X,Y,CurrentFrame
	End Method 
	
	Method Destroy()
	End Method 
End Type
(Offline)
 
Ответить с цитированием
Старый 07.04.2011, 23:57   #4
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблемка с памятью

Вот те совет избегай называть параметры так же как члены класса. Экранирование локальными переменными может здорово попортить кровь.

В предоставленном коде вроде бы как всё норм.
А с чего ты решил что память жрёт, т.е. оно же должно если память течёт хавать постоянно... если же однократное увеличение то это просто аллокейшн включая память на будущее.
__________________
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 00:24   #5
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Проблемка с памятью

Ну..Ты знаешь, скачок с 58 мегов до полгига оперативы за рисование одной картинки, это слишком... Тем более глюкает при этом неслабо. Где то все же происходит утечка, блин
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 09:37   #6
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Проблемка с памятью

Забыл совсем сказать. Картинки дерева - анимированные. 100 кадров О_о. размером [300х300 px примерно.
В PNG оно занимает 5 метров диска. А в оперативе, когда развернется, и того наверно больше. Но ведь он ее предварительно загрузил, какого фига он начинает отжирать память при рисовании то????
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 11:07   #7
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблемка с памятью

ну тогда ты попал, 300х300 в памяти станет 512*512, 512*512*100*4 = 100 мегов как минимум.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (08.04.2011)
Старый 08.04.2011, 11:15   #8
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Проблемка с памятью

ТОгда не будет деревьев анимированных в игре
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 11:34   #9
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблемка с памятью

может чуть меньше фреймов? или в требованиях указать 2гб RAM минимум
__________________
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 11:49   #10
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Проблемка с памятью

2 ГБ RAM для 4-х видов деревьев? Не, лучше уж тогда сделать их статическими. Хотя движок поддерживает любое кол-во фреймов...
Надо попробовать кадров 10 сделать. И картинку пожать.
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 11:55   #11
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблемка с памятью

кадры 256*256 сократят потери в 4 раза например.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (08.04.2011)
Старый 08.04.2011, 12:02   #12
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Проблемка с памятью

Хыхы Сделал-таки 16 кадров. Заметна покадровость, но пофиг. Жрет теперь 58 мегов по максимуму. Тока косячок - движок рисует только то, что находится в пределах экрана. Т.е. пока деревья вдалеке, они не рисуются. Но как начинаю подходить - пару секунд подтормаживает (при этом хавает ~ 16 M а потом уже все ОК.
Т.е. это уже мне не исправить, это есть косяк блица, и после загрузки надо тупо прорисовать все кадры всех деревьев, чтоб они потом не лагали. Ща будет тест
[UPD]
ПРорисовав все кадры всех деревьев после загрузки медии перестало лагать. Всем спасибо
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 15:00   #13
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Проблемка с памятью

Совет насчёт кадров 256x256 - дельный. Плюс подбери размер самой текстуры, максимально квадратный. Если 16 кадров, то вся текстура будет 1024х1024 - что сильно снизит затраты на видео память.
(Offline)
 
Ответить с цитированием
Старый 08.04.2011, 15:15   #14
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблемка с памятью

В Бмаксе квадратным должен быть именно кадр, т.к. текстура физически режется на более мелкие, размер исходной текстуры значения не имеет.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (08.04.2011)
Ответ


Опции темы

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

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


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


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