2011-10-11 26 views
8

Tengo un clip de película que contiene un mapa de bits y no quiero aumentar el área de impacto. Entiendo que puedo agregar una forma transparente detrás de esto, pero esto se compilará por aire para iOS y no quiero causar rediseños innecesarios.AS3: definición del área de impacto

¿Hay alguna manera de definir un rectángulo como el área de golpe u otra solución quizás?

Respuesta

15

Hay un campo hitArea especial para esos fines.

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

Desafortunadamente, incluso si se reemplaza hitTest * Función de InteractiveObject no van a ser utilizados para ratón-eventos despacho :(Si alguien sabe cómo forzar Flash para utilizar métodos sobrescritos - Me gustaría saber también.

+0

¿No funcionará con un escucha de MouseEvent? ¿También no se vuelve a dibujar esto porque llenamos el rectángulo y lo tratamos como un mapa de bits? –

+1

hitArea funciona correctamente con eventos de mouse. Los problemas vinieron con la alternativa: eliminar métodos hitTest *. Así que no te preocupes y solo usa hitArea. Rectangle (hitArea) es invisible, por lo que no debe dibujarse. Pero no estoy seguro de cómo Air calcular golpea internamente - en caso de suerte, simplemente verifique rect. –

3

También puede crear un botón con Bitmap dentro de él y luego definir el hitArea. Esencialmente hace lo mismo que Ilya en el código. Sin embargo, cuando agrega la nueva instancia del botón al escenario, podrá aplicarlo MouseEvents a él.

Fotografías bonitas :)

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

} 
} 

El problema es que esto aumentará la cantidad de memoria y el poder de hacer en el IOS por lo que es realmente un caballo de una pieza ... :(

Cuestiones relacionadas