2013-04-19 10 views
0

내가 어떻게 찾을 수glScene 개체를 찾고 무료로 사용하는 방법은 무엇입니까?

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; 

을 주도하고 무료로 달아났다 GLScene 데모 개체를 만들 동적으로이 코드를 쓴 ...?

+0

무료로 전화 할 수는 없습니까? –

+0

로브 아니, 그럴 수 없어. 내가 fled.free로 해방했을 때 동적 생성을 다시하면 "구성 요소"fled0가 이미 존재한다는 오류가 발생합니다 ... – azrael11

답변

2

개체를 확보 할 수있는 확실한 방법은 당신이 다른 개체를 무료로 원하는만큼, 자신의 Free 방법 같은를 호출하는 것입니다 ... 내가 delphi7와 GLScene 데모 구성 요소를 사용 ... 감사합니다. 표시된 코드는 많은 객체를 생성하므로 모든 객체를 자유롭게 사용할 수있는 방법이 필요합니다. 가장 최근에 생성 된 하나의 객체 만 여전히 fled 변수에 있습니다. 순진한 해결책은 단순히 컨테이너에있는 객체의 목록을 유지하는 것입니다 (예 : TObjectList). 그런 다음 컨테이너를 반복하고 내용을 해제합니다.

별도의 컨테이너가 필요하지 않을 수도 있습니다. 스프라이트의 생성자에 전달한 owner 인수는 자신이 소유 한 모든 항목의 목록을 유지 관리합니다. TComponent의 다른 하위 항목과 마찬가지로 Components 배열을 반복 할 수 있습니다.

마지막으로 모든 객체의 Name 속성을 할당 했으므로 Dummy_Sound.FindComponent을 호출하여 이름별로 각 스프라이트 구성 요소를 찾을 수 있습니다. (일 경우 동적으로 할당 된 구성 요소를 이름별로 검색하지 않으면 처음에는 Name 속성을 지정할 이유가 거의 없습니다.)

+0

고맙습니다. 내 실수는 dummycube가 아닌 glscene을 호출하는 것입니다. .. 아무것도 반환하지 않는다. .. 당신은 나의 마음을 해방한다. .. Thank you – azrael11