Fórum Sharpgames
 
 
  Forum  Criação de Jogo...  Algoritmos  Como capturar esse evento?
Anterior Anterior
 
Próximo Próximo
Nova Entrada 29/5/2008 18:33
Resolvido
  felipess
30 tópicos
8th Level Poster


Como capturar esse evento? 
Opa galera,
        
        minha dúvida dessa vez é o seguinte. Na minha aplicação eu tenho uma matriz, onde cada posição dessa matriz contém um objeto. E esta matriz está desenhada na tela. Eu quero que quando o usuario clique em um desses objetos da matriz, eu obtenha esse objeto que foi clicado para fazer algumas modificações. deu pra entender o problema?!

        outra dúvida é que percebi que o mouse não aparece dentro da janela do jogo... neste caso eu tenho q utilizar algum outro tipo de seleção ou coisa do tipo??

só lembrando... estou começando agora....

[]´s

[]´s Felipe Sampaio
 
Nova Entrada 29/5/2008 19:44
  lucianoJose
125 tópicos
Iniciante


Re: Como capturar esse evento? 
Modificado Por lucianoJose  em 29/5/2008 16:45:52)
 felipess escreveu
Opa galera,
        
        minha dúvida dessa vez é o seguinte. Na minha aplicação eu tenho uma matriz, onde cada posição dessa matriz contém um objeto. E esta matriz está desenhada na tela. Eu quero que quando o usuario clique em um desses objetos da matriz, eu obtenha esse objeto que foi clicado para fazer algumas modificações. deu pra entender o problema?!

        outra dúvida é que percebi que o mouse não aparece dentro da janela do jogo... neste caso eu tenho q utilizar algum outro tipo de seleção ou coisa do tipo??

só lembrando... estou começando agora....

[]´s


1º pergunta:

Cada objeto de sua matriz deve conter algum outro objeto responsavel por demilitá-lo. Então, você vai pegar a coordenada (x, y) do click do Mouse, e efetuar um teste de colisão com esse objeto que delimita-o. 

Se a sua coordenada (x, y) estiver contida no espaço que delimita o objeto, então ocorreu colisão e um evento deve ser "levantado".

Dai em outra classe, por exemplo, você assina esse evento, e depois, no Event handler, você vai receber o objeto que quer e efetua alguma modificação.

2º pergunta:

Dentro do construtor da classe Game, coloca esta linha de código para o ponteiro do mouse ficar visivel:

this.IsMouseVisible = true;

MCP, MCTS. Administrador do SharpGames. Game Developer(C++) at Manifesto Game Studio Meu Blog: lucianojosefj.spaces.live.com
 
Nova Entrada 29/5/2008 19:55
  felipess
30 tópicos
8th Level Poster


Re: Como capturar esse evento? 
ahh blz luciano... so para complementar. como seria +/- esse objeto delimitador? ele apenas guardaria a coordenadas oculpadas pelo objeto clicado?


vlw Luciano + uma vez!! :P

[]´s Felipe Sampaio
 
Nova Entrada 30/5/2008 0:06
  lucianoJose
125 tópicos
Iniciante


Re: Como capturar esse evento? 
 felipess escreveu
ahh blz luciano... so para complementar. como seria +/- esse objeto delimitador? ele apenas guardaria a coordenadas oculpadas pelo objeto clicado?


vlw Luciano + uma vez!! :P


Um exemplo:
 
Observe uma simples classe Sprite:

public delegate void myEventHandler(Sprite sprite);
 
public class Sprite
    {
        public event myEventHandler Clicked;
 
        public Rectangle Rectangle; //Objeto delimitador do Sprite
 
        public void Update(GameTime gameTime)
        {
            if (this.Rectangle.Contains(Mouse.GetState().X, Mouse.GetState().Y) == true)
            {
                this.Clicked(this);
            }
            ...
        }
    }

Dai se por exemplo você quisesse modificar o sprite quando fosse clicado na classe Game, por exemplo, teriamos:
public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
 
        Sprite mySprite;
 
        public Game1()
        {
           
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }
 
        protected override void Initialize()
        {
            this.mySprite = new Sprite();
 
            this.mySprite.Clicked += new myEventHandler(mySprite_Clicked);
 
            base.Initialize();
        }
        ///<summary>
        /// Event handler method
        ///</summary>
        ///<param name="sprite">Sprite que será manuseado</param>
        void mySprite_Clicked(Sprite sprite)
        {
            // Mudanças no sprite poderiam ser feitas aqui
        }
  
...
 

MCP, MCTS. Administrador do SharpGames. Game Developer(C++) at Manifesto Game Studio Meu Blog: lucianojosefj.spaces.live.com
 
Nova Entrada 2/6/2008 17:39
  felipess
30 tópicos
8th Level Poster


Re: Como capturar esse evento? 
putzs... escrevi um post gigantesco quando dei submit deu um erro perdi tudo....

resumindo... nao entendi direito luciano como cada elemento da matriz teria um objeto delimitador que especifique este objeto se ai nesse código você não está instanciado nada. Ou eu tenho que fazer isso na hora que estou preenchendo a matriz?? outra coisa como é que eu mudaria o elemento da matriz dentro do método mySprite_Clicked se eu estou recebendo como parâmetro o sprite e não o objeto em si. Ou eu tenho como chegar no objeto a partir do sprite Ou o sprite já seria esse objeto? 

ps: Estou com dificuldade porque ainda não consigo compreender bem o conceito de sprite, como utiliza-lo e quando... se estiver algum material de estudo disponibiliza aii... :p (vou procurar aqui no forum sobre isso agora...)


vlw pela força....

[]´s Felipe Sampaio
 
Anterior Anterior
 
Próximo Próximo
  Forum  Criação de Jogo...  Algoritmos  Como capturar esse evento?
AdSense

Amazon

Logos do XBox 360, XNA e Games For Windows
Copyright 2008 por SharpgamesPolítica de Privacidade  |  Termos de Uso