如何找到并释放glScene对象....?

时间:2013-04-19 06:00:32

标签: delphi delphi-7 glscene

我将此代码写入动态创建led

var
  fLed: Tglhudsprite;
  i,fImgSnapNum: integer;
  ............
for i := 0 to fImgSnapNum - 1 do
  begin
    fLed := TGLHUDSprite.CreateAsChild(MainForm.Dummy_Sound);
    fLed.Name := 'fLed' + IntToStr(i);
    fled.Material.MaterialLibrary := MatLib;
    fLed.Material.LibMaterialName := 'led';
    fLed.Width := fLed.Material.GetActualPrimaryTexture.Image.Width;
    fLed.Height := fLed.Material.GetActualPrimaryTexture.Image.Height;
    fled.SetSize(18,18);
    fled.Position.X := 530 + (i * 30);
    fled.Position.Y := 600;
    fled.Visible := true;
end;

如何找到并释放fLed glscene对象......?

谢谢...... 我使用delphi7和GLScene组件......

1 个答案:

答案 0 :(得分:2)

释放对象的显而易见的方法就是调用他们的Free方法,就像释放任何其他对象一样。显示的代码会创建许多对象,因此您需要通过某种方式释放所有对象;只有最近创建的单个对象仍然在fled变量中。对此的简单解决方案就是在某个容器中保留这些对象的列表,例如TObjectList。然后迭代容器并释放其内容。

但是,您可能不需要单独的容器。传递给sprite的构造函数的owner参数维护着它拥有的所有东西的列表。您可以对其Components数组进行迭代,就像使用TComponent的任何其他后代一样。

最后,由于您要为所有对象分配Name属性,因此可以调用Dummy_Sound.FindComponent按名称查找每个精灵组件。 (如果你按名称搜索这些动态分配的组件,那么就没有理由首先分配Name属性。)