好的,我有几个 这样TCubes
的OnClick
procedure TForm2.cubeClick(sender: TObject);
begin
handleCubeClick(Sender);
end;
然后 HandleCubeClick 像这样
Procedure TForm2.HandleCubeClick(Sender: TObject);
var
cube:TCube;
oldCubeClick: TNotifyEvent;
begin
try
cube:= Sender as TCube;
//save old hadler
oldCubeClick := cube.OnClick;
//clear it to disale
cube.onclick := nil;
if setblocks then
begin
label4.Text := 'cubed clicked';
totalblocks := totalblocks +1 ;
CreateCube[totalblocks]:=tcube.Create(self);
CreateCube[totalblocks].Visible := true;
CreateCube[totalblocks].Name := 'cubename'+inttostr(totalblocks);
CreateCube[totalblocks].Position.x := cube.Position.X;
CreateCube[totalblocks].Position.Y := cube.Position.y;
CreateCube[totalblocks].Position.Z := cube.Position.Z -1;
CreateCube[totalblocks].Material.Texture.CreateFromFile(gamedir+'\pics\'+blocktype);
CubeData[totalblocks] := blocktype;
CreateCube[totalblocks].Material.Lighting := false;
CreateCube[totalblocks].Material.Modulation := TTextureMode.tmReplace;
CreateCube[totalblocks].Parent := viewport3d1;
CreateCube[totalblocks].OnClick := cubeClick;
CreateCube[totalblocks].OnMouseDown := mousedown;
label4.Text := 'cube made: '+inttostr(totalblocks);
end;
finally
//Reset handler again to enable
cube.OnClick := OldCubeclick;
end;
end;
所以当我左键单击一个立方体时,它应该在它上面创建另一个立方体。如果我右键单击它将通过 OnMouseDown 删除多维数据集
procedure TForm2.mouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single; RayPos, RayDir: TVector3D);
var
cube: Tcube;
begin
if button = Tmousebutton.mbRight then
begin
cube := Sender as Tcube;
cube.Destroy;
end;
viewport3d1.Repaint;
end;
问题是,如果我单击其中一个立方体上的相同位置,它永远不会触发 OnClick 事件,因此不会添加任何块。知道如何解决这个问题吗?
因评论而编辑:截至目前,这些都是全局变量
SetBlocks : boolean;
totalblocks : integer;
CreateCube : array[1..10000] of tcube;
cubeData : array[1..10000] of string;
Setblocks - 一旦用户单击其中一个图像,设置为 true,即设置块上的图像类型。我已经检查过了,当主要问题发生时,setblocks 仍然是真的。
procedure TForm2.Image1Click(Sender: TObject);
begin
updateblocktype('Lava.bmp');
setblocks := true;
end;
Totalblocks - 只是游戏中的总块数,当前用于创建数组中的下一个立方体。从 1 开始,每次创建块时添加 1。当我遇到主要问题时,totalblocks 的值也不会上升。
-cubedata 只是我在多维数据集类完成之前使用的一种快速方法,它保存了图像的名称,因此当加载地图时,它将提取该多维数据集的图像名称。因此 cube[totalblocks] 将具有图像 cubedata[totalblocks]