SHINSHIN planea ser un framework amigable que se enfoque al desarrollo de videojuegos para aparatos móviles, ya sean iOS, Android, Playbook u otras plataformas que soporten Adobe AIR.
Actualmente SHIN esta en pañales, las clases que existen son Shin, ShNucleo, ShNivel y ShObjeto.
ShNucleo es el núcleo donde se contendrán todos los parametro y objetos, es una especie de caja donde echas todos tus objetos, niveles y clases en general.
Shin es una especie de controlador de núcleo, que se encarga de manejar y entregar datos de este.
ShNivel sirve para crear niveles, estoy niveles son guardados dentro de ShNucleo.
ShObjeto es básicamente un objetos dentro de los niveles.
En el fondo, con SHIN, estoy intentando facilitar y reducir el tiempo de trabajo para desarrollar un juego para celulares. Planeo también incluir un GUI para darle un sentido mas de Drag & Drop.
En este ejemplo muestro lo que llevo hasta el momento, que es lo que mencione anteriormente:
Creo una clase
Main.as que funcionara como nuestro Núcleo:
package
{
import org.shin.*;
/**
* ...
* @author Felipe Alfonso
*/
[SWF(width = "400", height = "400")]
public class Main extends ShNucleo
{
public function Main():void
{
super(400, 400, 0x000000);
nivelInicial(new Level1);
}
}
}
Como se ve en esta clase lo que hago es extenderla a ShNucleo y defino las propiedades básicas de este, como las dimensiones y el color de fondo además de el nivel inicial.
Ahora creo mi nivel inicial que lo llamare
Level1.aspackage
{
import org.shin.*;
/**
* ...
* @author Felipe Alfonso
*/
public class Level1 extends ShNivel
{
private var obj:ShObjeto;
public function Level1()
{
obj = new ShObjeto(50, 50);
obj.y = Math.random() * Shin.alto;
obj.gravedadX = .1;
agregar(obj);
crearBucle();
}
override public function bucle():void
{
obj.loopObject();
if (obj.x > Shin.ancho && obj.x < Shin.ancho + 50)
{
detenerBucle();
Shin.cambiarNivel(new Level2);
}
}
}
}
Acá lo que hago es crear el primer nivel y dentro de este mismo creo un objeto llamado
obj. A este objeto le indico que tenga una aceleración en el eje X y lo agrego, luego de eso creo el bucle y finalmente al bucle le pongo las instancias que quiero que se actualicen, como el bucle del mismo objeto y que si el objeto se sale de las dimensiones del nucleo se detenga el bucle y cambie de nivel con una función muy fácil, Shin.cambiarNivel().
Ahora creo el nivel 2 y le pongo
Level2.aspackage
{
import org.shin.*;
/**
* ...
* @author Felipe Alfonso
*/
public class Level2 extends ShNivel
{
private var obj:ShObjeto;
public function Level2()
{
obj = new ShObjeto(10, 10);
obj.x = Math.random()*Shin.ancho;
obj.gravedadY = .1;
agregar(obj);
crearBucle();
}
override public function bucle():void
{
obj.loopObject();
if (obj.y > Shin.alto && obj.y<Shin.alto+50)
{
detenerBucle();
Shin.cambiarNivel(new Level1);
}
}
}
}
Esto es lo mismo que en Level1, solo que ahora el objeto tiene una aceleración en el eje Y.
Todo esto entrega esto:
http://ilovepixel.net/shin/wp-content/uploads/2011/08/Shin2.swfEn mi TO-DO List se encuentran las siguientes tareas:
- Reducir la cantidad de lineas de código.
- Crear un game loop decente, que funcione con un FPS interno.
- Darle mas propiedades a los objetos.
Saludos, espero seguir avanzando con este proyecto y actualizar acá y en mi blog.
Blog de SHIN