Fórum Sharpgames
 
 
  Forum  Criação de Jogo...  Gráficos 2D/3D  Como fazer a mesma coisa em XNA?
Anterior Anterior
 
Próximo Próximo
Nova Entrada 16/10/2009 11:24
Não-resolvido
  miguelpragier
5 tópicos
Sem Ranking


Como fazer a mesma coisa em XNA? 
O efeito é esse aqui: 

http://www.miguelpragier.eti.br/dev/simples.swf
 
Em SDL, eu faço o pássaro com SpriteSheet e as janelas da casa eu faço à mão, mudando a cor da janela gradativamente ( efeito dimmer ) com SDL_FillRect(). E se fosse em XNA, como é que os camaradas deste FORUM fariam? ( O principal pra mim é o efeito dimmer das janelas! ) Miguel

M.Pragier
 
Nova Entrada 26/10/2009 10:14
  miguelpragier
5 tópicos
Sem Ranking


Re: Como fazer a mesma coisa em XNA? 
Pode ser qualquer sugestão, gente. Afinal, Tudo o que sei sobre montagens 2D é o que a SDL permite.
 
A única coisa que não encontrei na Internet em minhas pesquisas no Google foi o efeito dimmer.
 
Como fazer?
- Com luz? 
- Com sprites alternados? 
- Com um effect? 
- NDA? 

Thanks

M.Pragier
 
Nova Entrada 8/11/2009 23:57
  joqus
57 tópicos
6th Level Poster




Re: Como fazer a mesma coisa em XNA? 
Bom, o q vc pode fazer é desenhar
os vertices da porta de da janela com uma cor e
no método update incrementar a cor para que
ocorra o efeito desejado.

Fiz um exmeplo baseado em um código
do site riemers.net para vc ver como fica.

Inclua esse arquivo no Content do seu jogo users.telenet.be/riemer/files/effects.fx

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 LuzPiscando
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        GraphicsDevice device;
        Effect effect;
        VertexPositionColor[] vertices;
        VertexDeclaration myVertexDeclaration;

        Vector3 cor;
        float incremento;

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

        protected override void Initialize()
        {
            graphics.PreferredBackBufferWidth = 500;
            graphics.PreferredBackBufferHeight = 500;
            graphics.IsFullScreen = false;
            graphics.ApplyChanges();
            Window.Title = "Luz piscando!";
           
            cor = new Vector3(0, 0, 0);
            incremento = 0.01f;

            base.Initialize();
        }

        private void SetUpVertices()
        {
            vertices = new VertexPositionColor[3];

            vertices[0].Position = new Vector3(-0.5f, -0.5f, 0f);
            vertices[0].Color = new Color(cor);
            vertices[1].Position = new Vector3(0, 0.5f, 0f);
            vertices[1].Color = new Color(cor);
            vertices[2].Position = new Vector3(0.5f, -0.5f, 0f);
            vertices[2].Color = new Color(cor);

            myVertexDeclaration = new VertexDeclaration(device, VertexPositionColor.VertexElements);
        }

        protected override void LoadContent()
        {
            device = graphics.GraphicsDevice;
            spriteBatch = new SpriteBatch(GraphicsDevice);

            effect = Content.Load<Effect>("effects");


            SetUpVertices();
        }

        protected override void UnloadContent()
        {
        }

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


            if (cor.Y <= 0f)
            {
                incremento = 0.01f;
            }
            if (cor.Y >= 1f)
            {
                incremento = -0.01f;
            }

            //Customize com a cor desejada
            //cor.X = cor.X + incremento;
            cor.Y = cor.Y + incremento;
            cor.Z = cor.Z + incremento;

            SetUpVertices();

            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            device.Clear(Color.DarkSlateBlue);

            effect.CurrentTechnique = effect.Techniques["Pretransformed"];
            effect.Begin();
            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Begin();

                device.VertexDeclaration = myVertexDeclaration;
                device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1);

                pass.End();
            }
            effect.End();

            base.Draw(gameTime);
        }
    }
}

as coisas acontecem de um jeito próprio a cada iteração, por mais identicas q pareçam!!!
 
Nova Entrada 14/1/2010 11:36
  Shinji
5 tópicos
Sem Ranking




Re: Como fazer a mesma coisa em XNA? 

Uma maneira mais prática de fazer isto é fazer com que as janelas da casa sejam imagens desenhadas por um SpriteBatch e utilizar "tintar" a sprite.

Veja um exemplo no MSDN http://msdn.microsoft.com/en-us/library/bb194914.aspx

Divirta-se!


Engenheiro de Software - Microsoft
 
Anterior Anterior
 
Próximo Próximo
  Forum  Criação de Jogo...  Gráficos 2D/3D  Como fazer a mesma coisa em XNA?
Logos do XBox 360, XNA e Games For Windows
Copyright 2006-2012 por SharpgamesPolítica de Privacidade  |  Termos de Uso