【发布时间】:2013-09-08 06:57:24
【问题描述】:
好的,我有几个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 事件,因此不会添加任何块。知道如何解决这个问题吗?
由于 cmets 而编辑: 到目前为止,这些都是全局变量
SetBlocks : boolean;
totalblocks : integer;
CreateCube : array[1..10000] of tcube;
cubeData : array[1..10000] of string;
设置块 - 一旦用户单击其中一个图像,设置为 true,即设置块上的图像类型。我已经检查过了,当主要问题发生时,setblocks 仍然是真的。
procedure TForm2.Image1Click(Sender: TObject);
begin
updateblocktype('Lava.bmp');
setblocks := true;
end;
总块数 - 只是游戏中的总块数,当前用于创建数组中的下一个立方体。从 1 开始,每次创建块时添加 1。当我遇到主要问题时,totalblocks 的值也不会上升。
-cubedata 只是我在多维数据集类完成之前使用的一种快速方法,它保存了图像的名称,因此当加载地图时,它将提取该多维数据集的图像名称。因此 cube[totalblocks] 将具有图像 cubedata[totalblocks]
【问题讨论】:
-
您没有正确实现我发布到您的其他问题的代码。你应该再读一遍,注意我把
try放在哪里(以及如何)。 -
@KenWhite 问题是你有 cube1 但它可能是点击了 500 多个立方体中的任何一个。因此我必须得到立方体。因此代码
cube := sender as TCube必须在oldcubeclick := onclick和onclick = nil之前。 -
@David:当然可以。在其他线程中查看我的任何 cmets。你有阅读困难吗?我已经在那里向你解释了我的回答好几次了。我不明白在这里重复它会如何提高你的理解。 (无论如何它属于另一个问题,而不是这个。
-
我保证,如果您提供 SSCCE,您会很快得到答复。
-
@SertacAkyuz XE5 (!!) 中修复的错误之一是这个:qc.embarcadero.com/wc/qcmain.aspx?d=117827 在这里他们使用毕达哥拉斯但不知何故忘记在求和平方后调用
Sqrt。令人震惊的是,这些东西首先是编写的,然后通过了质量体系。
标签: delphi delphi-xe2 firemonkey