terça-feira, 24 de junho de 2008

Ubisoft cada vez olha mais para o Brasil


Hoje foi um dia histórico para o mercado de games brasileiro!

Com a notícia de que a Ubisoft vai montar um estudio de desenvolvimento no Brasil. Ela entra nesse país que tem tudo pra transformar num polo da area por possuir um povo criativo e que trabalha com salarios menores do que os de paises desenvolvidos, por causa do menor custo de vida, que com isso os custos de desenvolvimento aqui são menores, essa Parceria tem tudo pra ser um sucesso.
Mas não é de hoje que ela começa a olhar para as terras tupiniquins, ele chegou a abrir um escritorio para marketing em nosso país, mas isso todo mundo já sabe e o que eu percebi e não vi ninguem falar, são dois jogos da Ubisoft que tem o Brasil no enredo, Haze e Tom Clancy's Hawx.


Haze - este jogo já foi lançado para PS3 feito pela Free Radical e não foi tão bem aclamado pela critica.

No primeiro trailer desse jogo que saiu na E3 de 2006, ele mostrava no fim quando o soldado ficava com um ataque de raiva, por causa da injeção de hormonios que era aplicada pela sua armadura em seu organismo, nessa cena aparece no fundo a famosa Maravilha do Mundo Moderno, o Cristo Redentor, mas com apenas um braço, ou seja, ele está no Rio de Janeiro.









Tom Clancy's Hawx - Este ainda está para lançar neste ano, será um simulador de caças feito pela Ubisoft Bucareste que possui um de seus cenários no Brasil.


1ª foto:


2ª foto:


3ª foto:


4ª foto:

Agora com a Ubisoft São Paulo tem tudo para ocorrer mais games com o Brasil no enredo, é a cultura brasileira se modernizando para a forma mais moderna de cultura que existe.

quinta-feira, 5 de junho de 2008

Movendo e Rotacionando Imagens na tela

Tutorial nível: Normal

Para este tutorial você precisa:
ter instalado o MS XNA GSE 2.0

Este tutorial é continuação de:
Desenhado uma Imagem na tela


Movendo e Rotacionando Imagens na tela

Agora vamos continuar nosso tutorial adicionado movimento ao nosso carro(citado como imagem no nosso tutorial anterior).

Abra nosso antigo projeto.

Primeira coisa que teremos que fazer e criar variáveis para armazenar a posição, ângulo e a velocidade de nosso carro quando em movimento.
Então no começo do código, abaixo da linha:
Texture2D car;
Adicionaremos nossas variaveis:
float speed = 3f;
float rotation = 0;
Vector2 position; //--> este é um vetor de duas posições X,Y

Então ficará assim:


using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace Race
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D car;
float speed = 3f;
float rotation = 0;
Vector2 position; //--> este é um vetor de duas posições X,Y




Agora como não podemos instaciar o Vector2 position no inicio teremos que instacia-lo em um lugar específico, no método protected override void Initialize(), então dentro do método Initialize abaixo da linha:
base.Initialize();
Instanciamos o Vector2 position assim:
position = new Vector2((float)((int)graphics.PreferredBackBufferWidth / 2), (float)((int)graphics.PreferredBackBufferHeight / 2));
com a propriedade PreferredBackBufferWidth e PreferredBackBufferHeight do GraphicsDeviceManager graphics estamos pegando a largura e altura da tela para depois dividirmos por dois, que nos da o centro da tela, ou seja, estaremos instanciando com a posição do centro da tela.
Então ficara assim o método Initialize:


protected override void Initialize()
{
base.Initialize();
position = new Vector2((float)((int)graphics.PreferredBackBufferWidth / 2), (float)((int)graphics.PreferredBackBufferHeight / 2));
}


Agora para podermos testar nossas mudanças só precisamos atualizar o método Draw. Então reponha o método já existente:
spriteBatch.Draw(car,new Rectangle(20,20,car.Width,car.Height),Color.White);
Por este mais complexo:
spriteBatch.Draw(car, position, null, Color.White, rotation, new Vector2(35, 22), 1, SpriteEffects.None, 0);

Repare nos novos parametros do método Draw, são 9:



1° o mesmo parametro antigo, Textura2D texture, que será a imagem que planejamos desenhar, então nós indicamos a nossa Texture2D chamada car

2° é o Vector2 Position, que é a posição da imagem em um vetor, então passamos o nosso Vector2 position.

3° é o Rectangle? sourceRectangle, esse e o retangulo que representa a parte da sua imagem que você quer desenhar, por exemplo você tem essa como sua imagem:



E passa como parametro a um retangulo com x=210 y=110 width=70(largura) heigth=90(altura), você irá apenas desenhar essa parte da figura:


