2012-08-13 22 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

相關問題