forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Удаление типа с ентитями! (http://forum.boolean.name/showthread.php?t=8031)

Baisangur 21.03.2009 18:07

Удаление типа с ентитями!
 
Привет!
Есть такая у меня функция, удаляет типы и ентити связанные с ними!
Вот этот код:
Код:

        For objct.mapObject=Each mapObject
                FreeEntity(objct\mesh)
                Delete objct
        Next

По идее обязан очищать память от ентитей(скажу по секрету в этом типе у меня дома и деревья), но блин, он ничего не удаляет!!! Т.е. при загрузке нового уровня объекты старого остаются на своих места =((.. Что же это за лаг такой?

NitE 21.03.2009 18:17

Ответ: Удаление типа с ентитями!
 
с виду всё прально, ошибка не здесь
Код:

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

light=CreateLight()
cam=CreateCamera()
MoveEntity cam,0,0,-30

Type ent
Field mesh
Field x,y,z
End Type

Function create()
e.ent = New ent
e\mesh = CreateCube()
e\x=Rnd(-10,10)
e\y=Rnd(-10,10)
e\z=Rnd(-10,10)
PositionEntity e\mesh,e\x,e\y,e\z
End Function

For i=1 To 20
create()
Next

Repeat

If KeyHit(57)
For e.ent = Each ent
FreeEntity e\mesh
Delete e
Next
EndIf

UpdateWorld()
RenderWorld()
Flip

Until KeyHit(1)
End

например это у меня работает на ура ))

Baisangur 21.03.2009 18:35

Ответ: Удаление типа с ентитями!
 
ОМГ! Срочно закройте тему, прощу прощения! Я втупую два раза из создавал xD

=============
Нет, проблема осталась!
Код:

For Objects.mapObject=Each mapObject
                DebugLog(Objects\mesh)
                FreeEntity(Objects\mesh)
                DebugLog(Objects\mesh)
                DebugLog("==========")
                Delete Objects
        Next

Лог:
126912584
126912584
==========
127454328
127454328
==========
125644752
125644752
==========
Значит не удалаяется, кстати у меня там через LoadMesh эти ентити грузятся, может чето еще надо писать?

jimon 21.03.2009 20:01

Ответ: Удаление типа с ентитями!
 
Baisangur
они удаляются, просто переменная не устанавливается в ноль

Baisangur 21.03.2009 20:38

Ответ: Удаление типа с ентитями!
 
Я уже ее сам устанавливаю в ноль! Все пофигу ему!
Чтобы удалились старые, нужно чтобы их место заняли новые, как я уже тока не удалял их они всеравно остаются.. =(

Main Cry 21.03.2009 21:18

Ответ: Удаление типа с ентитями!
 
Цитата:

Сообщение от Baisangur (Сообщение 101309)
они всеравно остаются

скинь свой код с инициализацией объектов типа.

Baisangur 21.03.2009 22:50

Ответ: Удаление типа с ентитями!
 
Хм.. оказывается надо всетаки спать более 8 часов в 2 дня дня... =))
Оказывается я забыл очищать массив куда у меня парсятся пути до файлов моделей =)

ABTOMAT 22.03.2009 01:20

Ответ: Удаление типа с ентитями!
 
Цитата:

Сообщение от Baisangur (Сообщение 101309)
Я уже ее сам устанавливаю в ноль! Все пофигу ему!
Чтобы удалились старые, нужно чтобы их место заняли новые, как я уже тока не удалял их они всеравно остаются.. =(

Чё-т херню ты какую-то нагнал...
1. Установка переменной в нуль ничего не даст :)
Переменная - это всего лишь ссылка. То есть назначив в неё ноль ты просто потеряешь ссылку а объект останется где и был.
Надо FreeEntity делать на ту переменную, а то что после FreeEntit6y в ней цифра остаётся - то это роли не играет - объект-то уже удалён.
2. "Чтобы удалились старые, нужно чтобы их место заняли новые"
Если так сделаешь то просто ссылки заменятся ссылками на новые антити, а старые останутся) Т.е. тоже эффекта не даст.

З.Ы. А спать и правда надо. Я вон меньше 6 час/сутки не могу, хотя и стараюсь.

HolyDel 22.03.2009 01:22

Ответ: Удаление типа с ентитями!
 
a = createcube()
a = createcube()

все. первый куб для нас потерян, не удалить его, не переместить. разве что только ClearWorld()

Baisangur 22.03.2009 23:02

Ответ: Удаление типа с ентитями!
 
Спс ХолиДел и Автомат за помощь! Проблема уже решена, я строю объекты на локации из файла такого вида:
Код:

name=tree
type_num=2
x=217.802
y=29.4682
z=275.679
angle=-36.0
scale=1.95
name=tree
type_num=2
x=253.182
y=28.8648
z=226.584
angle=-18.0
scale=2.14

И у меня в отдельном файле функция есть, которая все это дело парсит в 3Д объекты и вставляет их в сцену, поворачивает, скейлит.. просто пути до них я сохраняю в массив(для некоторых целей), и при загрузке следующей локации я забывал очищать этот самый массив и у меня парсилось все то что уже было в массиве, если в сцене новой объектов было меньше чем в старой то те что есть занимали места прежних, а те что не заменялись так и выводились поновай. =) Все проблема решена! Тему можна закрыть!


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

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