Comunidad de diseño web y desarrollo en internet online

Detección de colisiones en Flex

Citar            
MensajeEscrito el 14 Ene 2010 09:07 am
Hola!
Soy relativamente nueva en esto de Flex y tengo una duda.
La questión es que estoy haciendo una pequeña aplicación usando Degrafa en la que necesito detectar las colisiones. He encontrado este kit de detección de colisiones que parece ser exactamente lo que necesito.
El problema es que a la hora de detectr las colisiones el kit necesita que se le pasen objatos del tipo DisplayObject, y los que tengo yo (ya que uso Degrafa) son GeometryGroup. Aunque estos extiendan la clase display object no me sirven, ya que debe ser exactamente esa clase la que se le pase. Es decir, si hago:
var aux: DisplayObject = myGeometryGroup;
y le paso la variable aux a la función, dentro de ella me da error. ¿Alguién sabe como podría solucionarlo? He pesado que podria hacer una copia del contenido gráfico del GeometryGroup al DisplayObject, pero no sé cómo hacerlo, ni si es posible. Alguna idea?

Muchas gracias de antemano.
Irati

Por irati86

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Ene 2010 11:40 am
Creo que el problema no debe ir por ahí, sino que sea porque no tengas definida tu geometría o que se necesite que esté añadida al stage o algo parecido.
Vamos, si una función o un método recibe como argumento un objeto de la Clase DisplayObject, debería aceptar TODOS los objetos de cualquier clase que sea un displayObject o que pertenezca a una clase que "extienda" de DisplayObject.
Aunque, dentro de la función sólo podremos usar las propiedades de los displayObject, so pena que usemos una conversión de cast

Código ActionScript :

var texto=new TextField() //<--extiende de DisplayObject
moverYcambiar(texto);
private function moverYcambiar(obj:DisplayObject):void{  //<--nuestra función recibe como argumento un DisplayObject
       obj.x+=100
       //pero si queremos cambiar el texto usaremos una conversión de cast
       var aux:TextField = obj as TextField;
       //también podríamos haber escrito 
       //var aux:TextField=(TextField)obj
       aux.text = "Hola mundo";
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Ene 2010 07:17 am
En primer lugar gracias por responder.

Lo que pasa es que las clases de las colisiones las he encontrado en una página de internet, y por lo que pone se supone que funcionan.
¿A qu'e te refieres exactamente con no tener definida mi geometria, o que no esté en el stage? Soy bastante nueva en esto :P

Por irati86

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Ene 2010 08:10 am
antes de pasar la variable a la función haz un

Código ActionScript :

trace(aux)

Si no sale nada es porque es nula, luego el error viene de ahí, que cuando haces la igualación (realmente no te haría falta) es que NO existe. Eso suele suceder porque tu variable la has declarado a nivel local, puff. Imagina que tienes en tu película principal

Código ActionScript :

//NO funciona
crearGeometria()
trace(migeometria) //<--saldrá null porque la variable está definida dentro de una función
                 //vamos, que es una variable temporal

function crearGeometria(){
    var migeometria:String="Hola Mundo"
}

Código ActionScript :

//Ahora SÍ
var migeometria:String //<---la definimos aquí
crearGeometria()
trace(migeometria) //<--saldrá "Hola Mundo"
function crearGeometria(){
    migeometria="Hola Mundo"  //<--aquí le damos valor
}

Respecto a lo del stage, no le he echado un vistazo al kit de colisiones, pero si dentro de la función que te da error necesita que el DisplayObject esté en el Stage -vamos, que se haya añadido con un addChild- dará error. Un ejemplo tonto

Código ActionScript :

//NO FUNCIONA
var mimc:Movieclip=new MovieClip()
comprobarMc(mimc)
function comprobarMc(mc:DisplayObject){
    mc.parent.setChildIndex(mc,0)  //<--usamos "parent",
                   //da error porque todavía no lo hemos añadido al Stage
}

Código ActionScript :

//Le faltaba añadirlo
var mimc:MovieClip=new MovieClip()
//Lo añadimos
addChild(mimc)

comprobarMc(mimc)
function comprobarMc(mc:DisplayObject){
    mc.parent.setChildIndex(mc,0)  //<--usamos "parent",
                   //Ahora ya no da error
}

Pero ya te digo que estoy dando "palos de ciego", ¿puedes postear el código de la función donde te dá el error?

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Ene 2010 12:41 pm
Bien, por pasos.

Una pregunta, lo del trace lo he probado, pero como he dicho antes soy bastante nueva con esto y no sé dónde tiene que aparecer :P

El problema no es por que sean variables locales o globales, ni porque no lo haya añadido al stage. De hecho los calculos son sobre unas figuras que aparecen en pantalla.

He conseguido que no me diera el error que me daba. Le pasaba los objetos al inicializar la clase CollisionGroup (de ese kit de colisiones) y por alguna razón no funcionaba bien y me decía que tenian que ser DisplayObjects (que lo eran). Pero si le añado los objetos uno a uno no me da ese error aunque todavia no funciona del todo, y me saltan otros errores relacionados con los Bitmap :P

Muchas gracias de todas formas! ^^

Por irati86

5 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.