Ou seja, apenas aparecerá na tela assim:


Então como nós querenos desenhar a imagem intera e não apenas parte podemos pasar o valor do parametro como null(nulo) pois ele e um retangulo que aceita valor nulo por isso ele é um Rectangle? e não apenas um Rectangle, assim o método entende que você quer desenhar a imagem inteira.

4° é o Color color é a cor para imagem, então passamos o branco pois o branco contém todas a cores(Ex.: Se você passar o vermelho nossa imagem não possuirá tons de verde e nem de azul, ou seja só possuirá tons de vermelho, e para amarelo ele posuirá tons de verde e vermelho) então após esse método escreveremos:

5° é o float rotation é o valor da rotação da nossa imagem

6° é o Vector2 origin é o vetor da posição do centro da imagem, ou seja, o ponto em que sua imagem vai se rotacionar em volta, aqui nos passamos o valor x=35 y=22 que será o ponto azul e amarelo da imagem:



7° é o float scale esse é o parametro de escala da imagem como não queremos alteração no tamanho passamos 1.

8° é o SpriteEffects effects é um enum com uns efeitos para aplica na imagem com espelhar na horizontal ou na vertical, mas como não queremos fazer nada disso selecionamos o efeito nome, ou seja, nenhum efeito.

9° é o float layerDepth esse eu não consegui perceber diferença então não sei para que serve.

Então ficará assim o novo método Draw:


protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();
spriteBatch.Draw(car, position, null, Color.White, rotation, new Vector2(35, 22), 1, SpriteEffects.None, 0);
spriteBatch.End();

base.Draw(gameTime);
}


Agora nós podemos testar para ver a diferença, em vez do carro aparecer no canto esquerdo em cima da tela ele vai aparecer no meio da tela, lembra que quando nós instanciamos nossa variavel position nós davamos o centro da tela como posição.



Mas agora nós vamos fazer a gente comandar o carro com as setas do teclado.

Então no método protected override void Update(GameTime gameTime) vamos adicionar após a linha:
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();


1°:
KeyboardState ks = Keyboard.GetState();
Nesse comando nós estamos pegando como estará o estado do teclado, para podermos ver quais teclas estão precionadas.

2°:
if (ks.IsKeyDown(Keys.Left))
rotation -= MathHelper.ToRadians(1);

Agora nós verificaremos se a seta para a esquerda do teclado está precionada para reduzirmos da ratação do carro 1 grau mas sendo que nossa rotação está em radiano e não em grau então nós convertemos com o método ToRadians existente na classe MathHelper.

3°:
if (ks.IsKeyDown(Keys.Right))
rotation += MathHelper.ToRadians(1);

Agora nós verificaremos se a seta para a direita do teclado está precionada para fazermo o contrário somar 1 grau a rotação do carro.

4°:
if (ks.IsKeyDown(Keys.Up))
{
position.Y += (float)Math.Sin((double)rotation) * speed;
position.X += (float)Math.Cos((double)rotation) * speed;
}

Agora nós temos que fazer o carro se mexer mas em função da sua rotação, então para o eixo Y nós damos o seno de nosso ângulo multiplicado por nossa velocidade(a variavel float speed), que por enquanto é limitada em 3. E no eixo X nós damos o cosseno da rotação multiplicado com a velocidade.

Então ficará assim o método Update:


protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

KeyboardState ks = Keyboard.GetState();

if (ks.IsKeyDown(Keys.Left))
rotation -= MathHelper.ToRadians(1);

if (ks.IsKeyDown(Keys.Right))
rotation += MathHelper.ToRadians(1);

if (ks.IsKeyDown(Keys.Up))
{
position.Y += (float)Math.Sin((double)rotation) * speed;
position.X += (float)Math.Cos((double
)rotation) * speed;
}

base.Update(gameTime);
}


Agora está pronto! Nós temos nosso carro comandados por nós, mas lembre que não fizemos com uma fisica realista.





Espere pelos próximos tutoriais!


Código completo:

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace Race
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D car;
float speed = 3f;
float rotation = 0;
Vector2 position;

public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}

protected override void Initialize()
{
base.Initialize();
position = new Vector2((float)((int)graphics.PreferredBackBufferWidth / 2), (float)((int)graphics.PreferredBackBufferHeight / 2));
}

protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
car = Content.Load<Texture2D>(@"car");
}

protected override void UnloadContent()
{
}

protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

KeyboardState ks = Keyboard.GetState();

if (ks.IsKeyDown(Keys.Left))
rotation -= MathHelper.ToRadians(1);

if (ks.IsKeyDown(Keys.Right))
rotation += MathHelper.ToRadians(1);

