Emanuele Mattei

Il Blog di Emanuele

My Links

Blog Stats

News

E-mail per eventuale contatto
E-mail






Supporta il blog offrendo una pizza o un caffè per informazioni fai click qui. Grazie :-)))




ClipArt del giorno:
Naviga attraverso più di 140.000 immagini e clip multimediali scaricabili gratuitamente, per arricchire i tuoi documenti Office.



E-mail per eventuale contatto
E-mail



Locations of visitors to this page



Le opere pubblicate in questo blog sono sotto la licenza Creative Commons. Attribuzione- No commerciale e no derivate.

Il libro che sto leggendo:






Settembre 2007 Dicembre 2007
Marzo 2008
Giugno 2008
Settembre 2008
Dicembre 2008


Pagina Hall Of Fame

Powered by  MyPagerank.Net

Categorie Articoli

Archivio

Categorie Post

Immagini

Sezione siti

Blog Amici

Office

Net

Siti Gratuiti

Siti vari

Tools

Elenco Siti

Il tempo a Roma

Programmi Gratuiti e Portatili

Tutorial XNA spostare una risorsa immagine

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_xna-spostamento-di-una-risorsa-immagine-_1137.aspx



Introduzione
In questo articolo vedremo come spostare una risorsa e precisamente un file immagine, nella nostra area di gioco.
Si crea un nuovo progetto XNA per Windows.
Nella finestra esplora soluzione, selezioniamo la sezione “Content” e dal menu di scelta rapida selezioniamo la voce “Aggiungi” e dal sotto menu, selezioniamo “Elemento esistente”.
Dopo aver aggiunto il file immagine, passiamo alla classe Game1.



Stesura del codice
A questo punto non ci resta che scrivere il codice per spostare la nostra risorsa.
Si creano tre oggetti a livello di classe, questi tre membri, avranno il compito di gestire la risorsa, la posizione e la velocità
Si riporta il codice di tale dichiarazione.



//gestione della risorsa



Texture2D TextureImmagine;



//posizione della risorsa



Vector2 Posizione = Vector2.Zero;



//velocità



Vector2 Velocita = new Vector2(170.0f, 170.0f);



Nell’evento “LoadContent” si inizializza l’oggetto di tipo Texture2D con la risorsa.
Qui di seguito si riporta la riga di codice dell’evento LoadContent.



protected override void LoadContent()



{



// Create a new SpriteBatch, which can be used to draw textures.



spriteBatch = new SpriteBatch(GraphicsDevice);



TextureImmagine = Content.Load<Texture2D>("Pallone");







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



}





A questo punto non ci resta che creare un metodo che permetta di impostare la posizione della risorsa, nel caso che ci troviamo ai limiti dell’area gioco, cambia le informazioni relative alla posizione.



Qui di seguito si riporta il codice d’esempio.




void MovimentoRisorsa(GameTime gameTime)



{



//imposta la posizione



Posizione +=



Velocita * (float)gameTime.ElapsedGameTime.TotalSeconds;





int MaxX =



graphics.GraphicsDevice.Viewport.Width - TextureImmagine.Width;



int MinX = 0;



int MaxY =



graphics.GraphicsDevice.Viewport.Height - TextureImmagine.Height;



int MinY = 0;





//imposto la posizione, nel caso che ho raggiunto il limite dell'area, imposto il cambiamento



if (Posizione.X > MaxX)



{



Velocita.X *= -1;



Posizione.X = MaxX;



}





else if (Posizione.X < MinX)



{



Velocita.X *= -1;



Posizione.X = MinX;



}





if (Posizione.Y > MaxY)



{



Velocita.Y *= -1;



Posizione.Y = MaxY;



}





else if (Posizione.Y < MinY)



{



Velocita.Y *= -1;



Posizione.Y = MinY;



}



}





Questo metodo, lo dobbiamo inserire nell’evento “Update” passando l’oggetto “GameTime”
Si riporta il codice del metodo update.




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



MovimentoRisorsa(gameTime);



base.Update(gameTime);



}



Ora non ci resta che modificare il metodo “Draw” per visualizzare il nuovo oggetto.



