1

我正在努力做到这一点,所以当你按下按钮时,按钮的命中框会变大,所以如果用户将鼠标滑离已按下按钮的边缘,它需要它在它没有之前移动得更远更长的点击次数。

这是在触摸屏设备上使用的,用户会去点击,但在释放之前滑动手指,这不会完成点击事件。

我正在使用标准的 Flash 按钮 (flash.display.SimpleButton),因此理想情况下想要一些可以与它们一起使用的东西 - 我一直将 hitTestState 作为解决方案,但我尝试的任何方法都不起作用。

假设按钮的大小开始为 50、50

当用户触发 mouse_down 事件时,我希望它变为 100 x 100,以 hitbox 为中心(不是实际的按钮,只是点击) - 然后在点击或释放时,它会淡回到 50, 50 大小。

有任何想法吗?

谢谢约翰

4

2 回答 2

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);

如果您想多次重复使用它,可以轻松地将其重构为您的 MovieClips 可以扩展的类。

希望这可以帮助。

于 2012-08-14T07:49:20.513 回答
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
     }
}
于 2012-08-13T12:03:11.813 回答