Para se certificar que só haverá uma execução de seu programa, fiz um pequeno código que encerra a execução antiga desse mesmo exe, mantendo somente a recém executada.

Coloque isso antes do Application.Run();

Caso queira que mantena apenas a antiga, interrompendo a recém executada, é só trocar o proc.Kill(); por Application.Exit();

ps: Não se esqueça, o código utiliza o nome do executável, então caso use algum executável com um nome bem comum, pode ser que não funcione.

Espero ter ajudado… =)

Trafegar ou armazenar strings é uma tarefa muito comum nos aplicativos e jogos, se você é programador, é muito provável que já tenha feito algum arquivo de texto com configurações ou enviado informações em string através da rede. Mas você já pensou que pode economizar tempo e espaço se utilizar compactação?

Em C# (.Net) a compactação e descompactação de strings é um processo simples, desde que saiba o caminho, e por isso resolvi colocar um exemplo de como utilizar o GZip para a tarefa.

Espero que tenha ajudado, e comente caso tenha alguma dúvida, crítica ou sugestão. …ou apenas para agradecer! =)

Hoje fiz um primeiro teste de movimentação com física e colisão para o meu mais novo projeto de jogo (logo mais passo detalhes sobre ele). Testei entre vários os tipos, aquele que a câmera segue de trás (Resident Evil 4 e 5, Uncharted, Tomb Raider…), com mouse para atacar e o teclado para andar (DeadNation, Alien Breed…), com o mouse para andar e atacar (Diablo, World of Warcraft…) e por fim teclado para andar e atacar (Resident Evil 1, 2 e 3).

A que eu mais me identifiquei foi a última, a qual você usa duas teclas para rotacionar o personagem e outras duas para andar para frente e para trás, assim como no clássico Resident Evil.


Após fazer alguns testes, segue o script da movimentação em LUA para Shiva 3D:

if ( nMX ~= 0 or nMY ~= 0 )
then       
   object.rotate ( hModelObj, 0, nMX, 0, object.kGlobalSpace )

   local dX, dY, dZ = object.getDirection ( hModelObj, object.kGlobalSpace )
   dynamics.addForce ( hDynObj, nMY * 300 * dX, 0, nMY * 300 * dZ, object.kGlobalSpace )

   dynamics.setLinearDamping ( hDynObj, 5 )
end
object.matchTranslation ( hModelObj, hDynObj, object.kGlobalSpace )

Observações:
– nMX e nMX variam entre -1, 0 e 1 conforme as teclas WASD estão apertadas;
– hModelObj é o modelo do personagem e kDynObj é o objeto de colisão.

Confesso que tenho uma inclinação a escolher a movimentação dos jogos que eu mais gostei, porém sei que não são as melhores e por isso quero a opinião de vocês.

Logo após a Microsoft lançar o SDK oficial para utilizar o Kinect no PC eu já comprei um. É muito interessante a ideia de desenvolver para um dispositivo que captura movimentos por tão pouco custo. Imagine as possibilidades? não só no desenvolvimento de jogos que usem o Kinect mas também como ferramenta para desenvolver outros jogos. Sim, pensei que ele pode ser usado como motion capture para animações de modelos 3D, mesmo que o Kinect não seja usado no próprio jogo. As possibilidades são muitas.

E para testar a SDK, que pode ser encontrada aqui: http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ utilizei o Shiva 3D (engine a qual já tenho algum conhecimento). Tive que programar um plugin em C++, mas nada tão completo, a SDK é bem explicadinha e intuitiva.

Vejam uma demo:

Ainda estou finalizando algumas coisas no plugin, e gostaria de saber se vocês ficaram interessados nisso, se sim, posso abrir o fonte assim que terminar.

Fonte: https://github.com/luizpestana/shivakinect

Até logo!

Olá amigos desenvolvedores e curiosos, estou aqui escrevendo mais um tutorial para facilitar as vossas vidas e também aprender. Dessa vez estarei escrevendo sobre o Shiva 3D, uma engine de jogos que descobri na Campus Party e me interessou devido a sua portabilidade e facilidade de desenvolvimento.

Seria um produto similar ao Unity 3D e Unreal Engine, os quais eu já tinha um pouco de experiência, porém mais acessível, pois além de existir uma versão não comercial gratuita, sua licença custa desde R$400 em sua versão básica, até R$4000 com recursos mais avançados.

Se te interessou, leia o tutorial por completo na comunidade GameDev-BR clicando aqui.

E não esqueça de comentar. =)

Hoje me perguntaram sobre vetores em C++, eles são cruciais em um jogo qualquer, para podermos dar quantidade a nossos objetos, sendo eles, inimigos, jogadores, armas, tiros, bolas, caixas… e etc…

É muito facil utiliza-los, porém a pergunta é um pouco mais avançada que sua simples utilização. Será possível utilizar um só vetor para objetos de classes diferentes?

A resposta é, sim, podemos utilizar de forma simplista, herança simples e um vetor para a classe mãe. Assim com um cast básico, podemos retornar objetos diferentes em um só vetor.

#include <iostream>
#include <vector>

// Classe Mãe
class Inimigo {
public:
   int life;
};

// Classe Filha
class Monstro : public Inimigo {
public:
   int tentacles;
};

// Classe Filha
class Zumbi : public Inimigo {
public:
   int arms;
};

int main (int argc, char * const argv[]) {
   // Vetor de objetos da classe mãe (ou filhos)
   std::vector<Inimigo*> inimigos;

   // Criando um objeto filho
   Monstro* louco = new Monstro();
   louco->life = 10;

   // Incluindo objeto filho no vetor
   inimigos.push_back(louco);

   // Criando outro objeto filho
   Zumbi* morto = new Zumbi();
   morto->life = 5;

   // Incluindo outro objeto filho no vetor
   inimigos.push_back(morto);

   // Resgatando o objeto filho do vetor
   louco = (Monstro*)inimigos.at(0);
   louco->tentacles = 3;

   // Resgatando outro objeto filho do vetor
   morto = (Zumbi*)inimigos.at(1);
   morto->arms = 2;

   // Imprimindo propriedades dos objetos
   std::cout << louco->life << "\n" << louco->tentacles << "\n";
   std::cout << morto->life << "\n" << morto->arms << "\n";

   return 0;
}

PS: Nesse exemplo, eu sei a posição certa de cada classe de objeto, mas poderia ser diferente, tomem cuidado