Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [XNA] Aggiornare posizione Giocatore/immagine

    Buongiorno, spiego il mio problema:

    Sto creando un gioco 2D con un omino creato da me che effettua 2 movimenti: su e giu.

    Movimento che viene effettuato con i tasti delle freccie Su e Giù.

    Fin qui tutto ok, però ho un problema nell'aggiornare l'immagine.

    protected override void LoadContent()
    {
    immagineGiocatoreSu = Game.Content.Load<Texture2D>(@"omino su");
    immagineGiocatoreGiu = Game.Content.Load<Texture2D>(@"omino giu");
    spriteBatch = new SpriteBatch(Game.GraphicsDevice);

    giocatore.Add(new ControlledSprite(immagineGiocatoreSu, PosizioneGiocatore, new Point(39, 39), 0, new Point(0, 0), new Point(3, 0), new Vector2(4.0f, 4.0f),
    milliseondiPerFrameGiocatore));
    giocatore.Add(new ControlledSprite(immagineGiocatoreGiu, PosizioneGiocatore, new Point(39, 39), 0, new Point(0, 0), new Point(3, 0), new Vector2(4.0f, 4.0f),
    milliseondiPerFrameGiocatore));
    base.LoadContent();
    }

    Non ho inserito le dichiarazioni delle variabili perchè mi sembrano molto "capibili".

    Qui so già di sbagliare perchè mi ritrovo con 2 diversi Sprite e con 2 diverse posizioni, invece dovrebbe essere tutti in un'unica.

    Continuo così:

    public int numeroSprite
    {
    get
    {
    int pNumeroSprite = 0;
    if (Keyboard.GetState().IsKeyDown(Keys.Up))
    { pNumeroSprite = 0; }
    if (Keyboard.GetState().IsKeyDown(Keys.Down))
    { pNumeroSprite = 1; }
    return pNumeroSprite;
    }

    public override void Update(GameTime gameTime)
    {

    indiceListaGiocatore = numeroSprite;
    giocatore[indiceListaGiocatore].Update(gameTime, Game.Window.ClientBounds);

    base.Update(gameTime);

    }

    public override void Draw(GameTime gameTime)
    {
    spriteBatch.Begin();
    indiceListaGiocatore = numeroSprite;
    giocatore[indiceListaGiocatore].Draw(gameTime, spriteBatch);
    spriteBatch.End();
    }

    Chiedo aiuto su come fare. Oppure se potete dirmi un metodo (che non conosco) che mi consenta di trovare le posizioni sulla finestra dell'omino per poi passarle in posizioneGiocatore tramite un set get.. ed aggiungere alla lista un nuovo omino..giusto? sto andando nella direzione corretta?

    Però forse è meglio non caricare nel LoadContent entrambe le immagini... mmm... aiutatemi voi, ringrazio chiunque mi risponda.

    Spero di essere stato chiaro.

  2. #2
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Mah....io uso un codice un pò più sempliciotto, sono ancora alle prime armi con Xna, comunque ti allego un codice che potrebbe darti qualche idea.

    codice:
    using Microsoft.Xna.Framework;
      using Microsoft.Xna.Framework.Graphics;
      using Microsoft.Xna.Framework.Input;
    
      namespace WindowsGame1
      {
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            private GraphicsDeviceManager g;
            private SpriteBatch s; 
            private Vector2 Pos;
            private Texture2D sprite;
            public void KeybInput()
            {
                KeyboardState k = Keyboard.GetState();
                if (k.IsKeyDown(Keys.Escape))
                {
                    this.Exit();
                }
                else if (k.IsKeyDown(Keys.Right))
                    Pos += new Vector2(1, 0);
                else if (k.IsKeyDown(Keys.Left))
                    Pos += new Vector2(-1, 0);
                else if (k.IsKeyDown(Keys.Up))
                    Pos += new Vector2(0, -1);
                else if (k.IsKeyDown(Keys.Down))
                    Pos += new Vector2(0, 1);
            }
    
     
            public Game1()
            {
                g = new GraphicsDeviceManager(this);
                g.PreferredBackBufferWidth = 1000;
                g.PreferredBackBufferHeight = 500;
                Content.RootDirectory = "Content";
            }
    
            protected override void Initialize()
            {
                Pos=new Vector2(400, 200);
                base.Initialize();
            }
    
            protected override void LoadContent()
            {
                s = new SpriteBatch(GraphicsDevice);
                sprite = Content.Load<Texture2D>("x");
     
            }
    
            protected override void UnloadContent()
            {
            }
    
            protected override void Update(GameTime t)
            {
                KeybInput(); 
                base.Update(t);
            }
    
            protected override void Draw(GameTime t)
            {
                GraphicsDevice.Clear(Color.CornflowerBlue);
                s.Begin();
                s.Draw(sprite, Pos, Color.White);
                s.End();
    
            }
        }
      }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.