forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Очищаем память от детей правильно (http://forum.boolean.name/showthread.php?t=28)

impersonalis 04.09.2005 22:13

Допустим необходимо удалить все чайлды заданного меша. Первым в голову может прийти решение:
Код:

For i=1 To CountChildren(parent_mesh)
        FreeEntity GetChild(parent_mesh,i)
Next

Но работать корректно оно не будет. :unsure:
Всё дело в том, что стек соответствия номер_чайлда-хэндл обновится сразу после первого же удаления. Таким образом, место только что удалённого ребёнка будет занято следующим, обращение в цикле же будет ко второму ( т.е. получается к 3ьему - они же все сдвинулись влево). В результате удалён первый и третий, второй - остался и так далее.
Нам достаточно всё время удалять первый чайлд:
Код:

For i=1 To CountChildren(parent_mesh)
        FreeEntity GetChild(parent_mesh,1)
Next

Блитц сам разберётся, кого и куда надо подвинуть :)


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

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