2011-10-11 10 views
8

Mam klip filmowy zawierający bitmapę i nie będę zwiększał obszaru trafień. Rozumiem, że mogę dodać przezroczysty kształt za tym, ale ma to być kompilowane przez powietrze dla ios i nie chcę powodować niepotrzebnych przerysowań.AS3: Definiowanie obszaru uderzenia

Czy istnieje sposób na zdefiniowanie prostokąta jako obszaru uderzenia lub innego rozwiązania?

Odpowiedz

15

W tym celu dostępne jest specjalne pole hitArea.

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

Niestety nawet jeśli zastępują hitTest * funkcja InteractiveObject nie zostaną one wykorzystane do myszką wydarzeń wysyłkowych :(Jeżeli ktoś wie jak zmusić Flash stosowanie metod przesłonięte - Chciałbym wiedzieć, to też.

+0

Więc nie będzie działać z słuchaczem MouseEvent? Czy ta przyczyna również nie przerysowuje, ponieważ tak naprawdę wypełniamy prostokąt i traktujemy go jako bitmapę? –

+1

Funkcja hitArea poprawnie współpracuje ze zdarzeniami dotyczącymi myszy. Pojawiły się problemy z alternatywnymi metodami - overrinding hitTest *. Więc nie martw się i po prostu użyj hitArea. Prostokąt (hitArea) jest niewidoczny, więc nie powinien być narysowany. Ale nie jestem pewien, w jaki sposób Air oblicza trafienia wewnętrznie - w razie szczęścia wystarczy sprawdzić poprawność. –

3

Można również utworzyć przycisk z bitmapą w środku, a następnie zdefiniować hitArea, w zasadzie robi to samo, co Ilya w kodzie, jednak po dodaniu nowej instancji przycisku na scenę będzie można zastosować MouseEvents to

Piękne zdjęcia :)

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

} 
} 

Problemem jest to zwiększy ilość pamięci i mocy, aby zrobić na iOS, więc jest to naprawdę koń kawałek ... :(