2012-08-13 6 views
1

버튼을 눌렀을 때 버튼의 히트 박스가 커지므로 사용자가 이미 누른 버튼의 가장자리에서 마우스를 슬라이드하면 더 멀리 이동해야합니다. 클릭을 더 이상 고려하지 않습니다.mousedown에서 버튼의 히트 박스를 동적으로 증가시키고 마우스를 올려 놓으면 복원됩니까?

이것은 터치 스크린 장치에서 사용됩니다. 사용자가 클릭하여 이동하지만 놓기 전에 손가락을 밀면 클릭 이벤트가 완료되지 않습니다.

표준 플래시 버튼 (flash.display.SimpleButton)을 사용하고 있으므로 이상적으로는 그 버튼과 함께 작동하는 무언가가 좋을 것입니다. 솔루션으로 hitTestState를 계속 살펴 봤지만 아무것도 시도하지 않았습니다.

50 사용자가 MOUSE_DOWN 이벤트를 트리거

, 나는 그것이 hitbox에서 (가 아닌 실제 버튼을, 바로 히트로를 중심으로, (100) 100가되고 싶습니다의 크기가 50 버튼 시작한다고 가정 해 봅시다) - 클릭하거나 놓으면 50,50 크기로 다시 페이드됩니다.

아이디어가 있으십니까?

감사 존

+0

John - '표준 플래시 버튼'이라고 말하면 flash.display.SimpleButton 또는 fl.controls.Button 또는 mx.controls.Button을 의미합니까? – JcFx

+0

flash.display.SimpleButton을 포함하도록 업데이트되었습니다. 감사합니다! –

+0

플래시 10.1 이상을 사용하고 있습니까? 그렇다면 [TouchEvent] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/TouchEvent.html)를 살펴 보았습니다. 터치의 접촉 영역을 나타내는 크기 특성 ('sizeX' 및'sizeY')을가집니다. – NoobsArePeople2

답변

2

무비 클립으로 버튼을 교체합니다. 여기에는 여러 가지 방법이 있지만 작동하는 구조가 하나 있습니다.

위 이상 프레임에 작은 히트 영역 :

Up Frame

아래 프레임에 더 큰 영역으로 :

Down Frame

가 (물론 당신이 히트 영역을 만들 것 알파가 0이지만 무슨 일이 일어 났는지 알 수 있도록 색을 칠했습니다.)

다음 모두 n eed는 매우 간단한 코드입니다. 이 여러 번 다시 사용하려는 경우

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

은, 그것은 쉽게 무비 클립을 확장 할 수있는 클래스로 리팩토링 할 수 있습니다 MyButton에라는 무대에서 인스턴스을 감안할 때.

희망이 도움이됩니다.

+0

결국이 문제가 발생했습니다. - 감사합니다! –

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 
    } 
} 
+0

각 단추마다 코드를 구분할 필요가 없으며이를 기존 단추에 동적으로 적용 할 수 있어야합니다. –

+0

음,이 버튼을'button.addChild (hitObject)'를 사용하여 단추에 추가 한 다음'hitObject.x = button.x' 및'hitObject.y = button.y' 줄을 제거해야합니다. – tversteeg

관련 문제