我试图这样做,当你按下一个按钮时,按钮的命中框变大,所以如果用户将鼠标从已按下按钮的边缘滑出,则需要它进一步移动在它不再计算点击之前。
这将用于触摸屏设备,用户将在其中点击,但在释放前滑动手指,这将无法完成点击事件。
我正在使用标准的flash按钮(flash.display.SimpleButton),所以理想情况下会喜欢与它们一起工作的东西 - 我一直在看hitTestState作为解决方案,但我正在努力的工作。
假设按钮的大小为50,50
当用户触发mouse_down事件时,我希望它变为100乘100,以hitbox为中心(不是实际按钮,只是命中) - 然后在点击或释放时,它会淡化为50,50尺寸。
有什么想法吗?
由于 约翰
答案 0 :(得分:2)
用影片剪辑替换您的按钮。有很多方法可以做到,但这里有一个有效的结构。
上方和上方的较小命中区域:
在下框中有一个更大的区域:
(显然你会将命中区域设为零alpha,但我已将其着色,以便您可以看到正在发生的事情。)
然后您只需要一个非常简单的代码。给定一个名为MyButton的舞台实例:
import flash.display.MovieClip;
import flash.events.MouseEvent;
var MyButton:MovieClip;
MyButton.buttonMode = MyButton.useHandCursor = true;
function handleMouseOver($e:MouseEvent):void
{
MyButton.gotoAndStop("Over");
}
function handleMouseDown($e:MouseEvent):void
{
MyButton.gotoAndStop("Down");
}
function handleMouseUp($e:MouseEvent):void
{
MyButton.gotoAndStop("Up");
}
MyButton.addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver);
MyButton.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
MyButton.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
如果您想多次重复使用,可以轻松地将其重构为您的MovieClip可以扩展的类。
希望这有帮助。
答案 1 :(得分:1)
好吧,放弃hitbox并转到hitTestPoint
会更容易。
所以你可以加上这个:
var hitObject:Sprite = new Sprite();
//Create a new Sprite
hitObject.graphics.beginFill(0);
hitObject.graphics.drawRect(0,0,50,50);
hitObject.endFill();
//Draw a rectangle on the sprite, this is your hitbox
hitObject.alpha = 0;
//Make it invisible
hitObject.x = button.x;
hitObject.y = button.y;
addChild(hitObject);
addEventListener(MouseEvent.MOUSE_DOWN, mDownEvent);
addEventListener(Event.ENTER_FRAME, enterFrameEvent);
function mDownEvent(e:MouseEvent){
hitObject.scaleX = hitObject.scaleY = 2;
//When the mouse is down the object gets 2 times as big (100 pixels)
if(hitObject.hitTestPoint(mouseX,mouseY, true)){
//You have clicked your hitbox
}
}
function enterFrameEvent(e:Event){
if(hitObject.scaleX > 1){
hitObject.scaleX -= 0.1;
hitObject.scaleY -= 0.1;
//Decrease the hitbox his size when you have pressed the mouse, 0.1 is the speed the hitbox gets smaller
}
}