Tramite l’oggetto “SpriteBatch” impostiamo la visualizzazione a video.
Il metodo “Begin” ed “End” permettono rispettivamente di aggiornare la visualizzazione, mentre il metodo “Draw” di visualizzare la risorsa a video, passando, tre parametri, quali l’oggetto risorsa, la posizione ed il colore.
Qui di seguito l’esempio di codice per l’evento “Draw”.



protected override void Draw(GameTime gameTime)



{



GraphicsDevice.Clear(Color.CornflowerBlue);





// TODO: Add your drawing code here



spriteBatch.Begin();



spriteBatch.Draw(TextureImmagine, Posizione, Color.CornflowerBlue);



spriteBatch.End();



base.Draw(gameTime);



}




Si riporta il codice completo di tutto il gioco.



using System;



using System.Collections.Generic;



using System.Linq;



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.Media;





namespace XnaMovimento



{



/// <summary>



/// This is the main type for your game



/// </summary>



public class Game1 : Microsoft.Xna.Framework.Game



{



GraphicsDeviceManager graphics;



SpriteBatch spriteBatch;







//gestione della risorsa



Texture2D TextureImmagine;



//posizione della risorsa



Vector2 Posizione = Vector2.Zero;



//velocità



Vector2 Velocita = new Vector2(170.0f, 170.0f);



public Game1()



{



graphics = new GraphicsDeviceManager(this);



Content.RootDirectory = "Content";



}





/// <summary>



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



/// </summary>



protected override void Initialize()



{



// TODO: Add your initialization logic here





base.Initialize();



}





/// <summary>



/// LoadContent will be called once per game and is the place to load



/// all of your content.



/// </summary>



protected override void LoadContent()



{



// Create a new SpriteBatch, which can be used to draw textures.



spriteBatch = new SpriteBatch(GraphicsDevice);



TextureImmagine = Content.Load<Texture2D>("Pallone");







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



}





/// <summary>



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



/// all content.



/// </summary>



protected override void UnloadContent()



{



// TODO: Unload any non ContentManager content here



}





/// <summary>



/// Allows the game to run logic such as updating the world,



/// checking for collisions, gathering input, and playing audio.



/// </summary>



/// <param name="gameTime">Provides a snapshot of timing values.</param>



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



MovimentoRisorsa(gameTime);



base.Update(gameTime);



}





void MovimentoRisorsa(GameTime gameTime)



{



//imposta la posizione



Posizione +=



Velocita * (float)gameTime.ElapsedGameTime.TotalSeconds;





int MaxX =



graphics.GraphicsDevice.Viewport.Width - TextureImmagine.Width;



int MinX = 0;



int MaxY =



graphics.GraphicsDevice.Viewport.Height - TextureImmagine.Height;



int MinY = 0;





//imposto la posizione, nel caso che ho raggiunto il limite dell'area, imposto il cambiamento



if (Posizione.X > MaxX)



{



Velocita.X *= -1;



Posizione.X = MaxX;



}





else if (Posizione.X < MinX)



{



Velocita.X *= -1;



Posizione.X = MinX;



}





if (Posizione.Y > MaxY)



{



Velocita.Y *= -1;



Posizione.Y = MaxY;



}





else if (Posizione.Y < MinY)



{



Velocita.Y *= -1;



Posizione.Y = MinY;



}



}









/// <summary>



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



/// </summary>



/// <param name="gameTime">Provides a snapshot of timing values.</param>



protected override void Draw(GameTime gameTime)



{



GraphicsDevice.Clear(Color.CornflowerBlue);





// TODO: Add your drawing code here



spriteBatch.Begin();



spriteBatch.Draw(TextureImmagine, Posizione, Color.CornflowerBlue);



spriteBatch.End();



base.Draw(gameTime);



}



}



}





Conclusioni
Si è visto come applicare ad una risorsa, e precisamente un file immagine, la possibilità di spopstarlo nell'area di gioco, impostando le coordinate e la velocità, utile nel caso che si vuole creare un video gioco con oggetti in movimento.

?>

posted on martedì 7 febbraio 2012 23.23