if (ks.IsKeyDown(Keys.Up))
{
position.Y += (float)Math.Sin((double)rotation) * speed;
position.X += (float)Math.Cos((double
)rotation) * speed;
}

base.Update(gameTime);
}

protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();
spriteBatch.Draw(car, position, null, Color.White, rotation, new Vector2(35, 22), 1, SpriteEffects.None, 0);
spriteBatch.End();

base.Draw(gameTime);
}
}
}

Desenhado uma Imagem na tela

Tutorial nível: Fácil

Para este tutorial você precisa:
ter instalado o MS XNA GSE 2.0


Desenhando uma imagem na tela

Nesse projeto apenas iremos desenhar uma imagem na tela.


Primeiro passo crie um projeto, eu criei um projeto WindowsGame.

Criado o projeto ele vem assim(Na versão de XNA 2.0):



using System;
using System.Collections.Generic;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace WindowsGame1
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

public Game1 ()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}

/// <summary>
/// Allows the Game to perform any initialization it needs to before starting to run.
/// This is where it can query for any required services and load any non-graphic
/// related content. Calling base.Initialize will enumerate through any components
/// and initialize them as well.
/// </summary>
protected override void Initialize()
{
// TODO: Add your initialization logic here

base.Initialize();
}

/// <summary>
/// LoadContent will be called once per Gameand is the place to load
/// all of your content.
/// </summary>
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch= new SpriteBatch(GraphicsDevice);

// TODO: use this.Content to load your Gamecontent here
}

/// <summary>
/// UnloadContent will be called once per Gameand is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}

/// <summary>
/// Allows the Game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.
protected override void Update(GameTime gameTime)
{
// Allows the Game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

// TODO: Add your update logic here

base.Update(gameTime);
}

/// <summary>
///
This is called when the Gameshould draw itself.
/// <summary>
/// <param name="gameTime">Provides a snapshot of timing values.
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

// TODO: Add your drawing code here

base.Draw(gameTime);
}
}
}




Eu sempre prefiro apagar os comentários para ficar mais fácil de trabalhar deixando assim:



using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace WindowsGame1
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

public Game1 ()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
base
.Initialize();
}
protected override void LoadContent()
{
spriteBatch= new SpriteBatch(GraphicsDevice);
}
protected override void
UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
}
}

Primeiro passo vamos incluir no nosso projeto uma imagem de um carro para podermos desenhá-la na tela, então salve essa imagem para podermos ultiliza-la:


Então vá no Solution Explorer(Se não estiver aparecendo use o Hotkey “Ctrl W, S”) clique com o botão direito sobre a pasta Content então clique em Add depois em Existing Item.

Clicado em Add Existing Item agora procure a imagem selecione-a e adicione ao projeto.

Fazendo isso você irá adicionar ao seu projeto um arquivo já existente, ou seja, uma imagem alocada em seu PC, agora dê o endereço da imagem que eu disse para você salvar e clique em Add para adiciona-la no nosso projeto.

Agora no arquivo Game1.cs e no inicio do código adicione uma Texture2D para armazenarmos nossa imagem.Então abaixo da linha:
SpriteBatch spriteBatch;
Escreva:
Texture2D car; //--> comando para adicionar a variável onde iremos armazenar nossa imagem
Então ficara assim:


using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace WindowsGame1
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D car; //--> comando para adicionar a variável onde iremos armazenar nossa imagem

public Game1 ()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}



Agora vamos ler a imagem e armazena-la na nossa variável car que acabamos de criar para guardar-la, então no método protected override void LoadContent() que como nome já diz é o espaço para lermos qualquer tipo de conteudo que iremos usar então logo após a linha:
spriteBatch = new SpriteBatch(graphicsDevice);
vamos escrever:
car = Content.Load<Texture2D>(@"car"); //--> comando para lermos nossa imagem e armazena-la na variavel car

Então ficara assim o método LoadContent:

protected override void LoadContent()
{
spriteBatch = new SpriteBatch(graphicsDevice);
car = Content.Load<Texture2D>(@"car"); //--> comando para lermos nossa imagem e armazena-la na variavel car
}



Agora nós só precisamos desenhar nossa imagem na tela, então no método protected override void Draw(GameTime gameTime) primeiro nós precisamos começar o nosso SpriteBatch, já existente no projeto com o nome de spriteBatch(com primeiro caractere em minúsculo) com o método Begin, e ai sim podemos desenhar nossa imagem com o método Draw do SpriteBatch e depois nós precisaremos fechar nosso SpriteBatch com o método End. Então precisaremos escrever depois da linha:
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
Escreveremos:
spriteBatch.Begin();
Depois o complexo método Draw:
spriteBatch.Draw(car,new Rectangle(20,20,car.Width,car.Height),Color.White);

