2011-10-11 30 views
8

Tôi có một movieclip chứa bitmap và tôi không thể tăng vùng nhấn. Tôi hiểu tôi có thể thêm một hình dạng trong suốt phía sau nó, nhưng điều này là để được biên dịch thông qua không khí cho ios và tôi không muốn gây ra vẽ lại không cần thiết.AS3: xác định vùng hit

Có cách nào để xác định hình chữ nhật làm vùng nhấn hoặc một giải pháp khác không?

Trả lời

15

Có trường hitArea đặc biệt cho mục đích đó.

const MOUSE_ZONE_SIZE:Number = 10; 
    const hitArea:Sprite = new Sprite() 
    hitArea.graphics.beginFill(0xFFFFFF); 
    hitArea.graphics.drawRect(-MOUSE_ZONE_SIZE, -MOUSE_ZONE_SIZE, MOUSE_ZONE_SIZE* 2, MOUSE_ZONE_SIZE* 2); 
    hitArea.mouseEnabled = false; 
    hitArea.visible = false; 
    hitArea.x = bitmap.x 
    hitArea.y = bitmap.y 
    bitmap.hitArea = hitArea; 
    addChild(bitmap); 
    addChild(hitArea); 

Đáng tiếc là ngay cả khi bạn ghi đè hitTest * Chức năng của InteractiveObject họ sẽ không được sử dụng cho chuột-sự kiện dispatching :(Nếu ai đó biết làm thế nào để buộc Flash để sử dụng phương pháp ghi đè - Tôi muốn biết điều đó quá.

+0

Vì vậy, nó sẽ không hoạt động với người nghe MouseEvent? Ngoài ra wont này gây ra redraws như chúng tôi thực sự điền vào hình chữ nhật và xử lý nó như là một bitmap? –

+1

hitArea hoạt động chính xác với các sự kiện chuột. Sự cố xảy ra với các phương pháp hitTest * thay thế tăng dần. Vì vậy, đừng lo lắng và chỉ sử dụng hitArea. Hình chữ nhật (hitArea) là vô hình nên không được vẽ. Nhưng tôi không chắc chắn về cách tính toán số lượt truy cập nội bộ - trong trường hợp may mắn nó chỉ kiểm tra rect. –

3

Bạn cũng có thể tạo nút bằng Bitmap bên trong, sau đó xác định hitArea. Về bản chất, nó cũng giống như mã Ilya đã làm. MouseEvents to it.

Hình ảnh đẹp :)

Create the button symbol

Create a new key frame in the hitArea

Draw the hit area

package{ 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 

public class main extends MovieClip 
{ 
    public function main() 
    { 
     var btn:button = new button(); 
     btn.addEventListener(MouseEvent.CLICK, clicked); 
     this.addChild(btn); 
    } 

    private function clicked(e:MouseEvent):void{ 
     trace("Clicked"); 
    } 

} 
} 

Vấn đề là điều này sẽ làm tăng dung lượng bộ nhớ và sức mạnh để làm trên iOS do đó, nó thực sự là một con ngựa một mảnh ... :(

Các vấn đề liên quan