Codice:
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 WindowsGame1
{
publicclassGame1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D smile;
Texture2D proiettile;
Texture2D mad;
Texture2D esplosione;
Vector2 posizioneesplosione;
Vector2 posizionemad;
Vector2 posizioneproiettile;
Vector2 posizione;
Vector2 centro_immagine;
KeyboardState stato_tastiera;
float velocità;
public Game1()
{
graphics = newGraphicsDeviceManager(this);
Content.RootDirectory = "Content";
graphics.PreferredBackBufferWidth = 700;
graphics.PreferredBackBufferHeight = 700;
graphics.IsFullScreen = false;
}protectedoverridevoid Initialize()
{posizione = newVector2(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2);
posizioneproiettile = newVector2(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2);
posizionemad = newVector2(600, 350);
posizioneesplosione = newVector2(1000, 1000);
stato_tastiera = Keyboard.GetState();
velocità = 5f;
base.Initialize();
}
protectedoverridevoid LoadContent()
{spriteBatch = newSpriteBatch(GraphicsDevice);
smile = Content.Load<Texture2D>("Immagini/smile");
proiettile = Content.Load<Texture2D>("Immagini/proiettile");
esplosione = Content.Load<Texture2D>("Immagini/esplosione");
mad = Content.Load<Texture2D>("Immagini/mad");
centro_immagine = newVector2(smile.Width / 2, smile.Height / 2);}
protectedoverridevoid UnloadContent()
{}
protectedoverridevoid Update(GameTime gameTime)
{
stato_tastiera = Keyboard.GetState();
if (stato_tastiera.IsKeyDown(Keys.D))
{
posizione.X += velocità;
posizioneproiettile.X += velocità;
}
if (stato_tastiera.IsKeyDown(Keys.A))
{
posizione.X -= velocità;
posizioneproiettile.X -= velocità;
}
if (stato_tastiera.IsKeyDown(Keys.S))
{
posizione.Y += velocità;
posizioneproiettile.Y += velocità;
}
if (stato_tastiera.IsKeyDown(Keys.W))
{
posizione.Y -= velocità;
posizioneproiettile.Y -= velocità;
}
if (stato_tastiera.IsKeyDown(Keys.Space))
{
posizioneproiettile.X += 7;
}
if (posizioneproiettile.X >= 700)
{
posizioneproiettile.X = posizione.X;
}
if (stato_tastiera.IsKeyUp(Keys.Space))
{
posizioneproiettile.X = 1000;
}if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();if (posizioneproiettile.X >= 600 & posizioneproiettile.Y >= 350 & posizioneproiettile.Y <= 382 & posizioneproiettile.X <= 632)
{
posizioneesplosione =newVector2 (550, 300);
}
base.Update(gameTime);
}
protectedoverridevoid Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Deferred, SaveStateMode.SaveState);
spriteBatch.Draw(smile, posizione, null, Color.White, 0, centro_immagine, 1, SpriteEffects.None, 1);
spriteBatch.Draw(proiettile, posizioneproiettile, null, Color.White, 0, centro_immagine, 1, SpriteEffects.None, 1);
spriteBatch.Draw(mad, posizionemad, null, Color.White, 0, centro_immagine, 1, SpriteEffects.None, 1);
spriteBatch.Draw(esplosione, posizioneesplosione, null, Color.White, 0, centro_immagine, 1, SpriteEffects.None, 1);
spriteBatch.End();
base.Draw(gameTime);
}
}
}
sto cercando di impare il c# e sto ancora all'inizio... solo che ho trovato un errore che non riesco a capire... come potete vedere è un giochino molto semplice...
un oggetto (chiamato smile) che si muove sul piano con wasd... e un proiettile che parte dalla posizione della pallina se il tasto spazio è premuto... (per far scomparire il proiettile l'unica cosa che mi è venuta in mente era mettere che se lo spazio non fosse premuto me lo avrebbe disegnato fuori schermo...per poi rifarlo partire dalla posizione di smile quando premo spazio... potreste dirmi inc he altro modo potrei fare?)...
cmq quando il proiettile entra a contatto con mad che ha dimensioni 32x32 (da cui si capisce perchè queste cifre:
Codice:
if (posizioneproiettile.X >= 600 & posizioneproiettile.Y >= 350 & posizioneproiettile.Y <= 382 & posizioneproiettile.X <= 632)
600 e 350 sono la posizione di mad...
ora il problema è seguente...
nonostante gli dico di far comparire l'immagine esplosione sopra quella di mad ( ah un altra cosa... come faccio a far scomparire mad oltre che buttarlo fuori schermo? so solo cambiare la posizione e non eliminarlo) quando il proiettile è compreso tra 600/632 e 350/382...
quando il proiettile passa sotto l'immagine di mad (e non sopra, solo sotto) compare ugualmente l'esplosione... (come vedete dal codice l'esplosione non compare ma in realtà viene spostata da fuori schermo sopra l'immagine di mad)...
scusate ora mi rendo conto che non è facile capire che ho scritto cmq spero mi possiate aiutare
un altra cosa... dove posso trovare esercizi di c#?