Menu jodo 2D

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Menu jodo 2D

Mensagem por xavier em Seg 11 Abr 2011, 08:10

Boas

Comecei á muito pouco tempo a fazer jogos em XNA e estou agora com um pouco de dificuldade a criar o menu para o jogo.

O jogo terá 2 niveis, e o menu tem de ter help, joga, e sair.

Alguem me pode ajudar ai nisso.

Disponibilizo o codigo, falta aqui uma classe que fiz a parte

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

/*parte I*/
//variavel que armazena a imagem de fundo
Texture2D fundo_ambiente;

//variavel que define um rectangulo
//vai definir o tamanho maximo que um objecto textura poderá ser desenhado
Rectangle viewport_rectangulo;
/*fim parteI*/


//parte 2
// variavel do canhao
objectos_do_jogo canhao;


//parte 3
const int maximo_misseis = 5;//numero maximo de misseis disparados

//array de misseis
objectos_do_jogo[] misseis;

//indicam o estado em que se encontra o teclado
KeyboardState estadoKeyboardState = Keyboard.GetState();

//parte 4

//mumero maximo de embarcaçoes que aparecem ao mesmo tempo
const int max_embarcacoes = 2;

// array de inimigos
objectos_do_jogo[] embarcacoes;

//limites de navegacao
const float min_navegar_embarcacoes = 1.0f;
const float max_navegar_embarcacoes = 0.7f;

//limites de velocidade de navegacao
const float min_veloc_navegar = 1.0f;
const float max_veloc_navegar = 7.0f;

// elemento randonico
Random random = new Random();

//parte 6
int pontuacao;
SpriteFont fonte;
Vector2 pontuacao_p = new Vector2(0.05f, 0.05f); // vector de posicao do ecra onde a pontuacao é desenhada

// sons
SoundEffect som;
SoundEffectInstance som_instancia;


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

///
/// 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.
///

protected override void Initialize()
{
// TODO: Add your initialization logic here




base.Initialize();
}

///
/// LoadContent will be called once per game and is the place to load
/// all of your content.
///

protected override void LoadContent()
{
som = Content.Load("Sound");
som_instancia = som.CreateInstance();

// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);

// TODO: use this.Content to load your game content here

/*parteI*/
//carregar a imagem de fundo na variavel fundo_ambiente
fundo_ambiente = Content.Load(@"Imagens\fundo_ambiente");

//parte 2 carregar a imagem do canhao
canhao = new objectos_do_jogo(Content.Load(@"Imagens\canhao"));
canhao.posicao = new Vector2(110.0f, 560.0f);//definir a posicao do canhao


// carregar na variavel viewport_rectangulo a imagem de fundo instanciando a viewport_rectangulo
// atribuindo-lhe as medidas da tela começando em 0,0 respectivamente width e heigth da Viewport
viewport_rectangulo = new Rectangle(0, 0, graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height);
/*fim parte I*/


//parte 3
misseis = new objectos_do_jogo[maximo_misseis];

for (int i = 0; i < maximo_misseis; i++)
{
misseis[i] = new objectos_do_jogo(Content.Load(@"Imagens\missil"));

//parte 6
//carregar os vectores de cor
misseis[i].textura_cor = new Color[misseis[i].imagem.Width * misseis[i].imagem.Height];
misseis[i].imagem.GetData(misseis[i].textura_cor);
}

//inicializar a array de misseis, instancia a array de inimigois e inicializar as posicoes

embarcacoes = new objectos_do_jogo[max_embarcacoes];

for(int i=0; i {
embarcacoes[i] = new objectos_do_jogo(Content.Load (@"Imagens\embarcacao"));
//parte 6
//carregar os vectores de cor
embarcacoes[i].textura_cor = new Color[embarcacoes[i].imagem.Width * embarcacoes[i].imagem.Height];
embarcacoes[i].imagem.GetData(embarcacoes[i].textura_cor);
}

fonte = Content.Load(@"Fonte\font"); // carregar a fonte no jogo
}

///
/// UnloadContent will be called once per game and is the place to unload
/// all content.
///

protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}

///
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
///

/// 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

//parte2 - rotacao do canhao

GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);
canhao.rotacao += gamePadState.ThumbSticks.Left.X * 0.1f;


//teclas da esquerda e direita do teclado
KeyboardState keyboardState = Keyboard.GetState();

if (keyboardState.IsKeyDown(Keys.Left))
{
canhao.rotacao -= 0.1f;
}
if (keyboardState.IsKeyDown(Keys.Right))
{
canhao.rotacao += 0.1f;
}

//parte 3

