Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/06/2008, 14:11
marianocc
 
Fecha de Ingreso: mayo-2008
Mensajes: 9
Antigüedad: 15 años, 10 meses
Puntos: 1
detección de colisiones, drag and drop, objetos que cambian de forma y AS3

Hola, estoy desarrollando un juego en el que se debe detectar cuando una linea atraviesa un circulo. La linea la podemos redimensionar y posicionar con el mouse haciendo drag&drop de los extremos.
El problema que se me presenta es con la detección de colisión entre la línea y el circulo.
Al parecer al redibujar la linea durante el MOUSE_MOVE, esta toma las dimensiones de un cuadrado limitado por los extremos de la misma. El problema es que este cuadrado "imaginario" es el que colisiona con el circulo y no la linea.
A alguien se le ocurre como hacer para que la linea (u otro objeto grafico que represente una linea que se pueda redimensionar) colisione correctamente con otro objeto?
Les dejo el codigo

Código:
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.MouseEvent;
import flash.events.Event;

var linea:Shape = new Shape();
addChild(linea);
linea.graphics.lineStyle(10,0x000000,1);
linea.graphics.moveTo(nodoi.x,nodoi.y);
linea.graphics.lineTo(nodof.x,nodof.y);

nodoi.addEventListener(MouseEvent.MOUSE_DOWN, onNodoIMouseDown);
nodoi.addEventListener(MouseEvent.MOUSE_UP, onNodoIMouseUp);
nodoi.addEventListener(MouseEvent.MOUSE_MOVE, onNodoMouseMove);
nodof.addEventListener(MouseEvent.MOUSE_DOWN, onNodoFMouseDown);
nodof.addEventListener(MouseEvent.MOUSE_UP, onNodoFMouseUp);
nodof.addEventListener(MouseEvent.MOUSE_MOVE, onNodoMouseMove);

function onNodoIMouseDown(e:MouseEvent):void {
    nodoi.startDrag();
    e.updateAfterEvent();
}
function onNodoIMouseUp(e:MouseEvent):void {
    nodoi.stopDrag();
}
function onNodoMouseMove(e:MouseEvent):void {
    if (linea.hitTestObject(punto)) {
        punto.alpha = 0.5;
    } else {
        punto.alpha = 1;
    }
    linea.graphics.clear();
    linea.graphics.lineStyle(10,0x000000,1);
    linea.graphics.moveTo(nodoi.x,nodoi.y);
    linea.graphics.lineTo(nodof.x,nodof.y);
    e.updateAfterEvent();
}
function onNodoFMouseDown(e:MouseEvent):void {
    nodof.startDrag();
}
function onNodoFMouseUp(e:MouseEvent):void {
    nodof.stopDrag();
}
nodoi y nodof, son instancias en el escenario de un circulo pequeño de donde arrastrar para redimensionar la linea, esta se dibuja entre un nodo y otro dinamicamente.
punto, es el circulo instanciado en el escenario.

Desde ya Muchas Gracias!
Saludos
Mariano