Image Starling将按钮检测为图像
我有一个类,它是一个屏幕,当我移动光标时,我想检测它下面是什么对象。我在TalentBtn类中添加了一个自定义按钮,该类扩展自starling的button类,但当我跟踪它时,它是Image类的一个实例。我不能将它转换为talenTbtn,当我尝试时,它引用null。我使用hitTest(point)方法检测对象,该方法返回一个DisplayObject。你们觉得我能解决这个问题吗? 这是检测方法Image Starling将按钮检测为图像,image,flash,button,actionscript,starling-framework,Image,Flash,Button,Actionscript,Starling Framework,我有一个类,它是一个屏幕,当我移动光标时,我想检测它下面是什么对象。我在TalentBtn类中添加了一个自定义按钮,该类扩展自starling的button类,但当我跟踪它时,它是Image类的一个实例。我不能将它转换为talenTbtn,当我尝试时,它引用null。我使用hitTest(point)方法检测对象,该方法返回一个DisplayObject。你们觉得我能解决这个问题吗? 这是检测方法 private function onOverTalent(e:TouchEvent):void
private function onOverTalent(e:TouchEvent):void {
var point:Point = new Point(e.getTouch(stage).globalX, e.getTouch(stage).globalY);
displayObject = hitTest(point);
if (displayObject == null) {
return;
}
if (displayObject is Image) {
talentFound = displayObject as TalentBtn;
trace(displayObject);
trace(talentFound);
}
}
记录道的结果如下:
[object Image]
null
Button是DisplayObjectContainer的一个子类,创建它时,它会为自己添加一个背景图像和一个标签文本字段(如果有)。这两者都包含在按钮内的精灵中 要明确说明您正在尝试做什么,请尝试以下操作:
private function onOverTalent(e:TouchEvent):void
{
var point:Point = new Point(e.getTouch(stage).globalX, e.getTouch(stage).globalY);
var hit:DisplayObject = hitTest(point);
if (!hit)
{
return;
}
// Probably not a good idea, in case the interior structure of Button ever changes.
var button:Button = hit.parent.parent as Button;
trace(button);
}
}
然而,这种方法有一个问题:如果按钮内部的代码发生变化,它可能会崩溃。所以这里有一个更一般的方法:
private function onOverTalent(e:TouchEvent):void
{
var point:Point = new Point(e.getTouch(stage).globalX, e.getTouch(stage).globalY);
var hit:DisplayObject = hitTest(point);
if (!hit)
{
return;
}
var button:Button;
if (hit is Image || hit is TextField)
{
// Should be the containing Sprite now
hit = hit.parent;
while (hit)
{
button = hit as Button;
if (button)
{
break;
}
// Go up one in the display hierarchy
hit = hit.parent;
}
// None of it was a button.
if (!button)
{
return;
}
// button will be the Button object at this point.
trace(button);
}
}
但是,您是否有理由不只是收听按钮本身上的触摸事件
首先,感谢你的回答。第二,我不想给每个按钮都添加一个新的侦听器,我很确定这会不必要地浪费大量内存。现在我知道这不可能,但谁在乎呢@ferencedajka特别是在Starling中,事件是池化的,如果有的话,也不会增加太多内存使用。