//limitar a rotação do canhão - calculo
canhao.rotacao = MathHelper.Clamp(canhao.rotacao, -MathHelper.PiOver4, MathHelper.PiOver2);

//verificar se o jogador pressionou a barra de espaço do teclado
//impedir que hajam disparos continuos caso o jogador mantenha pressionado as teclas
// verificando o estado da barra de espaço
//Caso seja precionado chama o metodo disparo_press_canhao()

if(keyboardState.IsKeyDown(Keys.Space)&& estadoKeyboardState.IsKeyUp(Keys.Space))
{
disparo_press_canhao();
}

UpdateMisseis();

estadoKeyboardState = keyboardState;//atualizar o valor das variáveis de estado do teclado


//parte 4
UpadateEmbarcacoes();//metodo que mata as embarcacoes assim que estas forem saindo sao desenhadas novas embarcacoes

som_instancia.Play();

base.Update(gameTime);
}

//parte 3
// actualização da posição dos misseis
public void UpdateMisseis()
{
foreach(objectos_do_jogo miss in misseis)//foreach percorre todos os elementos da array
{
if(miss.missil_tela)
{
miss.posicao +=miss.velocidade;

// actualização para poder eliminar os misseis fora da tela
// verificar se o missil ainda esta na tela - viewport_rectangulo
if(!viewport_rectangulo.Contains(new Point((int) miss.posicao.X, (int)miss.posicao.Y)))
{
miss.missil_tela = false;
continue;
}

// parte 5 detectar colisoes
Rectangle UpdateMisseis_rectangle = new Rectangle((int)miss.posicao.X, (int)miss.posicao.Y, miss.imagem.Width, miss.imagem.Height);

// ver se há interceçao e se houver fazer desaparer a embarcaçao e o missil
foreach (objectos_do_jogo miss_s in embarcacoes)
{
Rectangle embarcacoes_rectangle = new Rectangle((int)miss_s.posicao.X, (int)miss_s.posicao.Y, miss_s.imagem.Width, miss_s.imagem.Height);

//if (UpdateMisseis_rectangle.Intersects(embarcacoes_rectangle))
//{
// miss.missil_tela = false;
// miss_s.missil_tela = false;
// break;
//}

//parte6
//usando o metodo Interceccao()
if(Intercecao (UpdateMisseis_rectangle,miss.textura_cor, embarcacoes_rectangle, miss_s.textura_cor));
{
miss.missil_tela = false;
miss_s.missil_tela = false;
pontuacao += 1; // contar as colisoes
break;
}

}
}
}
}


public void disparo_press_canhao()
{
foreach(objectos_do_jogo miss in misseis)
{
if(!miss.missil_tela)
{
miss.missil_tela = true;
miss.posicao = canhao.posicao;
miss.rotacao = canhao.rotacao;
miss.velocidade = new Vector2((float) Math.Sin (canhao.rotacao), (float) -Math.Cos(canhao.rotacao))*7.0f; // 7.0f velocidade da bola qd disparada
return;
}
}
}


public void UpadateEmbarcacoes()
{
foreach (objectos_do_jogo embarc in embarcacoes)
{
if(embarc.missil_tela)
{
embarc.posicao += embarc.velocidade;

if(!viewport_rectangulo.Contains (new Point ((int) embarc.posicao.X, (int)embarc.posicao.Y)))
{
embarc.missil_tela = false;
continue;
}
}
// este else serve para verificar se o inimogo esta vivo, e vamos dizer que ta vivo
// e assim usamos uma nova posicao aleatoria e velocidade aleatoria para o novo inimigo
//Lerp - interpolação linear entre dois valores
// Randon.NextDouble - retorna um numero aleatorio que é 0.0 a 1.0
else
{
embarc.missil_tela = true;// inimigo vivo, está na tela ->true

embarc.posicao = new Vector2 (viewport_rectangulo.Right, MathHelper.Lerp((float) viewport_rectangulo.Height * min_navegar_embarcacoes, (float) viewport_rectangulo.Height * max_navegar_embarcacoes, (float) random.NextDouble()));
embarc.velocidade = new Vector2 (MathHelper.Lerp (-min_veloc_navegar, -max_veloc_navegar, (float) random.NextDouble()), 0);

}

}
}


///
/// This is called when the game should draw itself.
///

/// Provides a snapshot of timing values.
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

// TODO: Add your drawing code here

//parteI
spriteBatch.Begin(SpriteBlendMode.AlphaBlend);// passagem por parametros do SpriteBlendMode.AlphaBlend
//que permite desenhar imagens com transparencia
spriteBatch.Draw(fundo_ambiente, viewport_rectangulo, Color.White);//passar por parametros a cor,
//a textura e o rectangulo k especifica onde o sprite vai ser desenhado

