2012-08-13 64 views
1

我试图做到这一点,所以当你按下一个按钮,按钮的hitbox变大,所以如果用户滑动鼠标离开已按下的按钮的边缘,它需要它进一步前行它不再只是点击而已。动态增加mousedown上的按钮的hitbox,并在鼠标上恢复?

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

我正在使用标准的flash按钮(flash.display.SimpleButton),所以理想情况下会喜欢与他们一起工作的东西 - 我一直在寻找hitTestState作为解决方案,但没有任何我尝试的作品。

假设按钮开始为大小50,50

当用户触发MOUSE_DOWN事件,我想它由100变成100,中心作为一个击中格(而不是实际的按钮,只是命中) - 然后点击或释放,它会褪色回到50,50尺寸。

任何想法?

感谢 约翰

+0

约翰 - 当你说'标准闪光按钮',你的意思是flash.display.SimpleButton,或fl.controls.Button,或mx.controls.Button? – JcFx 2012-08-13 09:09:11

+0

更新为包含flash.display.SimpleButton,谢谢! – 2012-08-14 01:20:14

+0

你使用Flash 10.1还是更新?如果是这样,你看过[TouchEvent](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/TouchEvent.html)。它具有尺寸属性('sizeX'和'sizeY'),用于指示触摸的接触区域。 – NoobsArePeople2 2012-08-14 01:57:56

回答

2

与影片剪辑替换您的按钮。有很多方法可以做到,但这里有一个可行的结构。

较小的点击区域的并在框架:

Up Frame

随着下架较大的区域:

Down Frame

(很明显,你会做的点击区域零阿尔法,但我已经上色,所以你可以看到发生了什么。)

然后你所有n eed是一个非常简单的代码。鉴于在舞台上的一个实例名为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); 

如果你想重新使用了几次,就可以很容易地重构为一类,你的影片剪辑可以延长。

希望这会有所帮助。

+0

最后一致 - 谢谢! – 2012-08-14 10:58:21

1

那么它会更容易沟击中格,去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 
    } 
} 
+0

最好是,我不必为每个按钮分开代码,并且可以将其动态应用于预先存在的按钮。 – 2012-08-14 01:20:43

+0

那么你可以使用'button.addChild(hitObject)'将这个movieClip添加到按钮中,然后你必须删除'hitObject.x = button.x'和'hitObject.y = button.y'这两行。 – tversteeg 2012-08-14 11:16:53