在flex编程中我们有时需要判断两个对象是否相交使用obj1.hitTestObject(obj2)方法。
下面给出一个具体的示例。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" borderColor="#FFFFFF" >
<mx:Script>
<![CDATA[
import mx.controls.*;
import mx.core.*;
private var lines :UIComponent = new UIComponent ();
private var lockX:int=0;
private var lockY:int=0;
private var isMove:Boolean=false;
private function Draw():void{
lines.id="line_1";
lines.graphics.lineStyle(2,0x0099ff,1);
lines.graphics.moveTo(100,100);
lines.graphics.lineTo(300,300);
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){
var obj:UIComponent=UIComponent(e.target);
if(e.target is UIComponent && obj.id=="line_1")
{
lockX=mouseX-lines.x;
lockY=mouseY-lines.y;
isMove=true;
}
});
stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,function (e:MouseEvent)
{
isMove=false;
});
addElement(lines);
}
private function mouseMoveHandler(event:MouseEvent):void {
if(isMove)
{
lines.x=this.mouseX-lockX;
lines.y=this.mouseY-lockY;
if(lines.hitTestObject(myCanvas))
{
lblMiddle.text="进来了";
}
else
{
if(lblMiddle.text=="进来了")
{
lblMiddle.text="出去了";
}
}
}
}
]]>
</mx:Script>
<mx:Canvas id="myCanvas" x="200" y="200" width="100" height="100" alpha="0.5" backgroundColor="0xff0000"></mx:Canvas>
<mx:Button x="20" y="20" label="画线" click="Draw()"/>
<mx:Label x="300" y="300" width="400" height="200" fontSize="72" color="0xFF0000" id="lblMiddle"/>
</mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" borderColor="#FFFFFF" >
<mx:Script>
<![CDATA[
import mx.controls.*;
import mx.core.*;
private var lines :UIComponent = new UIComponent ();
private var lockX:int=0;
private var lockY:int=0;
private var isMove:Boolean=false;
private function Draw():void{
lines.id="line_1";
lines.graphics.lineStyle(2,0x0099ff,1);
lines.graphics.moveTo(100,100);
lines.graphics.lineTo(300,300);
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){
var obj:UIComponent=UIComponent(e.target);
if(e.target is UIComponent && obj.id=="line_1")
{
lockX=mouseX-lines.x;
lockY=mouseY-lines.y;
isMove=true;
}
});
stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,function (e:MouseEvent)
{
isMove=false;
});
addElement(lines);
}
private function mouseMoveHandler(event:MouseEvent):void {
if(isMove)
{
lines.x=this.mouseX-lockX;
lines.y=this.mouseY-lockY;
if(lines.hitTestObject(myCanvas))
{
lblMiddle.text="进来了";
}
else
{
if(lblMiddle.text=="进来了")
{
lblMiddle.text="出去了";
}
}
}
}
]]>
</mx:Script>
<mx:Canvas id="myCanvas" x="200" y="200" width="100" height="100" alpha="0.5" backgroundColor="0xff0000"></mx:Canvas>
<mx:Button x="20" y="20" label="画线" click="Draw()"/>
<mx:Label x="300" y="300" width="400" height="200" fontSize="72" color="0xFF0000" id="lblMiddle"/>
</mx:Application>
测试点与对象是否相交。
myCanvas.hitTestPoint(x,y,true)
myCanvas目标对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人