quinta-feira, 24 de janeiro de 2013

Peça um artigo

Caso queira um artigo, basta que o peça aqui nesse post.

Até mais!

Estruturando um jogo: Propriedades de Objetos


Ryan Lindeman criou um simples e eficiente sistema que gerencia propriedades de objetos de forma fácil.
Para começar, salve o código daqui como header (.h).
Salve o código daqui como source (.cpp).
Salve o código daqui como header.
Salve o código daqui como source.
Salve o código daqui como header.
E um exemplo básico:
#include "PropertyManager.hpp"

int main(int argc, char* argv[])
{
  PropertyManager properties;

  // Adicionar uma propriedade
  properties.Add<sf::Clock>("AnimationClock", sf::Clock());

  // Adicionar uma propriedade
  properties.Add<sf::Sprite>("Sprite", sf::Sprite());

  // Adicionar uma propriedade
  properties.Add<bool>("Visible", true);

  // Testar uma propriedade
  if(properties.Get<bool>("Visible") == true)
  {
    // Desenhar uma sprite
    renderWindow.draw(properties.Get<sf::Sprite>("Sprite"));

    // Obter uma propriedade
    sf::Clock anClock = properties.Get<sf::Clock>("AnimationClock");

    // Reiniciar o relógio de animação
    anClock.reset();

    // Atribuindo valores
    properties.Set<sf::Clock>("AnimationClock", anClock);
  }

  // Se uma propriedade existe
  if(properties.HasID("NotExist"))
  {
    printf("It exists!\n");
  }
  else
  {
    printf("It doesn't exist\n");
  }

  return 0;
}
O que podemos notar é que há bastante código por trás de tudo isso, mas, no final das contas, usaremos bem menos códigos para usar o sistema.


Estruturando um jogo: Namespaces

1- Namespaces

Namespaces são muito importantes na organização de um projeto. Através deles, podemos categorizar os códigos. Por exemplo, códigos de sons ficam separados dos de imagens. Também podemos separar conforme o nome do programador, facilitando a identificação dos autores de cada trecho.

No header, fazemos algo do tipo:

namespace Pedro
{
  class MinhaClasse {
    public:
      MinhaClasse();
      virtual ~MinhaClasse();
  };
}
No source, fazemos algo do tipo:
namespace Pedro
{
  MinhaClasse::MinhaClasse()
  {
  }
 
  MinhaClasse::~MinhaClasse()
  {
  }
}
Além disso, podemos usar classes com nomes iguais em namespaces diferentes:
class MyClass {
  public:
    MyClass();
    virtual ~MyClass();
 
    sf::Clock mClock1;
    MyStuff::Clock mClock2;
};
Para que você não precise ficar digitando o nome de seu namespace a todo momento, você pode definir quais classes de quais namespaces você usará, de forma que precisa apenas digitar o nome da classe.
using Pedro::MyClass;
using sf::Clock;