<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El Futirifoken &#187; videojuegos</title>
	<atom:link href="http://www.gazer.com.ar/tag/videojuegos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gazer.com.ar</link>
	<description>El arte de no decir nada ;-)</description>
	<lastBuildDate>Mon, 26 Dec 2011 19:56:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>El diario Escondido</title>
		<link>http://www.gazer.com.ar/2009/05/21/el-diario-escondido/</link>
		<comments>http://www.gazer.com.ar/2009/05/21/el-diario-escondido/#comments</comments>
		<pubDate>Thu, 21 May 2009 20:41:22 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=1099</guid>
		<description><![CDATA[Luego de muchos meses de mucho trabajo, remasterización, ajustes, pruebas y demás, finalmente pudimos terminar y poner online una de las campañas más ambiciosas que hemos hecho hasta ahora : El diario Escondido. http://www.youtube.com/watch?v=MUI7FbMoNDw Hasta el día del lanzamiento solo podrán ver el trailer, si lo juegan me gustaría que después se pasen y dejen [...]]]></description>
			<content:encoded><![CDATA[<p>Luego de muchos meses de mucho trabajo, remasterización, ajustes, pruebas y demás, finalmente pudimos terminar y poner online una de las campañas más ambiciosas que hemos hecho hasta ahora : <a href="http://www.eldiario.paginasamarillas.com.ar/">El diario Escondido</a>.</p>
<p style="text-align: center;">
<p><a href="http://www.youtube.com/watch?v=MUI7FbMoNDw">http://www.youtube.com/watch?v=MUI7FbMoNDw</a></p>
</p>
<p>Hasta el día del lanzamiento solo podrán ver el trailer, si lo juegan me gustaría que después se pasen y dejen opiniones sobre qué les pareció <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>PD: No, no estoy autorizado a decirles como pasar, sumarles puntos extra o hacerlos subir de ranking <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2009/05/21/el-diario-escondido/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>State Machine</title>
		<link>http://www.gazer.com.ar/2008/12/08/state-machine/</link>
		<comments>http://www.gazer.com.ar/2008/12/08/state-machine/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 18:33:39 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=702</guid>
		<description><![CDATA[Varios días atrás tuve que hacer un juego simple, un memotest para ser exacto, para correr en unos &#8220;kioskos&#8221; para un cliente. Ya que tenía pendiente aprender a usar RubyGame, lo hicimos con este framework para ver que onda, ya que hasta ahora veníamos usando pyGame. El juego salió super rápido, sin mayores problemas, pero [...]]]></description>
			<content:encoded><![CDATA[<p>Varios días atrás tuve que hacer un juego simple, un memotest para ser exacto, para correr en unos &#8220;kioskos&#8221; para un cliente. Ya que tenía pendiente aprender a usar RubyGame, lo hicimos con este framework para ver que onda, ya que hasta ahora veníamos usando pyGame.</p>
<p>El juego salió super rápido, sin mayores problemas, pero la lógica de juego no me gustaba porque teníamos que andar trackeando el estado actual a mano, muchos ifs y comprobaciones que hacían del loop de juego un choclo de código.</p>
<p>Es por eso que me puse a ver un poco como aprovechar el tener bloques de código para encapsular la lógica del juego un poco más prolijo. Antes de comenzar encontré la gema <a href="http://statemachine.rubyforge.org/">Statemachine</a> pero a primera vista no la entendí mirando los ejemplos <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  y luego de jugar un rato no me terminó de convencer ya que parece mucho más de lo que yo necesitaba.</p>
<p>El resultado de un par de horas de tirar &#8220;magia&#8221; fue poder definir la lógica de la siguiente manera (el ejemplo está simplificado, omitiendo los efectos y parte de la lógica) :</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Logic
  <span style="color:#9966CC; font-weight:bold;">include</span> StateMachine
  <span style="color:#008000; font-style:italic;"># Esperando interacción del usuario</span>
  state <span style="color:#ff3333; font-weight:bold;">:user_input</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@events</span>.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>event<span style="color:#006600; font-weight:bold;">|</span>
      <span style="color:#9966CC; font-weight:bold;">case</span> event
      <span style="color:#9966CC; font-weight:bold;">when</span> MouseDownEvent
        selected event.<span style="color:#9900CC;">pos</span>
      <span style="color:#9966CC; font-weight:bold;">when</span> QuitEvent
        end_game
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Oculta las piezas seleccionadas cuando no hubo match</span>
  state <span style="color:#ff3333; font-weight:bold;">:clear</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@selected</span>.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> f.<span style="color:#9900CC;">hide</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#0066ff; font-weight:bold;">@selected</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Cambio de estado</span>
  transition <span style="color:#ff3333; font-weight:bold;">:user_input</span>, <span style="color:#ff3333; font-weight:bold;">:clear</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@selected</span>.<span style="color:#9900CC;">size</span> == <span style="color:#006666;">2</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Cambio de estado</span>
  transition <span style="color:#ff3333; font-weight:bold;">:clear</span>, <span style="color:#ff3333; font-weight:bold;">:user_input</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0000FF; font-weight:bold;">true</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Cada declaración de <code>state</code> tiene el código que se debe ejecutar cuando estamos en dicho estado, mientras que las <code>transition</code> son usadas automáticamente para saber a qué estado nos debemos mover. La primer <code>transition</code> que retorne <code>true</code>, se toma el estado destino y se asigna como el actual.</p>
<p>Por el lado del game loop, lo único que se debe hacer es llamar a un método que se encarga de ejecutar el estado actual y luego verificar si alguna transición retorna &#8220;true&#8221; y se cambia al nuevo estado.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Game
  <span style="color:#9966CC; font-weight:bold;">include</span> Rubygame
  <span style="color:#9966CC; font-weight:bold;">include</span> Logic
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> event_loop
    <span style="color:#CC0066; font-weight:bold;">loop</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      current_state
&nbsp;
      <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#9966CC; font-weight:bold;">if</span> game_ended?
&nbsp;
      draw
      <span style="color:#0066ff; font-weight:bold;">@clock</span>.<span style="color:#9900CC;">tick</span>
      <span style="color:#0066ff; font-weight:bold;">@screen</span>.<span style="color:#9900CC;">update</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>En <code>Game</code> hay otros métodos auxiliares como <code>game_ended</code>, <code>draw</code> y <code>selected</code>, que no vienen mucho al caso en este momento.</p>
<p>El próximo paso ahora es limpiar un poco esto, ver si no hay una forma mejor de hacerla y publicar el esqueleto completo (la idea a futuro es tener un generator) para poder tener un mini framework para hacer juegos simples.</p>
<p>Si buscan un framework interesante les recomiendo <a href="http://www.shatteredruby.com/">Shattered Ruby</a> (<a href="http://github.com/mikkel/shattered/tree/master">git repo</a>), aunque al momento de escribir este post el sitio principal no responde.</p>
<p><a href='http://www.gazer.com.ar/wp-content/uploads/2008/12/state_machine.rb'>state_machine.rb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2008/12/08/state-machine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MovieClip Factory en Flash</title>
		<link>http://www.gazer.com.ar/2008/12/04/movieclip-factory-en-flash/</link>
		<comments>http://www.gazer.com.ar/2008/12/04/movieclip-factory-en-flash/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 00:37:18 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=954</guid>
		<description><![CDATA[Para un videojuego que nos pidió un cliente tuve que solucionar un problema que me costó bastante y es por eso que lo comparto. Si bien no me gusta mucho escribir por acá sobre software privativo, en este caso encontré tan poca información que me pareció bueno compartirlo. El juego en cuestión es un scroller [...]]]></description>
			<content:encoded><![CDATA[<p>Para un videojuego que nos pidió un cliente tuve que solucionar un problema que me costó bastante y es por eso que lo comparto. Si bien no me gusta mucho escribir por acá sobre software privativo, en este caso encontré tan poca información que me pareció bueno compartirlo.</p>
<p>El juego en cuestión es un scroller horizontal, en donde van entrando chimeneas (mas bien techos con sus chimeneas) y Papá Noel tiene que hacer el delivery de regalos <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . El problema apareció cuando empecé a agregar más y más techos al escenario.</p>
<p>La forma en que inicialmente lo manejaba era con un gran MovieClip que tenía adentro los techos en sus respectivas posiciones y luego moviendo el gran MovieClip movía todo. Simple, pero inefectivo. Según parece (aunque no hay nadie que lo confirme) Flash se lleva mal con las técnicas de clipping básicas y por eso el mover un MovieClip enorme (estamos hablando de 4000 o 5000px de ancho) le es costoso (algo así como consumir el 95% del CPU). Otra cosa que incrementaba el problema es que el juego tiene 3 layers para hacer un efecto de <a href="http://en.wikipedia.org/wiki/Parallax_scrolling">Parallax scrolling</a>.</p>
<p>Esto hizo que empezara a investigar opciones, y la solución que mejor se adapta es crear los objetos antes de que entren en pantalla (unos pixels antes) y destruirlos al salir. Ahora bien, crear y destruir objetos <em>on-the-fly</em> es aún peor en muchos casos que el problema inicial <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . La solución real al problema es reutilizar las instancias en lugar de eliminarlas. ¿Cómo?. Seguí leyendo.</p>
<p>La idea básica es que cuando un MovieClip sale de pantalla, en lugar de eliminarlo lo ocultamos. De esta forma Flash lo ignora al hacer el render. Si en algún momento necesitamos crear un objeto del mismo tipo, en lugar de crear uno nuevo, reutilizamos el que teníamos oculto y lo hacemos visible (previo acomodarlo donde corresponde). Ahora multipliquen esta idea por 10 tipos de objetos diferentes, y que además son generados al azar antes de empezar cada nivel (no puedo predecir cuantos de cada tipo necesito).</p>
<p>Esto hace que en lugar de tener una lista de MovieClips tengamos una lista de puntos, y solo movemos los puntos. En cada frame nos fijamos que puntos están por entrar a la pantalla y creamos el nuevo objeto y lo ponemos en la posición del punto. Mi código luce más o menos así :</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// Crea los objetos que deben estar visibles</span>
<span style="color: #808080; font-style: italic;">// en un momento dado.</span>
<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span>i <span style="color: #66cc66;">&lt;</span> chimeneas.<span style="color: #0066CC;">length</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">var</span> o:<span style="color: #0066CC;">Object</span> = chimeneas<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>o.<span style="color: #006600;">x</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Stage</span>.<span style="color: #0066CC;">width</span>+<span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// Este punto está muy afuera y como</span>
    <span style="color: #808080; font-style: italic;">// están ordenados, el resto también.</span>
    <span style="color: #b1b100;">break</span>;
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">// Si estoy a 10 pixels de entrar lo creo</span>
  <span style="color: #000000; font-weight: bold;">var</span> t:Techo = factory.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span>o.<span style="color: #006600;">techo</span>, <span style="color: #ff0000;">&quot;techo&quot;</span>+last_id, <span style="color: #cc66cc;">9000</span>+last_id<span style="color: #66cc66;">&#41;</span>;
  <span style="color: #808080; font-style: italic;">// Acomodo el nuevo objeto, ya sea nuevo nuevo u obtenido del cache</span>
  t.<span style="color: #0066CC;">_x</span> = o.<span style="color: #006600;">x</span>;
  t.<span style="color: #0066CC;">_y</span> = <span style="color: #0066CC;">Stage</span>.<span style="color: #0066CC;">height</span> - <span style="color: #cc66cc;">125</span>;
  <span style="color: #808080; font-style: italic;">// Esta lista tiene los Techos reales que estan visibles en pantalla</span>
  techos.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>t<span style="color: #66cc66;">&#41;</span>;
  last_id++;
  ++i;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">// Elimino los puntos que ya use</span>
chimeneas = chimeneas.<span style="color: #0066CC;">splice</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>La solución que implementé fue esto que llamo &#8220;MovieClip Factory&#8221; que adjunto al final del post para quien quiera descargarla. La idea es que en lugar de crear un nuevo MovieClip con attachMovie, lo hago con la factory. Esta clase se encarga de manejar al lógica de caching de manera transparente.</p>
<p>Cuando no necesitamos más un objeto simplemente lo devolvemos a la fábrica y así esta lo deja a la espera de ser reusado. Un ejemplo de uso sería algo como sigue :</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* mc sería el MovieClip que queremos usar como padre */</span>
factory = <span style="color: #000000; font-weight: bold;">new</span> Factory<span style="color: #66cc66;">&#40;</span>mc<span style="color: #66cc66;">&#41;</span>;
factory.<span style="color: #006600;">registerCode</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #ff0000;">&quot;Techo01&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> t:<span style="color: #0066CC;">MovieClip</span> = factory.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #ff0000;">&quot;un_id&quot;</span>, <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// Devuelvo el objeto al factory.</span>
factory.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>t<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">/* A este punto t y u son el mismo objeto */</span>
<span style="color: #000000; font-weight: bold;">var</span> u:<span style="color: #0066CC;">MovieClip</span> = factory.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #ff0000;">&quot;un_id&quot;</span>, <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Haciendo las cuentas, si en promedio mis techos miden 250px cada uno, de hacerlo de la manera inicial tendría que crear unos 16 techos para un escenario de 4000px de ancho. Usando el factory, suponiendo que más de 4 techos a la vez no puedo ver (por el ancho del área visible) en el peor de los casos tengo 4 de cada tipo de techo (2 completos y 2 mitades, una que entra y una que sale), es decir 20 objetos en memoria siendo el consumo mayor.</p>
<p>Sin embargo al generar el escenario en forma aleatoria yo valido que no toquen 2 iguales seguidos porque quedaban feos, por lo que la cuenta en realidad da 2 objetos simultáneos máximo de cada tipo, siendo 10 en total en memoria.</p>
<p>La otra ventaja es que puedo hacer el escenario infinitamente largo a costo constante de uso de memoria <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href='http://www.gazer.com.ar/wp-content/uploads/2008/12/factory.as'>Descargar MovieClip Factory</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2008/12/04/movieclip-factory-en-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hitman: Agent 47</title>
		<link>http://www.gazer.com.ar/2008/01/23/hitman-agent-47/</link>
		<comments>http://www.gazer.com.ar/2008/01/23/hitman-agent-47/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 02:33:59 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Cine]]></category>
		<category><![CDATA[Yo Estuve Ahí]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/2008/01/23/hitman-agent-47/</guid>
		<description><![CDATA[Ayer fui al preestreno (a.k.a Avant Premiere) de la película basada en los juegos Hitman, invitado por Speedy. El overall siendo generoso, es un 5/10. El actor no está mal, un poco duro para mi gusto, aunque bueno, tiene que imitar a un mesh 3D , fuera de chiste, yo prefería a Jason Statham para [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><a title="Hitman: Agent 47" href="http://www.gazer.com.ar/wp-content/uploads/2008/01/hitman_uk_poster.jpg"><img src="http://www.gazer.com.ar/wp-content/uploads/2008/01/hitman_uk_poster.jpg" alt="Hitman: Agent 47" width="196" height="284" align="right" /></a>Ayer fui al preestreno (a.k.a Avant Premiere) de la película basada en los juegos <a href="http://es.wikipedia.org/wiki/Hitman">Hitman</a>, invitado por <a href="http://www.speedy.com.ar">Speedy</a>. El overall siendo generoso, es un 5/10.</p>
<p align="left">El actor no está mal, un poco duro para mi gusto, aunque bueno, tiene que imitar a un mesh 3D <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> , fuera de chiste, yo prefería a <a href="http://www.imdb.com/name/nm0005458/">Jason Statham</a> para el panel, ya que la primera vez que vi The Transporter, pense en &#8220;uh, este es como Hitman!&#8221;.</p>
<p>La película me resulto muy corta. Si no hice mal mis matemáticas fue una hora y media. Ahora, o estaba cortada o no daba para más <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>En general esta bien cuidado el personaje, salvo en un par de lugares donde sonríe frente a algún chiste de su co-star <a href="http://www.imdb.com/name/nm1385871/">Olga Kurylenko</a> (si, si, lo tuve que buscar). Desde cuando un super asesino sonríe ?!! <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Las escenas de accion estan bien, no se me ocurre ahora criticarles mucho más de que duran como 30 segundos cada una. Como buen asesino que es, lo hace todo rápido y no deja nadie de pié <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Podrían haberlas hecho en slowmotion para que duren más !!.</p>
<p>El personaje da para hacer buenas películas y espero que estén pensando en hacer una segunda un poco mejor. Seguramente habrá que esperar un rato</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2008/01/23/hitman-agent-47/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Más PacMan!!</title>
		<link>http://www.gazer.com.ar/2005/06/03/mas-pacman/</link>
		<comments>http://www.gazer.com.ar/2005/06/03/mas-pacman/#comments</comments>
		<pubDate>Fri, 03 Jun 2005 04:06:34 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=135</guid>
		<description><![CDATA[Si amigos!, mientras trato de hacer el código algo presentable, tengo nuevas novedades. Hoy Alan me hizo notar que mi juego estaba adaptado para celulares demasiados groso (pantallas de 240&#215;240 pixels). Claro que no es la realidad de la mayoría. Por lo tanto, me tuve que poner a implementar window-scrolling, y para que quede como [...]]]></description>
			<content:encoded><![CDATA[<p>Si amigos!, mientras trato de hacer el código algo presentable, tengo nuevas novedades. Hoy Alan me hizo notar que mi juego estaba <em>adaptado</em> para celulares demasiados groso (pantallas de 240&#215;240 pixels). Claro que no es la realidad de la mayoría.</p>
<p>Por lo tanto, me tuve que poner a  implementar window-scrolling, y para que quede como a mi me gustaba, lo hice desde 0, logrando algo que realmente me gusta, tanto en código como visualmente.</p>
<p>Antes de liberarlo, les dejo un lindo <a href="http://www.gazer.com.ar/wp-content/j2me.html">swf</a> mostrando como se ve en los distintos modelos, les voy a visando, son 4Mb.</p>
<p><strong>UPDATE:</strong> Ya puse el código fuente disponible en mi repositorio de darcs. Para bajarlo (si tenés darcs instalado) : darcs get http://www.gazer.com.ar/repos/PacMan , Si no tenes darcs, no existís <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2005/06/03/mas-pacman/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Juegos con J2ME</title>
		<link>http://www.gazer.com.ar/2005/06/01/juegos-con-j2me/</link>
		<comments>http://www.gazer.com.ar/2005/06/01/juegos-con-j2me/#comments</comments>
		<pubDate>Wed, 01 Jun 2005 20:10:21 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/?p=134</guid>
		<description><![CDATA[Ya he repetido una y otra vez lo que opino de Java, pero también en el último tiempo vengo diciendo que veía con buenos ojos J2ME, la edición para dispositivos móviles de esta plataforma. Mi interés inicial es hacer juegos con ella, por lo que en el último mes vengo lentamente avanzando en un juego [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gazer.com.ar/wp-content/j2me_pacman_1.png"><img class="alignright" src="http://www.gazer.com.ar/wp-content/j2me_pacman_1_mini.png" alt="PacMan!" /></a>Ya he repetido una y otra vez lo que opino de Java, pero también en el último tiempo vengo diciendo que veía con buenos ojos J2ME, la edición para dispositivos móviles de esta plataforma. Mi interés inicial es hacer juegos con ella, por lo que en el último mes vengo lentamente avanzando en un juego totalmente innovador, nuevo y de concepto radical : un PacMan <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>La primera aproximación del juego es funcional, tenemos a PacMan que se mueve, detecta choques, <em>come</em> pastillitas y todo eso. También tenemos unos fantasmas medio <em>lelos</em>, que se mueven de manera pseduo-aleatoria, con una simple <a href="http://es.wikipedia.org/wiki/Aut%C3%B3mata_finito">máquina de estados finidos</a>.</p>
<p>Claro que el código apesta, es una mugre que fui toquetando a lo largo de un mes, mientras iba de tutorial en tutorial, pasando por la documentación de la API, pero se puede mejorar sin mucho esfuerzo. A nivel de implementación gráfico también apesta, ya que no uso backbuffering, lo que me obliga a redibujar la totalidad de la pantalla en cada iteración.</p>
<p>En fin, es un proyecto que me está gustando hacer, la plataforma está muy bien pensada (no así J2SE <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ) y creo que tiene un futuro en mis desarrollos. Lo interesante es toda la movida que se está lanzando sobre APIs 3D, que cada día más modelos de celulares soportan una calidad gráfica 3D que sorprende.</p>
<p>La imagen que adjunto es un screenshot del emulador de Sun con el juego en acción.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2005/06/01/juegos-con-j2me/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

