Autor Tema: [PROYECTO] Shin, Game Framework para Monkey.  (Leído 1057 veces)

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
[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.

Comunidad PHPeros

[PROYECTO] Shin, Game Framework para Monkey.
« en: 16 de Febrero de 2012, 03:19:43 am »

Desconectado SoyJoaquin.

  • PHPero Master
  • ******
  • Mensajes: 2.737
  • Karma: 131
  • Sexo: Masculino
  • ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ Problem?
    • Ver Perfil
    • IsoMap
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #1 en: 16 de Febrero de 2012, 03:42:03 am »
Muy buen trabajo supongo, aunque debo aceptar que aun desconociendo este lenguaje, logro ver que posee muy amplias ramas que son realmente interesantes y que sobretodo desconocía.

Seria realmente de utilidad que publicaras algunos temas para orientarnos hacia Monkey, ya que aveces no conocemos lo que quizás hemos estado buscando.

Veo que incluso Dart no se a llegado a tomar en cuenta aun cuando posee muchas mas posibilidades que el mismo PHP y eso que aun su plataforma es nueva.

Saludos y muy buen trabajo sin duda.
K+
« Última modificación: 16 de Febrero de 2012, 03:45:30 am por SoyJoaquin. »
Twitter: @JoakoM010



Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #2 en: 17 de Febrero de 2012, 16:14:28 pm »
A penas llegue a mi casa haré una introducción a lo que es Monkey, es un lenguaje realmente interesante. Esta muy enfocado a lo que es desarrollo de juegos y aplicaciones. Puedes crear tus propios targets o modificarlos a tu gusto, por ejemplo en la comunidad se hablaba de crear un target para nintendo ds y ya existe uno para AmigaOS creado por miembros de la comunidad.
En mi framework lo que hice fue agregar un par de features a los targets existentes que son iOS, Android, Flash, Html5, XNA( xbox, windows phone ), glfw( windows y mac ) y ademas de crear programas de consola. de hecho el traductor de monkey está escrito en monkey.
Mas tarde hago una introducción mas extensa explicando mas o menos como funciona, los pro y contra, los módulos existentes, etc.

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #3 en: 20 de Febrero de 2012, 01:11:12 am »
Hago una pequeña actualización.
Ahora los gráficos son cargados con un Gfx, que funciona como administrador de gráficos.
Antes para cargar una imagen a Sprite era:

Código: [Seleccionar]
Local img:Sprite = New Sprite("imagen.png")

Ahora es:

Código: [Seleccionar]
Local img:Image = LoadImage("imagen.png")
Gfx.Add("imagen1",img)

Local sprt:Sprite = New Sprite("imagen1")

De esta forma se evita iniciar un objeto Image cada vez que se crea un Sprite y simplemente se hace una vez en el constructor de Game.
Ahora comenzaré a trabajar en Tilemaps.

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #4 en: 20 de Febrero de 2012, 21:32:27 pm »
Una nueva actualización, ahora Shin tiene tilemaps
Acá hay un ejemplo:
http://www.ilovepixel.net/tilemap/

Acá es como se genera:

Código: [Seleccionar]
map1 = New Stack<Int[]>()
map1.Push([1,1,1,1,1,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,0,0,1,0,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,1,1,1,1,1])

map2 = New Stack<Int[]>()
map2.Push([0,0,0,0,0,0,0,1,1,1,1,1,1])
map2.Push([0,0,0,0,0,0,0,1,0,0,0,1,1])
map2.Push([0,0,0,0,0,0,0,1,0,1,0,0,1])
map2.Push([0,0,0,0,0,0,0,1,0,0,1,0,1])
map2.Push([0,0,0,0,0,0,0,1,0,0,0,0,1])
map2.Push([0,0,0,0,0,0,0,1,1,1,1,1,1])

Local tl:Tile = New Tile("tiles",40,40)
mp = New TileMap(tl,map2)

Self.BuildTileMap(tl,map1)
Self.BuildTileMap(mp)

Saludos!

Desconectado SoyJoaquin.

  • PHPero Master
  • ******
  • Mensajes: 2.737
  • Karma: 131
  • Sexo: Masculino
  • ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ Problem?
    • Ver Perfil
    • IsoMap
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #5 en: 21 de Febrero de 2012, 03:11:42 am »
Una nueva actualización, ahora Shin tiene tilemaps
Acá hay un ejemplo:
http://www.ilovepixel.net/tilemap/

Acá es como se genera:

Código: [Seleccionar]
map1 = New Stack<Int[]>()
map1.Push([1,1,1,1,1,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,0,0,1,0,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,1,1,1,1,1])

map2 = New Stack<Int[]>()
map2.Push([0,0,0,0,0,0,0,1,1,1,1,1,1])
map2.Push([0,0,0,0,0,0,0,1,0,0,0,1,1])
map2.Push([0,0,0,0,0,0,0,1,0,1,0,0,1])
map2.Push([0,0,0,0,0,0,0,1,0,0,1,0,1])
map2.Push([0,0,0,0,0,0,0,1,0,0,0,0,1])
map2.Push([0,0,0,0,0,0,0,1,1,1,1,1,1])

Local tl:Tile = New Tile("tiles",40,40)
mp = New TileMap(tl,map2)

Self.BuildTileMap(tl,map1)
Self.BuildTileMap(mp)

Saludos!

Esta excelente!
Aun espero con ansias el tema para la introducción a Monkey haha
Saludos y suerte!
Twitter: @JoakoM010



Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #6 en: 22 de Febrero de 2012, 03:28:07 am »
Haré un pequeño videotutorial.

Ahora aprovechando que puedo crear Tilemaps decidí agregar rapidamente tilemaps isometricos, ocupando como referencia el Build de Baldosas para juego Isometrico de SoyJoaquin. (URL).
Esto es simplemente con el metodo BuildIsoTilemap()

Código: [Seleccionar]
map1 = New Stack<Int[]>()
map1.Push([1,1,1,1,1,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,0,0,1,0,1])
map1.Push([1,0,0,0,0,1])
map1.Push([1,1,1,1,1,1])

map2 = New Stack<Int[]>()
map2.Push([1,1,1,1,1,1])
map2.Push([1,0,0,0,1,1])
map2.Push([1,0,1,0,0,1])
map2.Push([1,0,0,1,0,1])
map2.Push([1,1,0,0,0,1])
map2.Push([1,1,1,1,1,1])

Local tl:Tile = New Tile("tiles",40,40)
Local is:Tile = New Tile("iso",38,19)
Local mps:TileMap = New TileMap(tl,map2)
mp = New TileMap(is,map1)
Local ms:TileMap = New TileMap(is,map2)

Self.BuildTileMap(tl,map1)
Self.BuildTileMap(mps,300,0)
Self.BuildIsoTilemap(mp,100,300)
Self.BuildIsoTilemap(ms,400,300)

Acá pueden ver un Demo:
Link

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #7 en: 23 de Febrero de 2012, 04:56:27 am »
Agregue Sfx a shin, el que funciona como administrador de sonidos.

A demás Hice una simple intro a Monkey:

http://youtu.be/HnwzPqxaPBY

Saludos.
« Última modificación: 23 de Febrero de 2012, 05:01:13 am por ilovepixel »

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #8 en: 23 de Febrero de 2012, 07:52:24 am »
Una pequeña actualización:

Agregue las clases de Rectángulo y Puntos, eso me ayudará a mejorar las colisiones, pensaba en implementar colisiones SAT.

Ademas agregue el método Drag() a Sprite, hace lo mismo que StartDrag() en Sprite de AS3.

Acá hay un ejemplo:

http://ilovepixel.net/monkey/drag/

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #9 en: 24 de Febrero de 2012, 05:27:36 am »
Otro update nuevo. Agregue colisiones SAT bastante simples, solo para rectangulos.
Se utiliza:

Código: [Seleccionar]
Field spr:Sprite
Field gr:Group

Method New()
Super.New()
gr = New Group()
spr = New Sprite("imagen1")
For Local i:Int = 0 To 100
Local s:Sprite = New Sprite("imagen1")
Self.Add(s)
gr.Add(s)
Next
End

Method Update:Void()
spr.Collides(gr)

spr.x = MouseX
spr.y = MouseY
End

Acá hay un ejemplo:
http://ilovepixel.net/monkey/collision/

Saludos

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #10 en: 24 de Febrero de 2012, 08:58:08 am »
Otro ejemplo de colisiones con tilemaps:

http://ilovepixel.net/monkey/collision2/

Las colisiones con tilemaps ya existe pero aveces lanza el objeto fuera del mapa debido a la división de cada tile, es por eso que le agregare un generador de rectángulos grandes que abarque mas de un solo tile.

Saludos.

Desconectado SoyJoaquin.

  • PHPero Master
  • ******
  • Mensajes: 2.737
  • Karma: 131
  • Sexo: Masculino
  • ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ Problem?
    • Ver Perfil
    • IsoMap
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #11 en: 27 de Febrero de 2012, 22:30:47 pm »
Otro ejemplo de colisiones con tilemaps:

http://ilovepixel.net/monkey/collision2/

Las colisiones con tilemaps ya existe pero aveces lanza el objeto fuera del mapa debido a la división de cada tile, es por eso que le agregare un generador de rectángulos grandes que abarque mas de un solo tile.

Saludos.

Con este ejemplo se ve mas claramente lo de las colisiones, note que al tratar de crear un policía en un área de colisión, el te lo crea en el borde mas cercano y me parece bien pero creo que tiene algún problema con el borde inferior

Saludos.
Twitter: @JoakoM010



Desconectado Animus

  • PHPero Avanzado
  • ****
  • Mensajes: 273
  • Karma: 1
  • Sexo: Masculino
  • Aprende a aprender, el resto vendrá solo.
    • Ver Perfil
Re:[PROYECTO] Shin, Game Framework para Monkey.
« Respuesta #12 en: 23 de Marzo de 2012, 10:04:37 am »
No me gusta la sintaxis es parecida a vB.


La red social de tus sueños.