0
我試圖刪除GLScene容器中的所有場景對象,我使用下面的代碼片段來做到這一點,但由於某些未知的原因,它崩潰引發了分段錯誤,當我嘗試釋放目的。在GLScene中加載新場景
我試着一行一行地調試,它發現不知何故容器類Glscene1.Objects[i]
包含一些莫名的類,它有'#2'類的名字。我試圖通過調用Free方法的相同代碼片段來運行,然後不會發生任何異常,對象不會被刪除,但是對象類名稱中存在一致性。
for i := 0 to GLScene1.Objects.Count - 1 do
begin
if (not GLScene1.Objects[i].ClassNameIs('TGLCamera')) and
(not GLScene1.Objects[i].ClassNameIs('TGLLightSource')) and
(not GLScene1.Objects[i].ClassNameIs('TGLDummyCube')) and
(not GLScene1.Objects[i].ClassNameIs('TGLXYZGrid')) and
(not GLScene1.Objects[i].ClassNameIs('TGLSceneRootObject')) then
begin
// if GLScene1.Objects[i].Count > 0 then
// GLScene1.Objects[i].DeleteChildren;
GLScene1.Objects.Remove(GLScene1.Objects[i],false);
if GLScene1.Objects[i] <> nil then // I comment out these lines
GLScene1.Objects[i].free; // I comment out these lines
end;
end;
嗨,Sonya。我建議反轉for,即爲i:= GlScene1.Objects.Count-1 downto 0 do ...否則,您嘗試刪除的對象索引可能已超出範圍。 –
對於谷歌來說,減計數也是擦除場景中物體的好策略,但除此之外,不是排除預期的分類類型,而是嘗試僅擦除預期的類類型,例如GLFreeForm,GLLines等等。由於某些未知的原因,GLScene根目錄在Object容器類中有一些引用或阻止對象,您也可以刪除它們,這是我暫時學到的。 –