delphi – 如何查看两个形状是否重叠
发布时间:2020-12-15 09:43:42 所属栏目:大数据 来源:网络整理
导读:我正在尝试编写一个简单的firemonkey测试应用程序. 我有一个表单,有一个面板(align:= alClient). 表格上有2个TCircle’s. 我已经设置了TCircle.Dragmode:= dmAutomatic. 我想拖动圆圈并在圆圈重叠时发生一些事情. 问题是:我没有在TCircle中看到任何称为重
我正在尝试编写一个简单的firemonkey测试应用程序.
我有一个表单,有一个面板(align:= alClient). 我想拖动圆圈并在圆圈重叠时发生一些事情. 如何查看拖动的形状何时与另一个形状重叠? 当然在Firemonkey中必须有一些标准方法吗? 现在pas文件看起来像: implementation {$R *.fmx} procedure TForm8.Circle1DragEnter(Sender: TObject; const Data: TDragObject; const Point: TPointF); begin if Data.Source = Circle1 then Button1.Text:= 'DragEnter'; end; procedure TForm8.Circle1DragOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; var Accept: Boolean); begin if (Data.Source = Circle2) then Button1.Text:= 'Circle2 drag'; end; procedure TForm8.Circle2DragEnd(Sender: TObject); begin Button1.Text:= 'DragEnd'; end; procedure TForm8.Circle2DragEnter(Sender: TObject; const Data: TDragObject; const Point: TPointF); begin Button1.Text:= 'DragEnter'; end; procedure TForm8.Circle2DragLeave(Sender: TObject); begin Button1.Text:= 'DragLeave'; end; procedure TForm8.Circle2DragOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; var Accept: Boolean); begin if Data.Source = Circle2 then begin Button1.Text:= 'DragOver'; Accept:= true; end; end; dfm看起来像这样: object Form8: TForm8 Left = 0 Top = 0 BiDiMode = bdLeftToRight Caption = 'Form8' ClientHeight = 603 ClientWidth = 821 Transparency = False Visible = False StyleLookup = 'backgroundstyle' object Panel1: TPanel Align = alClient Width = 821.000000000000000000 Height = 603.000000000000000000 TabOrder = 1 object Button1: TButton Position.Point = '(16,16)' Width = 80.000000000000000000 Height = 22.000000000000000000 TabOrder = 1 StaysPressed = False IsPressed = False Text = 'Button1' end object Circle1: TCircle DragMode = dmAutomatic Position.Point = '(248,120)' Width = 97.000000000000000000 Height = 105.000000000000000000 OnDragEnter = Circle1DragEnter OnDragOver = Circle1DragOver end object Circle2: TCircle DragMode = dmAutomatic Position.Point = '(168,280)' Width = 81.000000000000000000 Height = 65.000000000000000000 OnDragEnter = Circle2DragEnter OnDragLeave = Circle2DragLeave OnDragOver = Circle2DragOver OnDragEnd = Circle2DragEnd end end end 解决方法
一般问题很难并且称为碰撞检测 – 您可以谷歌这个术语来找到相关的算法.
圆碰撞检测的特殊情况很简单 – 只需计算圆心之间的距离即可.如果获得的距离小于圆的半径之和,则圆重叠. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |