Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - ilovepixel

Páginas: [1] 2
1
General / Pixelfuck, un interprete para Brainfuck
« en: 04 de Enero de 2013, 03:56:45 am »
Hola a todos, quería compartir con ustedes mi proyecto de la semana, no es un proyecto con un propósito de ganar dinero mas bien para gastar tiempo libre en eso.
Pixelfuck es un interprete con output gráfico y extensión de Brainfuck que incluye un par de funciones que no son parte de del original.
Para los que no saben Brainfuck es un lenguaje esotérico destacado por su minimalismo. Acá pueden encontrar mas info sobre el lenguaje.

Pixelfuck incluye los típicos operadores de brainfuck que son +-<>,.[] pero a demás de eso incluye funciones como:
^numero,valor| que coloca un valor en el memory block con el numero indicado.
#|} Es un if statement.
@ Flush, esto libera la memoria y la dibuja en el canvas.

Acá pueden ver el proyecto que incluye una especie de hello world:
http://shin.cl/pixelfuck/

Acá pueden ver mi interprete de Brainfuck puro sin ninguna modificación y del cual me basé.
http://shin.cl/bf/

Saludos.

2
JavaScript / Un par de tutoriales de JavaScript+Canvas.
« en: 01 de Diciembre de 2012, 05:58:52 am »
Desde hace algunas semanas he comenzado a escribir un par de tutoriales sobre desarrollo de videojuegos utilizando javascript y canvas de html5.

El primero trata de como hacer animaciones utilizando sprite sheet.
http://shin.cl/blog/?p=139

El segundo trata de como hacer tilemaps scrolleable:
http://shin.cl/blog/?p=153

El tercero es una extensión del segundo donde agrego zoom In/Out, detección de colisiones, separación de objeto que chocan y agregar mas de 1 viewport.
http://shin.cl/blog/?p=166

El cuarto trata sobre la detección de colisiones en base a pixeles.
http://shin.cl/blog/?p=181

El quinto y último que he escrito trata sobre simulación de luz sobre un tilemap utilizando ray casting.
http://shin.cl/blog/?p=195

Ojalá les sirva :)

Saludos!

3
Hola, quería presentarles mi proyecto de tiempo libre. Lo programé hoy en la tarde así que aún tiene muchos bugs.

PixelPush está apuntando  a la gente que gusta de trabajar haciendo pixel-art por ende todas las herramientas que incluye y va a incluir apuntan a facilitar el trabajo de este.

Por ahora es una simple app para dibujar con selección de colores de una paleta y un sistema básico de capas.



Acá hay algo de info/bugs/futuras ideas sobre la herramienta:

Cosas que funcionan:
- Un sistema básico de Capas // Agregar/Quitar/Borrar
- Selección de colores de la paleta y el canvas.
- Rellenar y Borrar áreas de color seleccionado.
- Generar una imagen que puede ser guarda.
- Preview.
- Undo con CTRL-Z. Hasta 100 undos.

Cosas que no funcionan bien:

- Si cambias de capa se borra el historial de undos.
- Si seleccionas un color del canvas solo elige un color de la capa activa.
- La paleta de colores es un asco.
- Rellenar y Borrar áreas es bastante lento y buggeado.
- No se puede cambiar el tamaño del canvas.
- Solo "funciona" en Chrome.
- Otras cosas que ya ni recuerdo.

Cosas que agregaré en una proxima actualización

- Sistema de capas mucho mas complejo [ Alpha/Visibilidad/Mover arriba o abajo/Imagen de muestra/mas.
- Un botón de guardar imagen directamente.
- Cambiar el tamaño del canvas.
- Zoom in/out.
- Frames para crear animaciones.
- Guardar GIF animados.
- Guardar animaciones como Sprite Sheet.
- Mejor sistema de paleta de colores.
- Mas brushes.
- Mejorar el rendering.
- Lineas rectas/Rectángulos/Circulos.
- Colores con alpha.
- Cargar imagen del PC.
- Cargar image de URL.
- Muchos mas, espero.

Pueden probar la herramienta acá:  http://shin.cl/pix/

4

Hola,  Quería comentarle que hace menos de una semana en la empresa que he estado trabajando lanzaron un nuevo juego llamado Ninja Joe, una continuación de de los juegos Ninja Joe Classics y Ninja Joe Underground que estuvieron para s60 de Symbian.

Ojala puedan descargarlo y ayudarnos a crecer!
Pueden encontrarlo para Android ( Gratis ) , iOS ( $0.99 ) y Windows Phone ($1.49)
Agradecería si descargan el juego puedan dejar su feedback ya que nos ayudará !
Gracias :D

Página oficial: http://www.amnesiagames.cl/games_ninjajoenew.html

iOS: https://itunes.apple.com/us/app/ninja-joe/id535143288?l=es&ls=1&mt=8
Android: https://play.google.com/store/apps/details?id=com.amnesiagames.ninjajoe.velociraptors
Windows Phone: http://www.windowsphone.com/en-us/store/app/ninja-joe/0de0e151-be33-454b-973e-a8dc84c8d792

Acá hay un par de lugares donde apareció la noticia:

Las Ultimas Noticias, un diario chileno: http://www.lun.com/Pages/NewsDetail.aspx?dt=2012-10-23&PaginaId=17&bodyid=0
Niubie: http://www.niubie.com/2012/10/ninja-joe-sera-el-primer-juego-chileno-en-llegar-a-windows-8/
http://www.wp7connect.com/2012/10/24/ninja-joe-for-windows-phone-now-available/
http://www.kissmybit.com/los-chilenos-de-amnesiagames-ya-tienen-listo-un-juego-para-windows-8/
http://peru.com/entretenimiento/extramania/ninja-joe-juego-chileno-windows-8-noticia-100510

5
General / [Proyecto] MMOCC Cross-platform
« en: 01 de Junio de 2012, 02:53:22 am »
Les presento este nuevo proyecto el cual trata de crear un MMOCC ( Massive Multiplayer Online Chat Community ) que pueda correr simultáneamente en múltiples plataformas. Actualmente tengo un demo el cual corre en html5, flash y android.

Es demo es bastante simple pero demuestra que pude funcionar.
He desarrollado este demo en menos de 2 días, así que puede que se topen con varios bugs.

Para la conexión entre usuarios he utilizado pubnub ( www.pubnub.com ) y unos módulos compatibles con cada plataforma. Actualmente manejo las conexiones por medio de un cliente que desarrollé el cual controlo desde mi teléfono celular, cumple la función de "falso server".

Pueden probarlo acá:

http://shin.cl/isoclient

6
JavaScript / [Proyecto] ShinJS para Desarrollo de juegos.
« en: 18 de Mayo de 2012, 07:26:18 am »
En estos días he estado trabajando en un simple framework para desarrollar juegos en javascript+html5.

Por ahora solo llevo un 20% pero ya tengo un par de cosas necesarias para crear juegos como por ejemplo escenas, colisiones, sprites y assets manager con preloading. También tiene clases de rectángulo, puntos 2d y map sorting.

Aun me falta trabajar en el rendering y el game loop ademas de agregar otras cosas como animaciones, tilemaps, camaras, websockets, etc.

Acá pueden ver un simple demo que muestra preloading, assets managing, cambios de escena y colisiones rectangulares con separación.

http://shin.cl/shinlib/

Acá esta el codigo de el demo, y mas o menos como se trabajaría con shinjs:

Código: [Seleccionar]
World.init(
function()
{
Assets.addImage("1","http://24.media.tumblr.com/tumblr_m2l87ml9X71r0ralmo1_500.gif");
Assets.addImage("2","http://25.media.tumblr.com/tumblr_lzz242aMJB1qje0eqo1_500.jpg");
Assets.addImage("3","http://24.media.tumblr.com/tumblr_m3q5mhSl4I1ruo5glo1_500.jpg");
Assets.addImage("4","http://24.media.tumblr.com/tumblr_m0ix4iEUVM1qjogmno1_500.jpg");
Assets.addImage("5","http://25.media.tumblr.com/tumblr_m39ojeujQE1rpg9v8o1_500.gif");
}
,640,480,60,true,true);

World.backgroundColor("#5a5a5a");

World.run = function()
{
var scene = new Scene();

scene.set(
function init()
{
//init.
trace("Init scene 1.")

this.r1 = new Rectangle(0,100,100,100);
this.r2 = new Rectangle(300,150,100,100);
this.speedx = 5;
this.speedy = 5;
this.count = 500;
},

function update()
{
//update.
this.r1.x+=this.speedx;
this.r1.y+=this.speedy;

if(this.r1.x>World.width-this.r1.width || this.r1.x<0 ) this.speedx*=-1;
if(this.r1.y>World.height-this.r1.height || this.r1.y<0) this.speedy*=-1;

if(this.r2.x>World.width || this.r2.x<-this.r2.width || this.r2.y>World.height || this.r2.y<-this.r2.height)
{
this.r2.x = 300;
this.r2.y = 150;
}

this.count--;

if(this.count<1) World.setScene(scene1);
},

function render()
{
//render.
World.canvas.drawImage(Assets.getImage("2"),0,0);

World.canvas.fillStyle = "#ff0000";
World.canvas.fillRect(this.r1.x,this.r1.y,this.r1.width,this.r1.height);

if(Collision.overlap(this.r1,this.r2))
{
World.canvas.fillStyle = "#ffff00";
Collision.separate(this.r1,this.r2);
}

World.canvas.fillRect(this.r2.x,this.r2.y,this.r2.width,this.r2.height);
}
)

World.setScene(scene);

var scene1 = new Scene();

scene1.set(
function init()
{
//init.
trace("Init scene 2.")
this.count = 500;
},

function update()
{
//update.
this.count--;
if(this.count<1)
{
World.setScene(scene);
}
},

function render()
{
//render.
World.canvas.drawImage(Assets.getImage("3"),0,0);
World.canvas.strokeStyle = "#ffffff";
World.canvas.font = "30px Verdana";
World.canvas.strokeText("Scene 2",100,100);
}
)
}

Saludos!

7
JavaScript / Multiples Camaras 2D para html5 Canvas.
« en: 15 de Abril de 2012, 13:50:20 pm »
Otro script que hice, ojala les sirva.
Básicamente lo que que permite es crear múltiples cámaras para juegos 2D a la que fácilmente se le puede agregar parallax scrolling.
Acá está el codigo completo del demo:
Código: [Seleccionar]

/**
 * @author Felipe Alfonso
 * www.shin.cl
 */


/**
 * Count frames
 */
 
function FPS()
{
this.startTime = new Date().getTime();
this.framesNumber = 0;
}

FPS.prototype.Update = function()
{
var d = new Date().getTime();
var currentTime = (d - this.startTime)/1000;
this.framesNumber+=1;
var result = Math.floor((Math.floor((this.framesNumber/currentTime)*10.0)/10.0));
if(currentTime>1)
{
this.startTime = new Date().getTime();
this.framesNumber = 0;
}
return result;
}

var f = document.getElementById("fps");
var e = document.getElementById("canvas");
var canvas = e.getContext("2d");
var fps = new FPS();
var img = new Image();
img.src = "sprite.png";
var x = 0;
var y = 0;

window.onmousemove = function(e)
{
x = e.pageX;
y = e.pageY;
}


/**
 * Draw Camera
 */

function drawCam(x,y,width,height,color)
{
canvas.restore();
canvas.save();
canvas.beginPath();
canvas.rect(x,y,height,width);
canvas.clip();
canvas.closePath();
canvas.translate(x,y);
canvas.fillStyle = color;
canvas.fillRect(0,0,width,height);
}

/**
 * Draw Animation
 */
var frameCount = 0;
var currentFrame = 0;
var delayCount = 0;
function drawAnim(image,x,y,frameWidth,frameHeight,frames,delay)
{
if(delayCount<delay)
{
delayCount+=1;
currentFrame = frames[frameCount];
canvas.drawImage(image,currentFrame*frameWidth,0,frameWidth,frameHeight,x,y,frameWidth,frameHeight);
}
else
{
if(frameCount<frames.length-1)
{
currentFrame = frames[frameCount];
frameCount+=1;
}
else
{
currentFrame = frames[frameCount];
frameCount = 0;
}
canvas.drawImage(img,currentFrame*frameWidth,0,frameWidth,frameHeight,x,y,frameWidth,frameHeight);
delayCount = 0;
}
}


///////////////////////////////////////////////////////////////////////////////////////////

function GameLoop()
{
var t = setTimeout("GameLoop()",17);
//background
canvas.fillStyle = "#000000";
canvas.fillRect(0,0,e.width,e.height);

//draw cameras
drawCam(0,0,200,200,"#5a5a5a");
render()
drawCam(201,0,200,200,"#5a5a5a");
render()
drawCam(402,0,200,200,"#5a5a5a");
render()
drawCam(0,201,200,200,"#5a5a5a");
render()
drawCam(201,201,200,200,"#5a5a5a");
render()
drawCam(402,201,200,200,"#5a5a5a");
render()

//fps
f.innerHTML = "FPS "+fps.Update();
}

var w = Array();
var h = Array();

for(var i=0;i<200;i++)
{
w.push(Math.random()*600);
h.push(Math.random()*400);
}

function render()
{

for(var i=0;i<200;i++)
{
drawAnim(img,w[i],h[i],26,30,[0,1,2,1,0,3,4,3],18);
}

drawAnim(img,x,y,26,30,[0,1,2,1,0,3,4,3],18);
}
window.onload = GameLoop();


El codigo que dibuja la camara es este:
Código: [Seleccionar]
function drawCam(x,y,width,height,color)
{
canvas.restore();
canvas.save();
canvas.beginPath();
canvas.rect(x,y,height,width);
canvas.clip();
canvas.closePath();
canvas.translate(x,y);
canvas.fillStyle = color;
canvas.fillRect(0,0,width,height);
}

Acá esta el demo:
http://shin.cl/cam/

Saludos :)

8
JavaScript / Animación utilizando Sprite sheet.
« en: 14 de Abril de 2012, 13:03:27 pm »
Esta noche escribí esta código que permite hacer animaciones utilizando sprite sheets.
Un sprite sheet es una simple tira de imágenes.

Código: [Seleccionar]

/**
 * @author Felipe Alfonso.
 * www.shin.cl
 */

var game = new Object();
var e = document.getElementById("canv");
var canvas = e.getContext("2d");
var bgColor = "#000000";
var pool = new Array();
var s = new Sprite("data/sprite.png",0,0)
var mouseX = 0;
var mouseY = 0;

//array of animated sprites
var anim = new Array();

window.onload = function()
{
game.Init();
}

document.onmousemove = function(e)
{
mouseX = e.clientX;
mouseY = e.clientY;
}

function print(msg)
{
console.log(msg);
}

game.Init = function()
{
game.gameLoop(60);
game.Background();
game.Create();
};

game.Create = function()
{
game.addChild(s);
for(var i=0;i<100;i++)
{
var spr = new Sprite("data/sprite.png",Math.random()*e.width,Math.random()*e.height,0);
game.addChild(spr);
anim.push(spr);
}
}


game.gameLoop = function(fps)
{
var t = setTimeout("game.gameLoop("+fps+")",fps);
game.Background();
game.Update();
game.Draw();
};

game.Background = function()
{
canvas.fillStyle = bgColor;
canvas.fillRect(0,0,e.width,e.height);
};

game.Draw = function()
{
for(var i=0;i<pool.length;i++)
{
canvas.drawImage(pool[i].image,pool[i].rectX,pool[i].rectY,pool[i].width,pool[i].height,pool[i].x,pool[i].y,pool[i].width,pool[i].height);
}
};

game.Update = function()
{
s.x = mouseX;
s.y = mouseY;
s.Animate(26,30,[0,1,2,1,0,3,4,3],0);
for(var i=0;i<anim.length;i++)
{
anim[i].Animate(26,30,[0,1,2,1,0,3,4,3],0);
}
};

game.addChild = function(spr)
{
pool.push(spr);
return spr
};

function Sprite(path,x,y)
{
this.path = path;
this.x = x;
this.y = y;
this.image = new Image();
this.image.src = path;
this.width = this.image.width;
this.height = this.image.height;
this.rectW = this.width;
this.rectH = this.height;
this.rectX = 0;
this.rectY = 0;
this.delayCount = 0;
this.currentFrame = 0;
this.frameCount = 0;

}

Sprite.prototype.SetRect = function(rwidth,rheight,rx,ry)
{
this.width = rwidth;
this.height = rheight;
this.rectW = rwidth;
this.rectH = rheight;
this.rectX = rx;
this.rectY = ry;
}

Sprite.prototype.Animate = function(width,height,frames,delay)
{
if(this.delayCount<delay)
{
this.delayCount+=1;
this.currentFrame = frames[this.frameCount];
this.SetRect(width,height,this.currentFrame*width,0);
}
else
{
if(this.frameCount<frames.length-1)
{
this.currentFrame = frames[this.frameCount];
this.frameCount+=1;
}
else
{
this.currentFrame = frames[this.frameCount];
this.frameCount = 0;
}
this.SetRect(width,height,this.currentFrame*width,0);
this.delayCount = 0;
}
}



La parte que se encarga de la animación es esta:
Código: [Seleccionar]
Sprite.prototype.Animate = function(width,height,frames,delay)
{
if(this.delayCount<delay)
{
this.delayCount+=1;
this.currentFrame = frames[this.frameCount];
this.SetRect(width,height,this.currentFrame*width,0);
}
else
{
if(this.frameCount<frames.length-1)
{
this.currentFrame = frames[this.frameCount];
this.frameCount+=1;
}
else
{
this.currentFrame = frames[this.frameCount];
this.frameCount = 0;
}
this.SetRect(width,height,this.currentFrame*width,0);
this.delayCount = 0;
}
}

En el fondo esto se puede reducir en una función mas simple como esta:
Código: [Seleccionar]
/**
 * @author Felipe Alfonso.
 * www.shin.cl
 */

//Get canvas
var e = document.getElementById("canv");
var canvas = e.getContext("2d");

//Variables para la animación
var frameCount = 0;
var currentFrame = 0;
var delayCount = 0;
var delay = 0;
var frames = new Array(0,1,2,1,0,3,4,3);
var img = new Image();
var frameWidth = 26;
var frameHeight = 30;
img.src = "data/sprite.png";

function loop()
{
var t = setTimeout("loop()",17);

canvas.fillStyle="#000000";
canvas.fillRect(0,0,e.width,e.height);

if(delayCount<delay)
{
delayCount+=1;
currentFrame = frames[frameCount];
canvas.drawImage(img,currentFrame*frameWidth,0,frameWidth,frameHeight,100,100,frameWidth,frameHeight);
}
else
{
if(frameCount<frames.length-1)
{
currentFrame = frames[frameCount];
frameCount+=1;
}
else
{
currentFrame = frames[frameCount];
frameCount = 0;
}
canvas.drawImage(img,currentFrame*frameWidth,0,frameWidth,frameHeight,100,100,frameWidth,frameHeight);
delayCount = 0;
}
}

window.onload = loop();

Espero que les sirva.

Acá esta la demo:
http://shin.cl/anim/

Saludos!

9
General / [PROYECTO] Shin, Game Framework para Monkey.
« en: 16 de Febrero de 2012, 03:19:43 am »
Desde hace mucho tiempo he estado buscando un lenguaje que pudiese traducir a diferentes lenguajes de una forma facil y con un muy buen rendimiento. Al final lo encontré y se llama Monkey ( www.monkeycode.co.nz ) .

Debido a que monkey es relativamente nuevo existen muy pocos frameworks de juegos, hasta ahora solo se encuentra Diddy, el cual puede parecer bastante extenso y engorroso. Es por eso que he decidido crear mi propio framework y tratar de mantenerlo lo mas simple posible.

Pueden descargarlo de acá:
https://github.com/ilovepixel/Shin

Acá hay un ejemplo corriendo en html5:
http://ilovepixel.net/banner/

Acá hay un simple ejemplo de como utilizarlo:

Código: [Seleccionar]
Import shin
Import mojo

Function Main:Int()
  New MainGame()
  Return 0
End

Class MainGame Extends Game
  Method New()
    Super.New(60,0,0,0)
  End
 
  Method OnCreate:Int()
    Game.LoadScene(New MainScene())
    SetTile("Testing Shin")
    SetGameSize(400,400)
  End
End

Class MainScene Extends Scene
  Field mysprite:Sprite
  Field myanim:Anim
  Field dead:Bool
  Method New()
    Super.New()
    mysprite = New Sprite("image.png")
    mysprite.x = 100
    myanim = New Anim("spritesheet.png",30,30)
    myanim.AddAnim("walk",[0,1,2,3,2,1])
    myanim.AddAnim("dead",[4,5,6],false)
    myanim.delay = 8
    myanim.Play("walk")
    Self.Add(myanim)
    Self.Add(mysprite)
    dead = False
  End

  Method Update:Void()
    If KeyDown(KEY_LEFT)
      myanim.x-=2
    ElseIf KeyDown(KEY_RIGHT)
      myanim.y+=2
    EndIf

    If myanim.Collides(mysprite)
      myanim.Play("dead")
      dead = True
    EndIf

    If dead
      myanim.alpha-=.05
      If myanim.alpha<.05
        myanim.active = false
        dead = False
      EndIf
    EndIf
  End

End

Próximamente planeo trabajar en tilemaps y tratar de perfeccionar las colisiones, ademas de implementar algunas de las funciones a modulos de ios, android y xna.

Lista de metodos y funciones nativas.
Código: [Seleccionar]
Native:

Function MouseHide:Void() //esconde el mouse (flash,html5,glfw)
Function MouseShow:Void() //muestra el mouse (flash,html5,glfw)
Function OpenURL:Void(URL:String) // abre una url (flash,html5,glfw)
Function SetTitle:Void(Title:String) // define el titulo de la ventana (flash,html5,glfw)
Function SetGameSize:Void(Width:Int, Height:Int) // define el tamaño de la ventana/canvas (html5,glfw)
Function SetCanvasColor:Void(R:Int,G:Int,B:Int) // define el color de fondo del canvas ( solo html5 )
Function Alert:Void(Msg:String) // Lanza una popup con alerta  (flash,html5,glfw)
Function CheckGameURL:Bool(URL:String) // verifica que la pagina donde esta hosteado el juego es el mismo señalado.  (flash,html5)
Function Log(msg:String) // trace

Saludos.

10
General / Monkey, Lenguaje Crossplatform.
« en: 10 de Enero de 2012, 02:18:10 am »
Hace unos día decidí comprar una licencia de Monkey , un lenguaje que permite exportar a diferentes tipos de lenguajes en los que se encuentran:
AS3, JavaScript, C++, C#, Java
Esto permite correr el mismo código en una variedad muy amplia de plataformas, como por ejemplo: Android,  iOS, Windows Phone, Xbox, Windows y Mac, sin embargo los mismo usuarios de la comunidad están desarrollando targets como por ejemplo de Symbian, Bada, Nintendo Ds, etc.gr

Este lenguaje lo conocí en mi oficina, donde ya son grandes conocedores de monkey. La sintaxis es muy simple y bastante similar a BASIC.

Un Simple Hello world se vé así:

Código: [Seleccionar]
Import mojo

Function Main()

    Print "Hello World"

End

Agregar una imagen es igual de simple:

Código: [Seleccionar]
Import mojo

Class MiImg Extends App

Field miImagen:Image

Method OnCreate()
miImagen = LoadImage("mi-imagen.png")
SetUpdateRate 60
End

Method OnRender()
Cls 0,0,0
DrawImage miImagen,0,0
End

End

Function Main()
New MiImg
End

Yo replique el típico juego que hago cuando aprendo un lenguaje nuevo que se llama Milk at a Cop ya que tiene animaciones por sprite sheet, colisiones y particulas.

Acá hay un video del el juego corriendo En html5, flash, android, windows, mac y ios. No probé con xna porque no tengo instalado .NET
http://www.youtube.com/watch?v=g3M872j7Q38

El codigo lo subi a github y lo pueden ver y descargar de acá:
https://github.com/ilovepixel/MilkAtACopMonkey

Acá pueden probar las diferentes versiones:
HTML5
http://ilovepixel.net/monkey/index.html

Flash
http://ilovepixel.net/monkey/flash.html

Android
http://ilovepixel.net/monkey/MonkeyGame-debug.apk

Windows
http://ilovepixel.net/monkey/Release.zip


Saludos!

11
Flash y ActionScript / [Proyecto] Chat Isometrico en Móviles.
« en: 08 de Diciembre de 2011, 08:40:35 am »
Hace poco había comenzado con un pequeño proyecto o idea mas que nada de hacer un Chat isometrico ( lo tipico ) para plataformas móviles, esto es mas que nada un prueba para ver que resulta, recién hoy me puse a programar algo, acá hay un video de lo que llevo, es algo bastante simple, es simplemente una esfera que puede navegar en un mundo isometrico, es un comienzo despues de todo jaja. Estaré actualizando este post.