//parte 3
//desenhar os misseis

foreach(objectos_do_jogo miss in misseis)
{
if(miss.missil_tela)
{
spriteBatch.Draw(miss.imagem, miss.posicao, null, Color.White, miss.rotacao, miss.centro, 0.6f, SpriteEffects.None, 0);//0,6 tamanho do missil
}
}

//parte2 - desenhar o canhao
spriteBatch.Draw(canhao.imagem, canhao.posicao, null, Color.White, canhao.rotacao, canhao.centro, 1.0f, SpriteEffects.None, 0);//1.0f tamanho do canhão

//desenhar os inimigos
foreach (objectos_do_jogo embarc in embarcacoes)
{
if(embarc.missil_tela)
{
http://spriteBatch.Draw(embarc.imagem, embarc.posicao, null, Color.White, 0.0f, embarc.centro, 0.65f, SpriteEffects.None, 0);//0,65f tamanho das embarcacoes 0.0f inclinação das embarcacoes
spriteBatch.Draw(embarc.imagem, embarc.posicao, null, Color.White, 0.0f, embarc.centro, 1.0f, SpriteEffects.None, 0);//0,65f tamanho das embarcacoes 0.0f inclinação das embarcacoes
}
}


//parte 6
// desenhar a pontuacao no ecra
spriteBatch.DrawString(fonte, "Pontuacao: " + pontuacao.ToString(), new Vector2 (pontuacao_p.X * viewport_rectangulo.Width, pontuacao_p.Y * viewport_rectangulo.Height), Color.White);
spriteBatch.End();

base.Draw(gameTime);
}

// metodo que receberá os rectangulos que envolvem 2 imagens e suas informações de textura e retornará verdadeiro
// ou falso caso as imagens colidam ou não

static bool Intercecao(Rectangle rectgA, Color[] corA, Rectangle rectgB, Color[] corB)
{
//encontrar os limites da intersecção
int topo = Math.Max(rectgA.Top, rectgB.Top);
int fim = Math.Min(rectgA.Bottom, rectgB.Bottom);
int esquerda = Math.Max(rectgA.Left, rectgB.Left);
int direita = Math.Min(rectgA.Right, rectgB.Right);

//Verifica todos os pontos dentro da interseção dos limites
for (int y = topo; y < fim; y++)
{
for (int x = esquerda; x < direita; x++)
{
//obter a cor de ambos os pixeis
Color colorA = corA[(x - rectgA.Left) + (y - rectgA.Top) * rectgA.Width];
Color colorB = corB[(x - rectgB.Left) + (y - rectgB.Top) * rectgB.Width];

// caso os pixeis nao sejam transparentes
if (colorA.A != 0 && colorB.A != 0)
{
//se a intercecao foi encontrada
return true;
}
}
}
return false; // nao houve intercecao
}


}
}



xavier

Número de Mensagens : 1
Data de inscrição : 11/04/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Menu jodo 2D

Mensagem por sonic luan em Seg 11 Abr 2011, 08:30

ola e primeiro de tudo bem vindo ao forum. sua primeira mensagem? bem eu vou ser o primeiro a falar com voçe aqui no forum, uma dica Pesquise antes de Postar
eu encontrei essa engine de menu aqui : http://gmbr.forumeiros.com/t14796-engine-engine-de-menu-profissional-cutscene-de-abertura/

espero que ajude

sonic luan

Ranking : Nota C
Número de Mensagens : 1003
Idade : 17
Data de inscrição : 28/01/2011
Notas recebidas : C-D-A-C
Reputação : 18
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://sonicmaker.forumeiros.com/memberlist

Voltar ao Topo Ir em baixo

Re: Menu jodo 2D

Mensagem por Super Games em Seg 11 Abr 2011, 08:57

Olá!Este é um fórum de GameMaker, e não de XNA, ok?

Super Games

Ranking : Nota D
Número de Mensagens : 2704
Idade : 18
Data de inscrição : 10/06/2010
Notas recebidas : D
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Menu jodo 2D

Mensagem por sonic luan em Seg 11 Abr 2011, 09:51

nosa e mesmo nem reparei que ele não usava game maker, então a engine não vai te ajudar.

sonic luan

Ranking : Nota C
Número de Mensagens : 1003
Idade : 17
Data de inscrição : 28/01/2011
Notas recebidas : C-D-A-C
Reputação : 18
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://sonicmaker.forumeiros.com/memberlist

Voltar ao Topo Ir em baixo

Re: Menu jodo 2D

Mensagem por Conteúdo patrocinado Hoje à(s) 22:23


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum