わかりました、私は そのようなものをいくつか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;
問題は、キューブの 1 つで同じ場所をクリックすると、OnClick イベントが発生しないため、ブロックが追加されないことです。これを修正する方法はありますか?
コメントによる編集: 現在のところ、これらはすべてグローバル変数です
SetBlocks : boolean;
totalblocks : integer;
CreateCube : array[1..10000] of tcube;
cubeData : array[1..10000] of string;
Setblocks - ユーザーが画像の 1 つをクリックすると true に設定され、ブロック上の画像の種類が設定されます。私はこれを確認しましたが、主な問題が発生したときでも setblocks は true です。
procedure TForm2.Image1Click(Sender: TObject);
begin
updateblocktype('Lava.bmp');
setblocks := true;
end;
Totalblocks - 配列内の次のキューブを作成するために現在使用されている、ゲームの総ブロック数です。1 から始まり、ブロックが作成されるたびに 1 が追加されます。また、主な問題がある場合、totalblocks の値は上がりません。
-cubedata は、キューブ クラスが完全になるまで使用した簡単な方法です。画像の名前が保存されます。したがって、マップが読み込まれると、そのキューブの画像名が取得されます。したがって、cube[totalblocks] は画像 cubedata[totalblocks] を持ちます。