Em minha exploração atual enfrentei algumas duvidas que foram interessantes: ao movimentar o personagem pela tela os movimentos para baixo e para a a direita nao permitiam que o personagem ficasse colado no obstáculo, mantendo sempre uma certa distância, e o segundo que ocorreu logo apos quando tentei exibir no personagem a posicao na tela, que foi como carregar e exibir texto.

vamos por partes, esta tela abaixo mostra o resultado do esforço de debugar o movimento do personagem na tela, exibindo a posição atual na janela

e depois na interface escolha Spritefont

primeiro quanto a discussão do movimento para baixo e para a direita, o trecho de código abaixo mostra como fiz a implementação dos tratadores de eventos isolada da implementação do Sprite e do bloco principal

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace ChickenMaze
{
class EventKeyboardDown: EventHandler
{
protected Sprite sprite;
protected Map map;

public EventKeyboardDown(EventManager manager, Sprite sprite, Map map)
: base(EventHandler.EventType.KEYBOARD_DOWN, manager)
{
this.sprite = sprite;
this.map = map;
}

public override void run(Object source) {

int x = (int)sprite.Position.X;
int y = (int)sprite.Position.Y + sprite.speed;

if (map.IsAvailable(x + sprite.GetWidth()-1, y + sprite.GetHeight()-1)
&& map.IsAvailable(x, y + sprite.GetHeight()-1))
{
sprite.Position.Y = y;
}
else
{
manager.trigger(this, EventHandler.EventType.CANT_MOVE_THERE);
}

}

}
}

A chave da solução do problema esta no fato de comparar os pontos -1 hehehe bobagem pura da minha parte, porque se estou por exemplo no ponto 60 e somo 60 com certeza nao vou poder colocar este ponto numa posicao 120 porque 60+60 = 120 e estando 120 ocupado a resposta vai ser sempre, ok, ali nao pode, mas se faço a comparação com -1 ai sim vou testar o ultimo pixel do bloco que estou movimentando.

Outra questão é desenhar o texto, que não teve mistério, o mistério foi descobrir como carregar a fonte :) o trecho abaixo exibe o texto

public static void DrawText(string text, Vector2 position)
{
spriteBatch.DrawString(spriteFont, text, position, Color.White);
}

e para carregar uma fonte basta criar uma nova sprite font que eh uma referencia dentro do projeto para uma fonte que vai ser carregada na hora de gerar o projeto para deploy, clique com o botão direito em content conforme a figura abaixo

e no codigo fonte faça referência ao Spritefont criado

spriteFont = Content.Load(“SpriteFont1″);

agora vou empacotar o pxóximo post trocando a caixinha amarela pela galinha e preparar as explicações de como foi organizado o código :)