Preste atenção nos parametros que o método Draw pede no mínimo 3 parametros:

1° ele pede o Textura2D texture, que será a imagem que planejamos desenhar, então nós indicamos a nossa Texture2D chamada car

2° ele pede o Rectagle destinatioRectangle, que nada mais é o retangulo em que desenharemos a imagem na tela, então criaremos um novo retangulo com as sguites especificações ele vai começar no ponto (20,20) da tela, terá de largura a largura de nossa imagem e de altura terá tambem a altura de nossa imagem

3°ele pede Color color, que nada mais é a cor para imagem, então passamos o branco pois o branco contém todas a cores(Ex.: Se você passar o vermelho nossa imagem não possuirá tons de verde e nem de azul, ou seja só possuirá tons de vermelho, e para amarelo ele posuirá tons de verde e vermelho) então após esse método escreveremos:
spriteBatch.End();
Então ficara assim o método Draw:



protected override void Draw(GameTime gameTime
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();
spriteBatch.Draw(car,new Rectangle(20,20,car.Width,car.Height),Color.White);
spriteBatch.End();

base.Draw(gameTime);
}


Pronto! Desenhamos uma imagem na tela!



Espere pelos próximos tutoriais!


Código completo:


using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace WindowsGame1
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D car; //--> comando para adicionar a variável onde iremos armazenar nossa imagem

public Game1 ()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
base
.Initialize();
}
protected override void LoadContent()
{
spriteBatch= new SpriteBatch(GraphicsDevice);
car = Content.Load<Texture2D>(@"car"); //--> comando para lermos nossa imagem e armazena-la na variavel car
}
protected override void
UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();base.Update(gameTime);
}

protected override void Draw(GameTime gameTime
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();
spriteBatch.Draw(car,new Rectangle(20,20,car.Width,car.Height),Color.White);
spriteBatch.End();

base.Draw(gameTime);
}
}
}



XNA - Básico

Tutorial nível: Fácil

Para este tutorial você precisa:
ter instalado o MS XNA GSE 2.0


XNA - Básico

O Microsoft XNA Game Studio é o framework para aplicações gráficas criado pela Microsoft, lançado em Novembro de 2006, foi criado com o intuito de abstrair mais o código de um jogo facilitando ainda mais a vida do programador, não precisando criar classes para decifrar os arquivos em um formato específico, como acontece com o DirectX. Assim então economizando tempo deste longo processo que é desenvolver um jogo, popularizando essa criação, dominada antes apenas por grandes empresas.
O XNA utiliza como linguagem de programação oficial o C# que é uma linguagem com a sintaxe muito parecida C++ porém de mais alto nível, entre as vantagens do C# uma importante é que ele possui um código gerenciado, você não precisará trabalhar com Ponteiros e Destrutores, economizando ainda mais tempo. Por ser muito parecida com C++, linguagem de programação que domina o mercado de Desenvolvimento de Jogos, facilita um dos objetivos do XNA(Descoberta de talentos) que é a fácil adaptação para novos talentos nas tecnologias das grandes empresas dispostas a contratar-los.
-//
-//
-// Post incompleto!
-//
-//

Instalando o MS XNA GSE 2.0

Tutorial nível: Newbie

Para este tutorial você precisa:
ter instalado o MS Visual C# 2005 Express Edition
e atualizado com o Service Pack 1 (SP1)

Instalando o Microsoft XNA Game Studio Express 2.0:

1) Precisa baixar o instalador, então entre no Site pelo link:

http://www.microsoft.com/downloads/details.aspx?FamilyId=DF80D533-BA87-40B4-ABE2-1EF12EA506B7&displaylang=en

2) Clique em DOWNLOAD.



3) Espere começar o download, se não começar clique no link START DOWNLOAD



4) Baixado o arquivo, abra-o. Ao abrir, espere ler.



5) Acabando a leitura abrirá a tela de boas-vindas, então clique NEXT.



6) Após ler o acordo e aceitar selecionando a checkBox clique em NEXT para prosseguir.



7) Nessa parte o instalador pede para você selecionar se quer ou não criar uma exceção para habilitar a conexão entre o PC e um XBOX 360 na sub-rede local. Para você que pretende ligar um XBOX 360 com o PC, observe se você possui um outro Firewall sem ser o da Microsoft e lembre de verificar depois se possui uma exceção, para poder haver conexão entre o PC e o XBOX 360. Faça a escolha e para prosseguir clique em NEXT.



8) Agora só espere terminar.



9) Clique em FINSH para terminar a instalação, que ele te levará ao site do Creators Club.