Y como dijo Picasso.. Los listos copian, los genios roban.
Añadidos eventos de colisión a la libreria exactamente igual que unity.. pero ahún mas sencillos si toca..
Estoy pensando en la mejor manera de publicar esto en la libreria.. ya que para un uso interno yo lo tengo ordenado de una manera bastante sencilla para mi, pero no para todo el mundo, se aceptan sugenrecias..
Lo que esta claro es que lo que hace falta en el lenguaje de juegos es algo simple que permita crear simples cajas o circulos y dejarlos en el escenario a modo de "event watcher", de tal forma que cuando se produzca la colisión entre este objeto y el objeto indicado por parametros, este objeto "event watcher" lance un evento dentro del juego que sea facilmente capturable y que permita procesar la información de la colisión.
Por poner un ejemplo, creamos una casa, la añadimos a una escena en nuestro juego, ahora simplemente creamos un evento rectangulo y lo colocamos en la puerta de la casa.. y a esperar que el ID que hemos indicado por parametros al crear el evento pase por encima.. o el tipo de proceso también podría ir bien..
Los eventos que genera este "event watcher" son los siguientes:
.onCollisionStart()
.onCollisionExit()
.onCollisionStay()
Casualmente los mismos que genera Unity XD..
El concepto de esto es tan simple como lo siguiente:
new event(535, 330, 100, 40, "casa 1", idPersonaje);
Y el codigo para recojer los eventos del juego es este:
El codigo del event_watcher() es el siguiente, se aceptan sugerencias eccetera.. ya que esto de los eventos es algo relativamente nuevo para mi, pero realmente veo que es la manera mas ordenada de trabajar en proyectos grandes.
También hay que reconocer que si Unity lo gestiona así.. será por que esta ampliamente contrastado que es una buena solución.
Que os parece?
las tres constantes para ver el tipo de evento recivido son:
final int COLLISION_ENTER = 1;
final int COLLISION_EXIT = 2;
final int COLLISION_STAY = 3;
Y el codigo por curiosidad de quien se tercie sobre como gestiono las colisiones y lanzo los eventos mediante este sistema es el siguiente:
class event extends sprite{
int st = 0;
int w, h;
String eventName;
boolean lastCollisionStatus = false;
boolean nowCollisionStatus = false;
sprite id_;
event(float x, float y, int w, int h, String eventName, sprite id_){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.eventName = eventName;
this.id_ = id_;
}
//......................................
void frame(){
switch(st){
case 0:
setGraph(newGraph(w, h, BLACK));
createBody(TYPE_BOX, TYPE_SENSOR);
st = 10;
break;
case 10:
nowCollisionStatus = collision(id_);
if(nowCollisionStatus!=lastCollisionStatus){
if(nowCollisionStatus==true){
onCollisionEnter();
}else{
onCollisionExit();
}
}else{
if(nowCollisionStatus==true){
onCollisionStay();
}
}
lastCollisionStatus = nowCollisionStatus;
break;
}
}
//......................................
void onCollisionEnter(){
eventManager(eventName, COLLISION_ENTER);
}
//......................................
void onCollisionExit(){
eventManager(eventName, COLLISION_EXIT);
}
//......................................
void onCollisionStay(){
eventManager(eventName, COLLISION_STAY);
}
//......................................
}
Personalmente me parecen mucho mejones los nombres:
COLLISION_START
COLLISION_PERSISTS
COLLISION_END
Que opinais sobre estos nombres?
Una imagen que explique toda esta movida seria la siguiente:
You do not have the required permissions to view the files attached to this post.