  <?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>Athanazio &#187; game</title>
	<atom:link href="http://www.athanazio.com/tag/game/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.athanazio.com</link>
	<description>Nada é Simples, Mas Tudo é Possível</description>
	<lastBuildDate>Thu, 01 Dec 2011 03:47:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>pongMe &#8211; primeiro teste com Flashdevelop + Flashpunk</title>
		<link>http://www.athanazio.com/2010/04/21/pongme-primeiro-teste-com-flashdevelop-flashpunk/</link>
		<comments>http://www.athanazio.com/2010/04/21/pongme-primeiro-teste-com-flashdevelop-flashpunk/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 00:45:19 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flashdevelop]]></category>
		<category><![CDATA[flashpunk]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[pong]]></category>
		<category><![CDATA[sample]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2547</guid>
		<description><![CDATA[Apos alguns arranhoes e minha vista cansada, porque ainda nao troquei o oculos &#8230; fiz algo que funciona, um quadradinho que vai para um lado e para o outro batendo nas paredes veja que legal, pongme o codigo fonte eh razoalmente simples: um arquivo Main.as que faz a inicializacoes do framework flashpunk, uma classe para [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Apos alguns arranhoes e minha vista cansada, porque ainda nao troquei o oculos &#8230; fiz algo que funciona, um quadradinho que vai para um lado e para o outro batendo nas paredes <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>veja que legal, <a href='http://www.athanazio.com/wp-content/uploads/2010/04/pongme.swf'>pongme</a></p>
<p>o codigo fonte eh razoalmente simples:<br />
um arquivo Main.as que faz a inicializacoes do framework flashpunk, uma classe para cada intancia de World, que  representa cada cena, por exemplo Menu, o jogo em si, tela de fim de jogo e assim por diante, e objetos filhos de Actor que sao elementos de tela.</p>
<p>seguem os arquivos que usei<br />
<span id="more-2547"></span></p>
<p>main.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.core.*;
	import punk.util.*;
	import punk.*;

	[SWF(width = &quot;480&quot;, height = &quot;320&quot;)]

	public class Main extends Engine
	{
		public function Main()
		{
			super(480, 320, 60, 1, Menu);
		}
	}
}
</pre>
<p>menu.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.core.*;
	import punk.util.*;
	import punk.*;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class Menu extends World
	{

		public function Menu()
		{
			Text.color = 0x667CFF;
			var centerX:int = FP.screen.width / 2;
			var centerY:int = FP.screen.height / 2;

			var title:Text = new Text(&quot;PongMe!\nPress Space to play.&quot;, centerX, centerY);
			title.size = 15;
			title.center();
			add(title);
		}

		override public function update():void
		{
			if (Input.pressedKey(Key.SPACE))
				FP.goto = new GameWorld();
		}

	}

}
</pre>
<p>gameworld.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{

	import punk.core.World;
	import punk.Text;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class GameWorld extends World
	{

		public function GameWorld()
		{
		}

		override public function init():void
		{
			FP.randomizeSeed();

			Text.color = 0x667CFF;
			add(new Text(&quot;Game Screen.&quot;, 10, 10));

			add(new Player());
			add(new Ball());
			add(new WallTop());
			add(new WallLeft());
			add(new WallRight());
		}
	}

}
</pre>
<p>player.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.util.Input;
	import punk.util.Key;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class Player extends Actor
	{
		private var speed:Number = 3;

		[Embed(source='data/player.png')] private var ImgPlayer:Class;
		public function Player()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			speed = 6 * (sprite.width / FP.fps);
			setHitbox( sprite.width, sprite.height, 0, 0);

			x = 100;
			y = 200;
			type = &quot;player&quot;;

			Input.define(&quot;right&quot;, Key.RIGHT);
			Input.define(&quot;left&quot;, Key.LEFT);
			Input.define(&quot;up&quot;, Key.UP);
			Input.define(&quot;down&quot;, Key.DOWN);
		}

		override public function update():void
		{
			var newX:Number = x;
			var newY:Number = y;

			if (Input.check(&quot;right&quot;)) newX += speed;
			if (Input.check(&quot;left&quot;)) newX -= speed;
			if (Input.check(&quot;up&quot;)) newY -= speed;
			if (Input.check(&quot;down&quot;)) newY += speed;

			if ( ! collide(&quot;wall&quot;, newX, newY) )
			{
				x = newX;
				y = newY;
			}

			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;
			if ( ball )
			{
				ball.speedY = ball.speedY * -1;
			}

		}

	}

}
</pre>
<p>ball.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class Ball extends Actor
	{
		public var speedX:Number = 0;
		public var speedY:Number = 0;

		[Embed(source='data/ball.png')]	private var ImgPlayer:Class;
		public function Ball()
		{
			super();
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			speedX = 7 * (sprite.width / FP.fps);
			speedY = 7 * (sprite.width / FP.fps);

			x = 100;
			y = 100;
			type = &quot;ball&quot;;
		}

		override public function update():void
		{
			x += speedX;
			y += speedY;
		}

	}

}
</pre>
<p>wallleft.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.core.Entity;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class WallLeft extends Actor
	{
		[Embed(source='data/wall-vert.png')] private var ImgPlayer:Class;
		public function WallLeft()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			setHitbox( sprite.width, sprite.height, 0, 0);
			x = 0;
			y = 0;
			type = &quot;wall&quot;;
		}

		override public function update():void
		{
			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;

			if ( ball )
			{
				ball.speedX = ball.speedX * -1;
			}
		}
	}

}
</pre>
<p>wallright.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.core.Entity;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class WallRight extends Actor
	{
		[Embed(source='data/wall-vert.png')] private var ImgPlayer:Class;
		public function WallRight()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			setHitbox( sprite.width, sprite.height, 0, 0);
			x = FP.screen.width - sprite.width;
			y = 0;
			type = &quot;wall&quot;;
		}

		override public function update():void
		{
			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;

			if ( ball )
			{
				ball.speedX = ball.speedX * -1;
			}
		}

	}

}
</pre>
<p>walltop.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.core.Entity;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class WallTop extends Actor
	{
		[Embed(source='data/wall-top.png')] private var ImgPlayer:Class;
		public function WallTop()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			setHitbox( sprite.width, sprite.height, 0, 0);
			x = 0;
			y = 0;
			type = &quot;wall&quot;;
		}

		override public function update():void
		{
			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;

			if ( ball )
			{
				ball.speedY = ball.speedY * -1;
			}
		}

	}

}
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/04/21/pongme-primeiro-teste-com-flashdevelop-flashpunk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>android game &#8211; imagem e som</title>
		<link>http://www.athanazio.com/2009/11/21/android-game-imagem-e-som/</link>
		<comments>http://www.athanazio.com/2009/11/21/android-game-imagem-e-som/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 20:17:03 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[.ogg]]></category>
		<category><![CDATA[.png]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[effect]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[soundtrack]]></category>
		<category><![CDATA[sprite]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2315</guid>
		<description><![CDATA[Opa ! apos algumas idas e vindas no codigo, as coisas começam a se arrumar hehehehe, nesta versão já esta resolvida a exibição de imagem a partir do nome da imagem, e execução de som no formato ogg, tanto no loop como um som a partir de um evento do usuário. Apesar da recomendação do [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/11/android-show-image.png"><img src="http://www.athanazio.com/wp-content/uploads/2009/11/android-show-image-450x300.png" alt="android show image" title="android show image" width="450" height="300" class="alignnone size-medium wp-image-2316" /></a><br />
Opa ! apos algumas idas e vindas no codigo, as coisas começam a se arrumar hehehehe, nesta versão já esta resolvida a exibição de imagem a partir do nome da imagem, e execução de som no formato ogg, tanto no loop como um som a partir de um evento do usuário.</p>
<p>Apesar da recomendação do SDK seja de acessar os arquivos de midia através do resource ID criado na classe R, eu estou construindo as classes usando o nome do resource para poder expandir a programação do jogo para uma lingaguem de script, e usar o java como uma camada de abstração do jogo.</p>
<p>Vamos ao codigo e alguns comentarios sobre cada um :</p>
<p><strong>GameActivity </strong>- ganhou uma nova chamada para determinar que volume o jogo vai usar, setVolumeControlStream(AudioManager.STREAM_MUSIC) assim o jogo fica com o mesmo volume que estiver acertado para a musica, alem disto o metodo onDestroy() chama o novo metodo release() da view que vai se encarregar de liberar recursos e em especial mandar os audios se calarem <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.Window;

public class GameActivity extends Activity {
	private GameView view;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setVolumeControlStream(AudioManager.STREAM_MUSIC);

		view = new GameView(this, getResources());
		setContentView(view);
	}

	protected void onDestroy() {
		super.onDestroy();
		view.release();
	}

}
</pre>
<p><strong>GameView</strong> &#8211; usa as classes Sprite e Audio para exibir imagens e tocar audio, poucas mudanças comparando com a versão anterior.</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

public class GameView extends View implements Runnable {

	private static final String TAG = &quot;GAME VIEW&quot;;

	private static final int INTERVAL = 10;
	private Paint cPaint;

	private boolean running = true;

	FPSCounter fps;

	private Sprite background;
	private Sprite cloud;

	private Audio soundtrack;
	private Audio touch;

	public GameView(Context context, Resources resources) {
		super(context);

		String packageName = getClass().getPackage().getName();

		background = new Sprite(resources, packageName, &quot;background&quot;);
		cloud = new Sprite(resources, packageName, &quot;cloud&quot;);
		cloud.setCenterAtMiddle();

		soundtrack = new Audio(resources, packageName, &quot;soundtrack&quot;);
		touch = new Audio(resources, packageName, &quot;cowbell&quot;);

		soundtrack.setLooping(true);
		soundtrack.play();

		cPaint = new Paint();
		setFocusable(true);
		setClickable(true);
		setLongClickable(true);

		fps = new FPSCounter();

		// Set the background
		this.setBackgroundColor(Color.WHITE);
		Log.i(TAG, &quot;game view created&quot;);

		Thread monitorThread = new Thread(this);
		monitorThread.setPriority(Thread.MIN_PRIORITY);
		monitorThread.start();
	}

	public void draw(Canvas canvas) {
		super.draw(canvas);

		background.draw(canvas);
		cloud.draw(canvas);

		cPaint.setColor(Color.WHITE);
		canvas.drawText(fps.getFPS(), 20, 20, cPaint);
	}

	public boolean onKeyUp(int keyCode, KeyEvent event) {
		return super.onKeyUp(keyCode, event);
	}

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		boolean handled = false;
		Log.i(TAG, &quot;key down&quot;);
		float x = cloud.getX();
		float y = cloud.getY();

		if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
			y = y - 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
			y = y + 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
			x = x - 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
			x = x + 5;
			handled = true;
		}

		cloud.move(x, y);
		return handled;
	}

	public boolean onTouchEvent(MotionEvent event) {
		cloud.setX(event.getRawX());
		cloud.setY(event.getRawY());
		Log.i(TAG, &quot;on touch&quot;);

		touch.play();
		return super.onTouchEvent(event);
	}

	public void run() {
		while (running) {
			try {
				Thread.sleep(INTERVAL);
			} catch (InterruptedException e) {
				Log.e(TAG, &quot;main loop finished&quot;);
			}
			update();
			postInvalidate();
		}
	}

	private void update() {
		fps.update();

	}

	public void release() {
		running = false;
		soundtrack.release();
		touch.release();
	}

}
</pre>
<p><strong>Sprite</strong> &#8211; esta eh responsavel por exibir imagens na tela, uma atenção especial deve ser dada ao recurso de determinar o centro da imagem, isto eh muito util para responder eventos de mouse, e por exemplo posicionar a imagem centralizada onde o usuário clicou, o método setCenterAtMiddle() calcula a posição para desenhar baseado na largura e altura da imagem. e por default o centro da imagem eh no 0,0.</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;

public class Sprite {

	private static final String TAG = &quot;GAME SPRITE&quot;;
	private Bitmap bitmap;
	private float x;
	private float y;
	private float centerX;
	private float centerY;
	private float drawX;
	private float drawY;
	private Paint paint;

	public Sprite(Resources resources, String packageName, String name) {
		String logFileName = packageName + &quot; &quot; + name;
		Log.i(TAG, &quot;loading image : &quot; + logFileName);

		int id = resources.getIdentifier(name, &quot;drawable&quot;, packageName);
		bitmap = BitmapFactory.decodeResource(resources, id);
		centerX = 0;
		centerY = 0;

		setX(0);
		setY(0);

		this.paint = new Paint();
	}

	public void draw(Canvas canvas) {
		canvas.drawBitmap(bitmap, drawX, drawY, paint);
	}

	public void move(float x, float y) {
		setX(this.x + x);
		setY(this.y + y);
	}

	public void setCenterAtMiddle(){
		centerX = bitmap.getWidth() / 2F;
		centerY = bitmap.getHeight() / 2F;
	}

	public float getX() {
		return x;
	}

	public void setX(float x) {
		this.x = x;
		drawX = this.x - centerX;
	}

	public float getY() {
		return y;
	}

	public void setY(float y) {
		this.y = y;
		drawY = this.y - centerY;
	}

}
</pre>
<p><strong>Audio</strong> &#8211; esta classe esconde a criação de um MediaPlayer para cada som que se deseja tocar, imagino que o melhor cenário seria ter uma classe para som em loop que usaria um MediaPlayer, e outra classe para efeitos sonoros que tocaria no maximo N efeitos ao mesmo tempo, mantendo menos objetos MediaPlayer na memória.</p>
<p>Mas a implementação atual mantém um MediaPlayer para cada som, observar que o resource ID é recuperado pelo nome do arquivo usando o metodo resources.getIdentifier(name, &#8220;raw&#8221;, packageName) e a partir do resource ID podemos recuperar o AssetFileDescriptor com a chamada resources.openRawResourceFd(id), of file descriptor é usado para inicializar o MediaPlayer com os detalhes necessários a execução do som.</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
import android.media.MediaPlayer;
import android.util.Log;

/**
 * Audio resources abstraction
 *
 * @author athanazio
 * @see &quot;http://developer.android.com/intl/fr/guide/topics/media/index.html&quot;
 * @see &quot;http://developer.android.com/intl/fr/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States&quot;
 */
public class Audio {

	private static final String TAG = &quot;GAME AUDIO&quot;;
	private MediaPlayer player;
	private boolean ready;
	private int id;
	private AssetFileDescriptor afd;

	/**
	 *
	 * @param resources
	 * @param context
	 * @param packageName
	 * @param name
	 *
	 */
	public Audio(Resources resources, String packageName, String name) {
		String logFileName = packageName + &quot; &quot; + name;
		Log.i(TAG, &quot;loading audio : &quot; + logFileName);

		ready = false;
		player = new MediaPlayer();

		try {
			this.id = resources.getIdentifier(name, &quot;raw&quot;, packageName);
			this.afd = resources.openRawResourceFd(id);

			Log.i(TAG, &quot;loading audio : &quot; + logFileName + &quot; id:&quot; + id);

			player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
			player.setLooping(false);
			player.prepare();

			// reset the player after completion
			player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
				public void onCompletion(MediaPlayer mp) {
					try {
						player.reset();
						player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
						player.prepare();
					} catch (Exception e) {
						Log.e(TAG, &quot;error resetting the media player&quot;);
						e.printStackTrace();
					}
				}
			});

			ready = true;

		} catch (Exception e) {
			Log.e(TAG, &quot;ERROR loading audio : &quot; + logFileName);
			e.printStackTrace();
		}
	}

	public void play() {
		if (ready) {
			player.start();
		} else {
			Log.i(TAG, &quot;the player is not ready.&quot;);
		}
	}

	public void setLooping(boolean b) {
		player.setLooping(b);
	}

	public void release() {
		player.stop();
		player.release();
	}

}
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/11/21/android-game-imagem-e-som/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>batalha de tanques</title>
		<link>http://www.athanazio.com/2009/09/29/batalha-de-tanques/</link>
		<comments>http://www.athanazio.com/2009/09/29/batalha-de-tanques/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 19:33:36 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[bum]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[tank]]></category>
		<category><![CDATA[tiro]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/2009/09/29/batalha-de-tanques/</guid>
		<description><![CDATA[simples e objetivo ! bum bum bum explode tanques www.permadi.com/java/battletank/index.html]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><img src="http://www.athanazio.com/wp-content/uploads/2009/09/battle-tank.jpg" alt="battle tank" title="battle tank" width="450" height="203" class="alignnone size-full wp-image-2159" /><br />
simples e objetivo ! bum bum bum explode tanques <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<a href="http://www.permadi.com/java/battletank/index.html">www.permadi.com/java/battletank/index.html<a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/09/29/batalha-de-tanques/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vacas lutadoras</title>
		<link>http://www.athanazio.com/2009/09/28/vacas-lutadoras/</link>
		<comments>http://www.athanazio.com/2009/09/28/vacas-lutadoras/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 14:35:20 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[love2d]]></category>
		<category><![CDATA[box]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[love]]></category>
		<category><![CDATA[rio2016]]></category>
		<category><![CDATA[vaca]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2149</guid>
		<description><![CDATA[Neste jogo de combate todas as suas habilidades de lutador serao exigidas, encontre seu adversario sente do ladinho no teclado e coloque as vacas para brigar !! Este jogo foi feito em Love2D e enviado para a competicao de 48h #1 do RioGDUG riogdug48h_1_vacas_lutadores sera necessario instalar o love2d para jogar]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/09/riogdug48h_1_vacas_lutadores.love"><img src="http://www.athanazio.com/wp-content/uploads/2009/02/riogdug-vacaslutadoras-screen2.jpg" alt="riogdug vacaslutadoras screen2" title="riogdug vacaslutadoras screen2" width="450" height="352" class="alignnone size-full wp-image-2140" /></a></p>
<p>Neste jogo de combate todas as suas habilidades de lutador serao exigidas, encontre seu adversario sente do ladinho no teclado e coloque as vacas para brigar !!</p>
<p>Este jogo foi feito em Love2D e enviado para a competicao de 48h #1 do RioGDUG</p>
<p><a href="http://www.athanazio.com/wp-content/uploads/2009/09/riogdug48h_1_vacas_lutadores.love">riogdug48h_1_vacas_lutadores</a></p>
<p>sera necessario <a href="http://downloads.sourceforge.net/love/love-0.5-0.exe">instalar o love2d para jogar</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/09/28/vacas-lutadoras/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>my brute</title>
		<link>http://www.athanazio.com/2009/06/09/my-brute/</link>
		<comments>http://www.athanazio.com/2009/06/09/my-brute/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 02:40:43 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[my grute]]></category>
		<category><![CDATA[online]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1937</guid>
		<description><![CDATA[que jogo bunitinho os bonequinhos saem no tapa, e vc não interage soh assiste, e aleatoriamente a pancadaria rola hehehehe olha lah o meu bruto ! http://foo.bar2.mybrute.com]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><img src="http://www.athanazio.com/wp-content/uploads/2009/06/my-brute.png" alt="my-brute" title="my-brute" width="264" height="222" class="alignnone size-full wp-image-1938" /><br />
que jogo bunitinho <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  os bonequinhos saem no tapa, e vc não interage soh assiste, e aleatoriamente a pancadaria rola hehehehe olha lah o meu bruto !<br />
<a href="http://foo.bar2.mybrute.com">http://foo.bar2.mybrute.com</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/06/09/my-brute/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>resultados da competicao LD14</title>
		<link>http://www.athanazio.com/2009/05/07/resultados-da-competicao-ld14/</link>
		<comments>http://www.athanazio.com/2009/05/07/resultados-da-competicao-ld14/#comments</comments>
		<pubDate>Thu, 07 May 2009 13:04:58 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[competition]]></category>
		<category><![CDATA[diodotidae]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[ld14]]></category>
		<category><![CDATA[ludum dare]]></category>
		<category><![CDATA[result]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1898</guid>
		<description><![CDATA[Olas saiu o resultado final do LD14 ! http://www.ludumdare.com/compo/category/ld14/?tag=final+final&#038;mythumb_nav=1 nada mal meu resultado para primeira vez hehehe Critério Classificação (1-123) Nota Média (0-5) Audio 31 3.33 Humor 55 2.82 Technical 73 2.87 Overall 91 2.81 Fun 99 2.38 Innovation 85 2.81 Theme 118 1.75 Polish 68 3.0 Graphics 15 4.06]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Olas saiu o resultado final do LD14 !<br />
<a href="http://www.ludumdare.com/compo/category/ld14/?tag=final+final&#038;mythumb_nav=1">http://www.ludumdare.com/compo/category/ld14/?tag=final+final&#038;mythumb_nav=1</a></p>
<p>nada mal meu resultado para primeira vez hehehe</p>
<table>
<tr>
<td>Critério</td>
<td>Classificação (1-123)</td>
<td>Nota Média (0-5)</td>
</tr>
<tr>
<td>Audio</td>
<td>31</td>
<td>3.33</td>
</tr>
<tr>
<td>Humor</td>
<td>55</td>
<td>2.82</td>
</tr>
<tr>
<td>Technical</td>
<td>73</td>
<td>2.87</td>
</tr>
<tr>
<td>Overall</td>
<td>91</td>
<td>2.81</td>
</tr>
<tr>
<td>Fun</td>
<td>99</td>
<td>2.38</td>
</tr>
<tr>
<td>Innovation</td>
<td>85</td>
<td>2.81</td>
</tr>
<tr>
<td>Theme</td>
<td>118</td>
<td>1.75</td>
</tr>
<tr>
<td>Polish</td>
<td>68</td>
<td>3.0</td>
</tr>
<tr>
<td>Graphics</td>
<td>15</td>
<td>4.06</td>
</tr>
</table>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/05/07/resultados-da-competicao-ld14/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>game design tour</title>
		<link>http://www.athanazio.com/2009/05/05/game-design-tour/</link>
		<comments>http://www.athanazio.com/2009/05/05/game-design-tour/#comments</comments>
		<pubDate>Tue, 05 May 2009 12:04:09 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[tour]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1891</guid>
		<description><![CDATA[show de bola os comentarios deste site sobre design de games, vale conferir http://blog.wolfire.com/category/design-tour/]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>show de bola os comentarios deste site sobre design de games, vale conferir<br />
<a href="http://blog.wolfire.com/category/design-tour/">http://blog.wolfire.com/category/design-tour/</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/05/05/game-design-tour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>diodontidae &#8211; video do jogo</title>
		<link>http://www.athanazio.com/2009/04/20/diodontidae-video-do-jogo/</link>
		<comments>http://www.athanazio.com/2009/04/20/diodontidae-video-do-jogo/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 23:48:29 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[gratis]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[love]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1829</guid>
		<description><![CDATA[Diodontidae necandi from Hamilton Lima on Vimeo. ficou curioso ?? quer jogar ?? acessa ae !! http://www.athanazio.com/2009/04/20/diodontidae-jogo-novo/]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4247217&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4247217&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object><br /><a href="http://vimeo.com/4247217">Diodontidae necandi</a> from <a href="http://vimeo.com/athanazio">Hamilton Lima</a> on <a href="http://vimeo.com">Vimeo</a>.<br />
ficou curioso ?? quer jogar ??<br />
acessa ae !! <a href="http://www.athanazio.com/2009/04/20/diodontidae-jogo-novo/">http://www.athanazio.com/2009/04/20/diodontidae-jogo-novo/</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/04/20/diodontidae-video-do-jogo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>diodontidae &#8211; jogo novo</title>
		<link>http://www.athanazio.com/2009/04/20/diodontidae-jogo-novo/</link>
		<comments>http://www.athanazio.com/2009/04/20/diodontidae-jogo-novo/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 21:29:58 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[diodontidae]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[gratis]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[love]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1825</guid>
		<description><![CDATA[Neste fim de semana participei de outra competicao de jogos, mais uma maratona de 48 horas !! veja o listao da competicao ! www.ludumdare.com Eu fiz um jogo onde vc controla um diodontidae, que é um baiacú e vc come o lixo do fundo do mar e joga latinhas nos porcos que sujam o mar. [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Neste fim de semana participei de outra competicao de jogos, mais uma maratona de 48 horas !! veja o listao da competicao ! <a href="http://www.ludumdare.com/compo/category/ld14/?tag=final+final&amp;mythumb_nav=1">www.ludumdare.com</a></p>
<p>Eu fiz um jogo onde vc controla um diodontidae,<br />
que é um baiacú e vc come o lixo do fundo do mar e joga latinhas nos porcos que sujam o mar. aqui esta o link para baixar o jogo : <a href="http://www.vacavitoria.com/jogos/diodontidae-necandi/">http://www.vacavitoria.com/jogos/diodontidae-necandi/</a></p>
<p><a href="http://www.athanazio.com/wp-content/uploads/2009/04/diodontidae-necandi_tela.png"><img class="alignnone size-medium wp-image-1826" title="diodontidae-necandi_tela" src="http://www.athanazio.com/wp-content/uploads/2009/04/diodontidae-necandi_tela-386x300.png" alt="diodontidae-necandi_tela" width="386" height="300" /></a></p>
<p>se vc tiver o <a href="http://love2d.org/download">LOVE </a> instalado basta executar o arquivo .love <a href="http://www.athanazio.com/wp-content/uploads/2009/04/diodontidae_necandi_v1.love">diodontidae_necandi_v1</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/04/20/diodontidae-jogo-novo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LOVE games &#8211; belly</title>
		<link>http://www.athanazio.com/2009/04/16/love-games-belly/</link>
		<comments>http://www.athanazio.com/2009/04/16/love-games-belly/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 14:52:23 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[belly]]></category>
		<category><![CDATA[eletronica]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[love]]></category>
		<category><![CDATA[love2d]]></category>
		<category><![CDATA[musica]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1811</guid>
		<description><![CDATA[Olas ! estou estudando uma nova game engine que se chama LOVE separei um jogo em divertido que baixei do forum, que vc compoe uma musica eletronica a medida que clica nas coisas na tela, muito show !! instale o player do game engine e clique ae em baixo para jogar clique aqui para jogar [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Olas ! estou estudando uma nova game engine que se chama <a href="http://love2d.org/">LOVE</a></p>
<p>separei um jogo em divertido que baixei do forum, que vc compoe uma musica eletronica a medida que clica nas coisas na tela, muito show !!</p>
<p><img class="alignnone size-full wp-image-1816" title="belly-game" src="http://www.athanazio.com/wp-content/uploads/2009/04/belly-game.jpg" alt="belly-game" width="400" height="414" /></p>
<p><a href="http://downloads.sourceforge.net/love/love-0.5-0.exe">instale o player do game engine</a> e clique ae em baixo para jogar</p>
<p>clique aqui para jogar <a href="http://www.athanazio.com/wp-content/uploads/2009/04/belly-05-mod.love">belly-05-mod</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/04/16/love-games-belly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>faça um wiimote em casa</title>
		<link>http://www.athanazio.com/2009/03/29/faca-um-wiimote-em-casa/</link>
		<comments>http://www.athanazio.com/2009/03/29/faca-um-wiimote-em-casa/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 14:57:00 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[wiimote]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1772</guid>
		<description><![CDATA[ingredientes: impressora tinta papel tesoura cola modo de fazer: imprima o modelo corte monte cole facinho né ? fonte : pumpkin petunia]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/03/wiimotepattern.jpg"><img class="alignnone size-medium wp-image-1773" title="wiimotepattern" src="http://www.athanazio.com/wp-content/uploads/2009/03/wiimotepattern-300x300.jpg" alt="wiimotepattern" width="300" height="300" /></a><br />
ingredientes:</p>
<ul>
<li>impressora</li>
<li>tinta</li>
<li>papel</li>
<li>tesoura</li>
<li>cola</li>
</ul>
<p>modo de fazer:</p>
<ul>
<li>imprima o modelo</li>
<li>corte</li>
<li>monte</li>
<li>cole</li>
</ul>
<p>facinho né ?</p>
<p>fonte : <a href="http://pumpkinpetunia.blogspot.com/2009/01/wiiiiiiiiiiii-party-recap.html">pumpkin petunia</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/03/29/faca-um-wiimote-em-casa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javafx os cabecudinhos preview 2009-03-18</title>
		<link>http://www.athanazio.com/2009/03/19/javafx-os-cabecudinhos-preview-2009-03-18/</link>
		<comments>http://www.athanazio.com/2009/03/19/javafx-os-cabecudinhos-preview-2009-03-18/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 05:07:30 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[cabecudnhos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[preview]]></category>
		<category><![CDATA[vacavitoria]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1763</guid>
		<description><![CDATA[Temos grandes novidades neste preview: Uma interface para entrar com nome dos usuarios que estão jogando a tela de como jogar o envio da pontuação para o servidor Ufa &#8230; os novos graficos ainda nao estao lah, mas estao no forno !! este eh o link para os arquivos do preview http://svn.vacavitoria.com/cabecudinhos_1/cabecudinhos_1/preview/2009-03-18/ e este eh [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/03/mosquito-killers.jpg"><img class="alignnone size-medium wp-image-1764" title="mosquito-killers" src="http://www.athanazio.com/wp-content/uploads/2009/03/mosquito-killers-398x300.jpg" alt="mosquito-killers" width="398" height="300" /></a></p>
<p>Temos grandes novidades neste preview:</p>
<ul>
<li>Uma interface para entrar com nome dos usuarios que estão jogando</li>
<li>a tela de como jogar</li>
<li>o envio da pontuação para o servidor</li>
</ul>
<p>Ufa &#8230; os novos graficos ainda nao estao lah, mas estao no forno !!</p>
<p>este eh o link para os arquivos do preview<br />
<a href="http://svn.vacavitoria.com/cabecudinhos_1/cabecudinhos_1/preview/2009-03-18/">http://svn.vacavitoria.com/cabecudinhos_1/cabecudinhos_1/preview/2009-03-18/</a></p>
<p>e este eh o video<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/x8EGhrC43IM&#038;hl=pt&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/x8EGhrC43IM&#038;hl=pt&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/03/19/javafx-os-cabecudinhos-preview-2009-03-18/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javafx cabecudinhos preview 2009-03-15</title>
		<link>http://www.athanazio.com/2009/03/16/javafx-cabecudinhos-preview-2009-03-15/</link>
		<comments>http://www.athanazio.com/2009/03/16/javafx-cabecudinhos-preview-2009-03-15/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 01:10:45 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[cabeçudinhos]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[preview]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1759</guid>
		<description><![CDATA[Olas ! estamos quase terminando o jogo dos cabecudinhos, episodio I o ataque dos mosquitos ! as partes graficas estao saindo do forno, valeu Mariana !! as coisas estao se encaixando, e em breve vai rolar o envio de pontuacao para o servidor. Coisas novas bem legais estao neste preview : feedback do tempo para [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/03/cabecudinhos-preview-2009-03-15.png"><img src="http://www.athanazio.com/wp-content/uploads/2009/03/cabecudinhos-preview-2009-03-15-417x300.png" alt="cabecudinhos-preview-2009-03-15" title="cabecudinhos-preview-2009-03-15" width="417" height="300" class="alignnone size-medium wp-image-1760" /></a><br />
Olas ! estamos quase terminando o jogo dos cabecudinhos, episodio I o ataque dos mosquitos ! as partes graficas estao saindo do forno, valeu Mariana !! as coisas estao se encaixando, e em breve vai rolar o envio de pontuacao para o servidor.</p>
<p>Coisas novas bem legais estao neste preview : </p>
<ul>
<li>feedback do tempo para a criacao do novo mosquito e tempo que o item vai ficar sem gerar mosquito</li>
<li>efeito quando os personagens sao atingidos pelo mosquito</li>
<li>contagem dos pontos</li>
</ul>
<p>baixe o arquivo de webstart da implementacao atual<br />
<a href="http://svn.vacavitoria.com/cabecudinhos_1/cabecudinhos_1/preview/2009-03-15/cabecudinhos_episodio_um.jnlp">cabecudinhos_episodio_um.jnlp</a></p>
<p>curta o video do preview<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/z5MhjGhQl0o&#038;hl=pt-br&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/z5MhjGhQl0o&#038;hl=pt-br&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><a href="http://svn.vacavitoria.com/cabecudinhos_1/cabecudinhos_1/">e aproveite a moleza do codigo fonte disponivel no subversion</a> <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/03/16/javafx-cabecudinhos-preview-2009-03-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javafx beta 2009-03-08 dos cabecudinhos</title>
		<link>http://www.athanazio.com/2009/03/08/javafx-beta-2009-03-08-dos-cabecudinhos/</link>
		<comments>http://www.athanazio.com/2009/03/08/javafx-beta-2009-03-08-dos-cabecudinhos/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 13:08:15 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[cabeçudinhos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[preview]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1681</guid>
		<description><![CDATA[Opa esta eh uma versao parcial do jogo dos cabecudinhos !! para os catucadores de plantão, aqui ficam os arquivos desta versão http://www.vacavitoria.com/preview/cabecudinhos_1/2009-03-08/]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Opa esta eh uma versao parcial do jogo dos cabecudinhos !!</p>
<p><a href="http://www.vacavitoria.com/preview/cabecudinhos_1/2009-03-08/cabecudinhos_1.jnlp"><img title="executar" src="http://www.athanazio.com/wp-content/uploads/2009/03/webstart_launch.gif" alt="executar" width="88" height="34" /></a></p>
<p>para os catucadores de plantão, aqui ficam os arquivos desta versão<br />
<a href="http://www.vacavitoria.com/preview/cabecudinhos_1/2009-03-08/">http://www.vacavitoria.com/preview/cabecudinhos_1/2009-03-08/</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/03/08/javafx-beta-2009-03-08-dos-cabecudinhos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javafx personagem que salta nas plataformas</title>
		<link>http://www.athanazio.com/2009/03/08/javafx-personagem-que-salta-nas-plataformas/</link>
		<comments>http://www.athanazio.com/2009/03/08/javafx-personagem-que-salta-nas-plataformas/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 04:42:15 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[cabeçudinhos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[jump]]></category>
		<category><![CDATA[salto]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1675</guid>
		<description><![CDATA[Uia ! implementei meus rabiscos de gravidade e não eh q funcionou !! hehehe como tinha dito em javafx-planejando-gravidade são 3 classes envolvidas: GravityManager &#8211; fazo update() a cada tick do jogo Force &#8211; aplica mudança de posição aos nodes GNode &#8211; associa Node a Force. Para os catucadores de plantão segue o endereço do [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Uia ! implementei meus rabiscos de gravidade e não eh q funcionou !! hehehe</p>
<p>como tinha dito em <a href="http://www.athanazio.com/2009/03/06/javafx-planejando-gravidade/">javafx-planejando-gravidade</a> são 3 classes envolvidas:</p>
<ul>
<li>GravityManager &#8211; fazo update() a cada tick do jogo</li>
<li>Force &#8211; aplica mudança de posição aos nodes</li>
<li>GNode &#8211; associa Node a Force.</li>
</ul>
<p>Para os catucadores de plantão segue o endereço do subversion<br />
<a href="http://svn.vacavitoria.com/cabecudinhos_1/cabecudinhos_1/">http://svn.vacavitoria.com/cabecudinhos_1/cabecudinhos_1/</a></p>
<p>E alguns fragmentos do codigo<br />
esta eh a Scene em que usei a GravityManager</p>
<pre class="brush: java; title: ; notranslate">
public class GameScene extends Scene, Updatable{
    ...
    public var gravityManager: GravityManager;

    // set the need info for the Scene work
    public function setup(){
        gameSoundtrack.play();

        background =
        lookup(BACKGROUND_ID) as NodeFromFXZ;
        player1 =
        lookup(PLAYER1_ID) as MovableChar;
        player1.background = background;
        player1.requestFocus();

        gravityManager = GravityManager{
            gravity: 5
            content: [
                GNode{
                    node: bind player1
                }
            ]
        }

    }

    public override function update(){
        gravityManager.update();
    }

    override var content = [
        NodeFromFXZ{
            id: bind BACKGROUND_ID
            source: &quot;{__DIR__}media/background.fxz&quot;
        }

        MovableChar{
            id : bind PLAYER1_ID
            source: &quot;{__DIR__}media/boy.fxz&quot;
            x: 50
            y: 450
            speed: 3
            colision: [&quot;casa1&quot;, &quot;casa2&quot;, &quot;casa3&quot;,&quot;casa4&quot;, &quot;casa5&quot;, &quot;casa6&quot;, &quot;casa7&quot;, &quot;casa8&quot;,
             &quot;caixa1&quot;, &quot;caixa2&quot;, &quot;caixa3&quot;,&quot;caixa4&quot;, &quot;caixa5&quot;, &quot;caixa6&quot;,
            &quot;caixa7&quot;, &quot;caixa7b&quot;, &quot;caixa8&quot;, &quot;caixa8b&quot;,
            &quot;left&quot;, &quot;right&quot;, &quot;bottom&quot;,&quot;top&quot;, &quot;plataforma1&quot;]

            onMouseClicked: function(e){
            }

            onKeyReleasedDelegate: function(current:MovableChar, key: KeyCode){
               if( key == KeyCode.VK_SPACE and current.hasColision){
                   fire.play();
                   gravityManager.addForce( current.id, Force {
                        y: -22;
                   });
                }
            }

            onUpdate: function(current:MovableChar){
                current.checkIfScrollBackground();

            }
        }
    ]
}
</pre>
<p>Segue o codigo das classes para o controle da gravidade</p>
<p><strong>GravityManager</strong></p>
<pre class="brush: java; title: ; notranslate">
public class GravityManager extends Updatable{

    public var gravity: Integer;
    public var content: GNode[];

    public function addForce(id:String, force: Force){
        for( gNode in content){
            if( gNode.node.id.equals(id) )  {
                insert force into gNode.forces;
            }
        }
    }

    public override function update(){

        // iterate over all gnodes
        for( gNode in content){
            var x: Integer = 0;
            var y: Integer = gravity;

            // iterate over all Force from the GNode
            for( force in gNode.forces){
                x = x + force.x as Integer;
                y = y + force.y as Integer;

                force.applyGravity(gravity);
                if( force.isDisposable()){
                    delete force from gNode.forces;
                }
            }

            // try to move the Node with the increase of x and y
            gNode.node.moveX(x);
            gNode.node.moveY(y);
        }
    }
}
</pre>
<p><strong>Force.fx</strong></p>
<pre class="brush: java; title: ; notranslate">
public class Force {

    public var x: Number;
    public var y: Number;
    public var percentGravity: Number = 0.15;

    // reduce the x and y value with the gravity
    public function applyGravity(gravity:Integer){
        if( x &lt; 0 ){
            x = x + (gravity * percentGravity);

            if( x &gt; 0 ){
                x = 0;
            }
        }

        if( y &lt; 0 ){
            y = y + (gravity * percentGravity);
            if( y &gt; 0 ){
                y = 0;
            }
        }
    }

    public function isDisposable():Boolean{
        return x == 0 and y == 0;
    }

}
</pre>
<p><strong>GNode</strong></p>
<pre class="brush: java; title: ; notranslate">
public class GNode {

    public var node: MovableChar;
    public var forces: Force[];

}
</pre>
<p>E finalmente o video com o resultado saltitante <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/cdu0S03vauA&#038;hl=pt-br&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/cdu0S03vauA&#038;hl=pt-br&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/03/08/javafx-personagem-que-salta-nas-plataformas/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>javafx quadrado na tela v2</title>
		<link>http://www.athanazio.com/2009/02/15/javafx-quadrado-na-tela-v2/</link>
		<comments>http://www.athanazio.com/2009/02/15/javafx-quadrado-na-tela-v2/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 00:36:15 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[keypressed]]></category>
		<category><![CDATA[keystate]]></category>
		<category><![CDATA[loop]]></category>
		<category><![CDATA[movement]]></category>
		<category><![CDATA[tick]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1623</guid>
		<description><![CDATA[Esta e a segunda versão do quadrado na tela, agora com o efeito de manter a tecla pressionada e o movimento acontecer ! para isto acabei definindo uma classe Game que fica com loop principal e todos os Nodes da Scene atual são verificados para execução de um método update(), não sei ainda se dava [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Esta e a segunda versão do quadrado na tela, agora com o efeito de manter a tecla pressionada e o movimento acontecer ! para isto acabei definindo uma classe Game que fica com loop principal e todos os Nodes da Scene atual são verificados para execução de um método update(), não sei ainda se dava para fazer com alguma estrutura do próprio JavaFx, mas assim funcionou.</p>
<p>Olha como ficou o movimento<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/vFdlZA1G7PQ&#038;hl=pt-br&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/vFdlZA1G7PQ&#038;hl=pt-br&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>esta é a classe Game, que cria um Timer que executa continuamente, e chama o método update() para todos os Nodes que sao filhos da classe Updatable, no método update() o nosso quadrado muda a sua posicao de acordo com as teclas que estão pressionadas </p>
<pre class="brush: java; title: ; notranslate">
package javafxmeuquadradinho2;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 * @author athanazio
 */
public class Game extends Stage {

    public var tick: Timeline = Timeline {
        repeatCount: Timeline.INDEFINITE
        keyFrames: [
            KeyFrame {
                time: 0.05s
                action: function() {
                    mainLoop();
                }
        }]
    };

    // main game loop
    public function mainLoop(){
        for (node in scene.content) {
            if( node instanceof Updatable){
                (node as Updatable).update();
            }
        }
    }

    public function play(){
        tick.play();
    }

}
</pre>
<p>A classe KeyState é usada para manter as informações de que teclas estão pressionadas ou não, Esta solução não permite uma fácil expansão para suportar outras teclas, outra forma seria armazenar uma lista das teclas atualmente pressionadas, e possuir um método para verificar se a tecla X esta pressionada.</p>
<pre class="brush: java; title: ; notranslate">
package javafxmeuquadradinho2;

/**
 * @author athanazio
 */
public class KeyState {
    public var keyUp = false;
    public var keyLeft = false;
    public var keyRight = false;
    public var keyDown = false;
}
</pre>
<p>A classe Updatable define o metodo update() a ser executado no loop principal do jogo.</p>
<pre class="brush: java; title: ; notranslate">
package javafxmeuquadradinho2;

/**
 * @author athanazio
 */
public class Updatable{
    public function update(){

    }
}
</pre>
<p>A classe MovableChar cria neste exemplo um Retangulo associado com as propriedades da classe, e gera os event handlers baseados neste retangulo, melhor seria usar um ImageView para exibir uma imagem, mas isto jah é outra estória &#8230; além disto mantém controle da tecla pressionada, através de uma instância de KeyState, e quando a tecla é liberada desmarca, fazendo com q no próximo update() o movimento naquela direção não ocorra.</p>
<pre class="brush: java; title: ; notranslate">

/*
 * MovableChar.fx
 *
 * Created on Feb 15, 2009, 3:47:31 PM
 */

package javafxmeuquadradinho2;

import javafx.scene.CustomNode;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;

/**
 * @author athanazio
 */
public class MovableChar extends CustomNode, Updatable{
    public var speed = 10;
    public var x = 0;
    public var y = 0;
    public var width = 60;
    public var height = 60;
    public var fill: Color;

    var keyState: KeyState = KeyState{
        keyUp: false;
        keyLeft: false;
        keyRight: false;
        keyDown: false;
     };

    public override function create():Node {
        return Rectangle {
            x: bind this.x;
            y: bind this.y;
            width: bind this.width;
            height: bind this.height;
            fill: bind this.fill;

            onKeyPressed: function (e: KeyEvent){
                if( e.code == KeyCode.VK_LEFT ){
                    keyState.keyLeft = true;
                }
                if( e.code == KeyCode.VK_RIGHT ){
                    keyState.keyRight = true;
                }
                if( e.code == KeyCode.VK_UP ){
                    keyState.keyUp = true;
                }
                if( e.code == KeyCode.VK_DOWN ){
                    keyState.keyDown = true;
                }
            }
            onKeyReleased: function(e: KeyEvent){
                if( e.code == KeyCode.VK_LEFT ){
                    keyState.keyLeft = false;
                }
                if( e.code == KeyCode.VK_RIGHT ){
                    keyState.keyRight = false;
                }
                if( e.code == KeyCode.VK_UP ){
                    keyState.keyUp = false;
                }
                if( e.code == KeyCode.VK_DOWN ){
                    keyState.keyDown = false;
                }
            }
        };
    }

    public override function update(){

        if( keyState.keyLeft){
            x = x - speed;
        }

        if( keyState.keyRight){
            x = x + speed;
        }

        if( keyState.keyDown){
            y = y + speed;
        }

        if( keyState.keyUp){
            y = y - speed;
        }
    }

}
</pre>
<p>E finalmente a classe Main que instancia MovableChar e Game e chama o método start de Game.</p>
<pre class="brush: java; title: ; notranslate">
package javafxmeuquadradinho2;

import java.lang.Object;
import javafx.scene.paint.Color;
import javafx.scene.Scene;

/**
 * @author athanazio
 */
var littleBox: MovableChar = MovableChar{
    x: 20,
    y: 20
    width: 60,
    height: 60
    fill: Color.RED
}

var game: Game = Game {
        title: &quot;Movendo um quadrado pela tela&quot;
        width: 640
        height: 480
        scene: Scene {
            content: [
                littleBox
            ]
        }
    }

function run(__ARGS__ : String[]) {
    game.play();
}
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/02/15/javafx-quadrado-na-tela-v2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>camera do globalgamejam no Rio</title>
		<link>http://www.athanazio.com/2009/01/30/camera-do-globalgamejam-no-rio/</link>
		<comments>http://www.athanazio.com/2009/01/30/camera-do-globalgamejam-no-rio/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 12:07:14 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[globalgamejam]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1616</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><object id="utv_o_845676" height="320" width="400"  classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param value="http://www.ustream.tv/flash/live/1/444203" name="movie" /><param value="true" name="allowFullScreen" /><param value="always" name="allowScriptAccess" /><param value="transparent" name="wmode" /><param value="viewcount=true&amp;autoplay=false&amp;brand=embed&amp;" name="flashvars" /><embed name="utv_e_439367" id="utv_e_273393" flashvars="viewcount=true&amp;autoplay=false&amp;brand=embed&amp;" height="320" width="400" allowfullscreen="true" allowscriptaccess="always" wmode="transparent" src="http://www.ustream.tv/flash/live/1/444203" type="application/x-shockwave-flash" /></object></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/30/camera-do-globalgamejam-no-rio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>começou o gamejam</title>
		<link>http://www.athanazio.com/2009/01/30/comecou-o-gamejam/</link>
		<comments>http://www.athanazio.com/2009/01/30/comecou-o-gamejam/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 12:05:06 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[globalgamejam]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1612</guid>
		<description><![CDATA[ehh galera começou o globalgamejam !! http://globalgamejam.org/ começou na nova zelândia hehehhe, aqui no Rio/Niterói soh as 17:00h]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>ehh galera começou o globalgamejam !!<br />
<a href="http://globalgamejam.org/">http://globalgamejam.org/</a><br />
começou na nova zelândia hehehhe,<br />
aqui no Rio/Niterói soh as 17:00h</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/30/comecou-o-gamejam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# xna criação de cenas e scroll de mapa</title>
		<link>http://www.athanazio.com/2009/01/11/c-xna-criacao-de-cenas-e-scroll-de-mapa/</link>
		<comments>http://www.athanazio.com/2009/01/11/c-xna-criacao-de-cenas-e-scroll-de-mapa/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 20:00:51 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[call you dont call me]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[event handler]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[handler]]></category>
		<category><![CDATA[Scene]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1560</guid>
		<description><![CDATA[Uai ! em ateh map scroll hehehe, bem parte das minhas reflexões sobre a forma de implementar o jogo estão se materalizando, criei o conceito de cena, contendo o gerenciador de eventos e deslocamento da tela para permitir o scroll da tela de fundo. o primeiro detalhe eh a classe Scene em si que em [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Uai ! em ateh map scroll hehehe, bem parte das minhas reflexões <a href="http://www.athanazio.com/2009/01/07/ideias-em-game-coding-design/">sobre a forma de implementar o jogo</a> estão se materalizando, criei o conceito de cena, contendo o gerenciador de eventos e deslocamento da tela para permitir o scroll da tela de fundo.</p>
<p>o primeiro detalhe eh a classe Scene em si</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Text;</p>
<p>using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.Graphics;</p>
<p>namespace ChickenMaze<br />
{<br />
    public abstract class Scene<br />
    {<br />
        public Game game;<br />
        public EventManager eventManager;<br />
        public int X;<br />
        public int Y;</p>
<p>        public Scene(Game game, EventManager eventManager)<br />
        {<br />
            this.game= game;<br />
            this.eventManager= eventManager;<br />
            this.X = 0;<br />
            this.Y = 0;<br />
        }</p>
<p>        public abstract void Initialize();<br />
        public abstract void LoadContent();<br />
        public abstract void Draw(GameTime gameTime, SpriteBatch spriteBatch);</p>
<p>    }<br />
}</p>
<p>que em alguns aspectos tentei manter o design semelhante a classe Game, com excessão do método Draw que adicionei o objeto spriteBatch sendo passado como parâmetro para evitar esta complexidade na cena atual, assim na classe Game principal do jogo um objeto scene é criado, e ao executar initialize, loadcontent e draw os respectivos metodos da Scene corrente serão chamados.</p>
<p>Esta abaixo eh a SceneMainMaze que determina os detalhes especificos do jogo, como sprite que vai ser usado como personagem, mapa e tratadores de eventos, note que a implementação dos eventos fica separada deste código.</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Text;</p>
<p>using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.Graphics;</p>
<p>namespace ChickenMaze<br />
{<br />
    class SceneMainMaze : Scene<br />
    {<br />
        Sprite chicken;<br />
        Map map;</p>
<p>        public SceneMainMaze(Game game, EventManager eventManager)<br />
            : base(game, eventManager)<br />
        {</p>
<p>        }</p>
<p>        public override void Initialize(){</p>
<p>            map = new Map(this);<br />
            chicken = new Sprite(&#8220;chicken&#8221;, this);<br />
            chicken.Position = map.GetFirstFreeSpot();<br />
            chicken.SetMap(map);</p>
<p>            eventManager.addHandler(new EventCantMoveHere(this));<br />
            eventManager.addHandler(new EventKeyboardLeft(this, chicken, map));<br />
            eventManager.addHandler(new EventKeyboardRight(this, chicken, map));<br />
            eventManager.addHandler(new EventKeyboardUp(this, chicken, map));<br />
            eventManager.addHandler(new EventKeyboardDown(this, chicken, map));<br />
            eventManager.addHandler(new EventNeedScrollMap(this, chicken, map ));<br />
        }</p>
<p>        public override void LoadContent()<br />
        {<br />
            chicken.LoadContent(game.Content);<br />
            map.LoadContent(game.Content);<br />
        }</p>
<p>        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)<br />
        {<br />
            Color color = new Color(0, 136, 0);<br />
            game.GraphicsDevice.Clear(color);</p>
<p>            map.Draw(spriteBatch);<br />
            chicken.Draw(spriteBatch);<br />
        }<br />
    }<br />
}</p>
<p>Então o trecho abaixo mostra como os eventos são registrados para que ao serem disparados, o tipo de evento é testado e em seguida o métido run() dos eventos é executado</p>
<p>            eventManager.addHandler(new EventKeyboardDown(this, chicken, map));<br />
            eventManager.addHandler(new EventNeedScrollMap(this, chicken, map ));</p>
<p>O código abaixo é o tratador de eventos para quando o scroll de mapa eh necessário</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using Microsoft.Xna.Framework.Graphics;<br />
using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Audio;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.GamerServices;<br />
using Microsoft.Xna.Framework.Input;<br />
using Microsoft.Xna.Framework.Media;<br />
using Microsoft.Xna.Framework.Net;<br />
using Microsoft.Xna.Framework.Storage;</p>
<p>namespace ChickenMaze<br />
{<br />
    class EventNeedScrollMap: EventHandler<br />
    {<br />
        protected Sprite sprite;<br />
        protected Map map;</p>
<p>        protected int HorizontalBorderLimit;<br />
        protected int VerticalBorderLimit; </p>
<p>        const byte BORDER_DIVISION_INDEX = 4;</p>
<p>        public EventNeedScrollMap(Scene scene, Sprite sprite, Map map)<br />
            : base(EventHandler.EventType.SPRITE_MOVED, scene)<br />
        {<br />
            this.sprite = sprite;<br />
            this.map = map;</p>
<p>            HorizontalBorderLimit = scene.game.GraphicsDevice.Viewport.Width / BORDER_DIVISION_INDEX;<br />
            VerticalBorderLimit = scene.game.GraphicsDevice.Viewport.Height / BORDER_DIVISION_INDEX;<br />
        }</p>
<p>        ///<br />
<summary>
        /// if the sprite is close to the border of the viewport,<br />
        /// for each direction of the movement change the viewport<br />
        /// of the GraphicsDevice<br />
        /// </summary>
<p>        ///
<param name="source"></param>
        public override void run(Object source) {</p>
<p>            int SceneShift = sprite.speed;<br />
            int x = (int)sprite.Position.X &#8211; scene.X;<br />
            int y = (int)sprite.Position.Y &#8211; scene.Y;</p>
<p>            // into left limit<br />
            if (x < scene.game.GraphicsDevice.Viewport.X + HorizontalBorderLimit)<br />
            {<br />
                if (scene.X - SceneShift > 0)<br />
                {<br />
                    scene.X -= SceneShift;<br />
                }<br />
            }</p>
<p>            // into right limit<br />
            if (x > scene.game.GraphicsDevice.Viewport.X<br />
                    + scene.game.GraphicsDevice.Viewport.Width &#8211; HorizontalBorderLimit)<br />
            {<br />
                scene.X += SceneShift;<br />
            }</p>
<p>            // into top limit<br />
            if (y < scene.game.GraphicsDevice.Viewport.Y + VerticalBorderLimit)<br />
            {<br />
                if (scene.Y - SceneShift > 0)<br />
                {<br />
                    scene.Y -= SceneShift;<br />
                }<br />
            }</p>
<p>            // into bottom limit<br />
            if (y > scene.game.GraphicsDevice.Viewport.Y<br />
                    + scene.game.GraphicsDevice.Viewport.Height &#8211; VerticalBorderLimit)<br />
            {<br />
                scene.Y += SceneShift;<br />
            }</p>
<p>        }</p>
<p>    }<br />
}</p>
<p>Desta maneira tratadores de evento podem ser facilmente reaproveitados entre jogos, e inclusive escrever código para realizar testes destes tratadores.</p>
<p>os próximos passos são :</p>
<ul>
<li>carregar o mapa de uma arquivo</li>
<li>determinar que a galinha chegou no fim do mapa e criar evento para isto</li>
<li>adicionar sons
</li>
<li>adicionar timer na tela
</li>
<li>adicionar os marcadores de labirinto com ovos (1 ovo a cada 10 segundos com duração de 60 segundos cada)
</li>
<li>adciionar cena de tela inicial
</li>
<li>adicionar cena de pontuação
</li>
<ul>
</ul>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/c-xna-criacao-de-cenas-e-scroll-de-mapa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>xna uma lista de tutoriais</title>
		<link>http://www.athanazio.com/2009/01/11/xna-uma-lista-de-tutoriais/</link>
		<comments>http://www.athanazio.com/2009/01/11/xna-uma-lista-de-tutoriais/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 17:11:20 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[agressors]]></category>
		<category><![CDATA[alien]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1556</guid>
		<description><![CDATA[http://www.nickontech.com/archive/#alienaggressors e tem um pdf em especial que eh um passo a passo de um jogo completo em xna http://www.nickontech.com/archive/AlienAggressors/AlienAggressors.pdf]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.nickontech.com/archive/#alienaggressors">http://www.nickontech.com/archive/#alienaggressors</a></p>
<p>e tem um pdf em especial que eh um passo a passo de um jogo completo em xna<br />
<a href="http://www.nickontech.com/archive/AlienAggressors/AlienAggressors.pdf">http://www.nickontech.com/archive/AlienAggressors/AlienAggressors.pdf</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/xna-uma-lista-de-tutoriais/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