http://youtu.be/k-KD08WavVw


12
Flash y ActionScript / [Tutorial] Crear App con AS3 usando la camara para iOS.
« en: 01 de Diciembre de 2011, 05:57:58 am »
Creé este videotutorial donde enseño como hacer una camara que guarda las imágenes directamente en la carpeta de fotos. Esto lo probé en un iPod Touch 4g.
Es bastante simple, acá están los videos, son 3 que duran aprox. 10 min:
http://www.youtube.com/watch?v=SYTB6l7m9zg

y acá el proyecto:
http://www.megaupload.com/?d=AG957TY5

Saludos!

13

SHIN

SHIN 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:
Código: [Seleccionar]
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.as
Código: [Seleccionar]
package 
{
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.as

Código: [Seleccionar]
package 
{
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.swf


En 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

14
Estoy en busca de algún proyecto interesante en el cual participar, puedo decir que tengo bastante experiencia. Desde los 15 años que trabajo en el área gráfica de los juegos pero hace algún tiempo he empezado con el lado de programación, mas que nada ActionScript 3 y principalmente en aparatos móviles ( Playbook, Android, Nokia, ...).

Entre los mmo's que he trabajado están Ildom.com y Kekocity.es, solo en la parte visual. También he participado en juegos para empresas como Toyota y Nokia.

En cuanto a mi arte, este ha sido publicado en Melbourne, Australia.
http://www.youtube.com/watch?v=9Bpc3lNglTM

Y acá también soy mencionado:
http://issuu.com/a_x_e_l/docs/pixelution

Mi web la pueden visitar acá : http://ilovepixel.net/
también mi deviantArt : http://manxana.deviantart.com

Actualmente estoy trabajando en un simple proyecto personal en AS3+Flex, de crear un GUI para facilitar el manejo de bases de datos mysql ( Aun en progreso ).
http://www.youtube.com/watch?v=qp6sPw4Z0SI

Estoy en busca de un proyecto entretenido donde todos los miembros participemos de forma igualitaria y podamos aportar a un buen producto. No busco uno donde exista un wannabe jefe que mande a todos y no haga nada.

Saludos.
Respondo preguntas si es necesario.

me pueden contactar al correo:  hi (arroba) ilovepixel (punto) net
o agregar a msn: msn@manxana.com


15
Flash y ActionScript / [VIDEO TUTORIAL] AS3 & Flixel, Crear un simple juego.
« en: 18 de Julio de 2011, 08:36:19 am »
Para los que no sepan que es flixel, flixel es una librería de clases creadas por Adam 'Atomic' Saltsman para facilitar la creación de juegos, esta no tiene ningun IDE solo son clases. Ademas en este video tutorial trato de explicar basicamente como funciona la POO ( Programación orientada a Objetos) y la utilización de clases, que en AS3  es mejor aprender ya que trabajar con un IDE y linea de tiempo complica muchísimo las cosas, así que a los que lean les recomiendo comiencen a trabajar con clases y no con linea de tiempo.

Las herramientas necesarias para este tutorial son :

FlashDevelop http://flashdevelop.org // Es simplemente un editor de codigo, basicamente esto lo podrias programar con notepad e igual funcionaría, pero FD tiene varias funciones utiles que mejoran la producción.

Flex SDK (http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK) // Flex es un framework open source creado por Adobe para crear aplicaciones para AIR, flash player, android, iphone.. etc etc..

Flixel (http://flixel.org// Como ya mencione arriba es una librería enfocada en el desarrollo de videojuegos 2D


Lo mejor de todo esto es que es gratis, no tienes que pagar ninguna licencia cara de adobe (Flash CS5 o CS5.5 y derivados) para desarrollar juegos en as3, así que ya no se preocupen por conseguir el próximo keygen o crack para el CS5, esta es la opción open source.

El video:
Este video tutorial dura aproximadamente 1 hora y 44 min, y básicamente muestra como crear un juego simple en menos de 2 horas.

http://www.youtube.com/watch?v=7xEJfH5j648

Espero les sirva.
Saludos.

Páginas: [1] 2