UPDATE IMPORTANTE!
Habia un bug grave en la creación de procesos con cuerpos estaticos, ahora se crean correctamente, lo he descubierto durante el desarrollo de un tutorial de juego de plataformas para publicar..
Habia un error durante la creación del shape interno.. este no era capaz de rotar antes de añadirse al mundo para posteriormente volverse estatico..
Ahora esta corregido, y aquí esta el ejemplo de juego de plataformas.. es un mini ejemplo para ver la potencia de la libreria usando sensores.. es una simplificación de las versiones anteriores que usaban isContact() que es una función demasiado compleja para lo que sirve en si misma.. ahora con los procesos a modo de sensor la cosa esta muchisimo mas cercana al estilo DIV original.
La verdad es que me siento muy comodo con esta forma de hacer las cosas.. si alguien descarga el ejemplo y lo prueba ya verá como funciona perfecto.. y mas simple no puede ser
El archivo rar contiene la ultima versión de la libreria.. no actualizo el entorno todavía al completo por que en esta nueva entrega incluirá generador de fuentes estupendo, egui, y mucho contenido 3d además de un juego al estilo mario de la wii de estos que sale mario en sprites dentro de un mundo 3d.
#include "gameLibZero.cpp"
int ST = 0;
images img;
int type_plataforma;
void setup(){
setMode(640, 400);
setFps(60);
fullscreen();
loadImages("data/images", &img);
setGravity(0, 0);
}
//------------------------------------------------------------------
class sensor:public process{
public:
int st = 0;
bool toco_suelo = false;
void frame(){
switch(st){
case 0:
{
graph = img[2];
visible = true;
x = father->x;
y = father->y;
createBody(TYPE_CIRCLE, METAL);
setSensor(true);
st = 10;
}
break;
case 10:
{
x = father->x;
y = father->y;
translate(x,y+32);
toco_suelo = collisionType(type_plataforma);
}
break;
}
}
};
//------------------------------------------------------------------
class personaje:public process{
public:
int st = 0;
sensor* s;
bool salto = false;
void frame(){
addVy(10);
switch(st){
case 0:
{
graph = img[1];
visible = true;
x = 320;
y = 320;
createBody(TYPE_BOX, METAL);
s = new sensor();
st = 10;
}
break;
case 10:
{
/* ¿¿ TOCO SUELO ?? */
if(s->toco_suelo){
screenDrawText(GetFontDefault(), 18, "TOCO_SUELO", CENTER, x, y-50, WHITE, 255);
if(key(KEY_UP) && salto==false){
salto = true;
addVy(-400);
}
}else{
}
if(!key(KEY_UP)){
salto = false;
}
if(key(KEY_LEFT)){
addVx(-10);
}
if(key(KEY_RIGHT)){
addVx(10);
}
if(key(KEY_DOWN)){
addVy(5);
}
}
break;
}
}
};
//------------------------------------------------------------------
class plataforma:public process{
public:
int st = 0;
int w,h;
plataforma(float x, float y, float width, float height, float angle){
this->x = x;
this->y = y;
this->w = width;
this->h = height;
this->angle = angle;
}
void frame(){
switch(st){
case 0:
{
graph = newGraph(w, h, BLUE);
visible = true;
createBody(TYPE_BOX, HUMAN);
type_plataforma = type;
setStatic(true);
st = 10;
}
break;
case 10:
break;
}
}
};
//------------------------------------------------------------------
void draw(){
switch(ST){
case 0:
{
// plataforma( x, y, ancho, alto, angulo );
new plataforma(320, 390, 640, 10, 0);
new plataforma(100, 350, 200, 5, 10);
new plataforma(540, 350, 200, 5, -10);
new plataforma(200, 250, 100, 5, 0);
new plataforma(440, 250, 100, 5, 0);
new plataforma(320, 150, 200, 5, 0);
new personaje();
ST = 10;
}
break;
case 10:
{
}
break;
}
}
You do not have the required permissions to view the files attached to this post.