Então devemos melhorar nossa arumação. Vamos criar uma classe, a classe "terrain", essa classe vai cuidar tudo sobre o terreno e tudo o que for ligado a terreno estará dentro dessa classe. Encapsulamento. A partir de agora tudo o que fizermos terá sua classe especifica.
Clique com o botão direito na Solução "Tutorial1", -> "Add" -> "New Folder", dê o nome para essa paste de "GameBase", a seguir clique, de novo com o botão direito, sobre "GameBase" -> "Add" -> "New Folder" e coloque o nome "Shapes". Novamente só que agora sobre a pasta "Shapes" -> "Add" -> "New item". Selecione "Class" e dê o nome de "Terrain.cs".
Vai abrir o arquivo "Terrain.cs" e a seguir a primeira coisa a fazer é procurar a linha "class Terrain" e altera-la para
"public class Terrain : DrawableGameComponent"
Dizemos que nossa classe é publica e que ela "se desenha".
Vamos agora botar tudo o que é ligado ao terreno, volte ao arquivo "Game1.cs" e copie para o arquivo "Terrain.cs" as variáveis de renderização e depois apague-as do arquivo "Game1.cs": São elas VertexBuffer, IndexBuffer e BasicEffect.
O nosso arquivo "Terrain.cs" deve estar parecido com isso:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Tutorial1.GameBase.Shapes
{
public class Terrain : DrawableGameComponent
{
//Variaveis de Renderização
VertexBuffer vertexBuffer;
IndexBuffer indexBuffer;
BasicEffect effect;
}
Volte ao arquivo "Terrain.cs" posicione o cursos depois do BasicEffect effect; aperte enter 2 vezes e crie um novo método como o a seguir:
public Terrain(Game game)
: base(game)
{
}
e depois outro método:
public void Load()
{
}
Vá ao arquivo "Game1.cs" no método LoadContent() e copie e depois apague tudo, menos a primeira linha. Então a linha do SpriteBatch fica onde esta.
Cole tudo no método Load() do arquivo "terrain.cs". Algumas linhas vão ficar sublinhadas em vermelho são elas:
effect = new BasicEffect(GraphicsDevice);
float aspectRatio = (float)GraphicsDevice.Viewport.Width / (float)GraphicsDevice.Viewport.Height;
vertexBuffer = new VertexBuffer(GraphicsDevice, decl, vertexCount, BufferUsage.WriteOnly);
indexBuffer = new IndexBuffer(GraphicsDevice, IndexElementSize.SixteenBits, 20 * sizeof(int), BufferUsage.WriteOnly);
Como mudamos elas de lugar a propriedade "GraphicsDevice" para de funcionar pois só é acessível da classe que devia de Game, então para corrigir devemos alterar para "Game.GraphicsDevide" todas as entradas, aperte ctrl + H, coloque em find what: "GraphicsDevice" e em replace with "Game.GraphicsDevide". Depois "Replace All".
agora vamos criar outro método digide "public overrride" aperte espaço e vai aparecer varias opções de métodos para serem criados, escolha o método Draw() e dê enter, o método será criado automaticamente. Volte a "Game1.cs" e copie tudo o que está no método Draw() deixando apenas a linha "GraphicsDevice.Clear()" apague o resto e cole tudo dentro do método Draw() do arquivo "Terrain.cs". Você deve fazer a mesma alteração que foi feita acima para que tudo fique "Game.GraphicsDevice".
Agora para finalizar vamos fazer as chamadas no "Game1.cs". Adicione a seguinte entrada no final das linhas "using"
using Tutorial1.GameBase.Shapes;
Vai indicar ao nosso jogo onde esta a classe Terrain.
Adicione a seguinte variável:
Terrain terrain
No método Initialize adicione
terrain = new Terrain(this);
Estamos criando uma nova instância da classe Terraim e passando como argumento "this" referindo-se ao nosso jogo. Agora no Metodo LoadContent adicione
terrain.Load();
Carregar os efeitos do terrain, o effect e tudo o que tiver dentro de Load(0
E para finalizar adicione no método Draw()
terrain.Draw(gameTime);
Pronto, seu programa agora está pronto mas só faz as mesmas coisas de antes, mas agora dá pra saber tudo o que é ligado ao terreno.
Aqui esta os arquivos do ultimo tutorial:
http://www.megaupload.com/?d=D4SW3B3K
no método update vc citou a variável effect que foi transferida para a classe Terrain.cs. Suas declarações foram junto e agora na classe Game.cs dá erro.
ResponderExcluir