piccolo errore in c# banale
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 3 di 3

Discussione: piccolo errore in c# banale

Cambio titolo
  1. #1
    Daedroth
    Ospite

    piccolo errore in c# banale

    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&#224;;
    posizioneproiettile.X += velocit&#224;;
    }
    if (stato_tastiera.IsKeyDown(Keys.A))
    {
    posizione.X -= velocit&#224;;
    posizioneproiettile.X -= velocit&#224;;
    }
    if (stato_tastiera.IsKeyDown(Keys.S))
    {
    posizione.Y += velocit&#224;;
    posizioneproiettile.Y += velocit&#224;;
    }
    if (stato_tastiera.IsKeyDown(Keys.W))
    {
    posizione.Y -= velocit&#224;;
    posizioneproiettile.Y -= velocit&#224;;
    }
    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 &#232; 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 &#232; premuto... (per far scomparire il proiettile l'unica cosa che mi &#232; 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&#232; 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 &#232; 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 &#232; 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&#224; viene spostata da fuori schermo sopra l'immagine di mad)...

    scusate ora mi rendo conto che non &#232; facile capire che ho scritto cmq spero mi possiate aiutare

    un altra cosa... dove posso trovare esercizi di c#?
    Ultima modifica di Daedroth; 30-10-2008 alle 22:56:28

  2. #2
    XD:| L'avatar di diablosoftware
    Registrato il
    10-05
    Messaggi
    3.724
    Vedo che usi xna
    Comunque per la collisione al posto di fare
    Codice:
    if (posizioneproiettile.X >= 600 & posizioneproiettile.Y >= 350 & posizioneproiettile.Y <= 382 & posizioneproiettile.X <= 632)
    fai
    Codice:
    if (posizioneproiettile.X>599 && posizioneproiettile.X<651)
    {
    if (posizioneproiettile.Y>349&&posizioneproiettile.Y<383){
    
    }
    }
    Può sembrare strano, ma mettendo tutto in un if ho avuto molte volte problemi a controllare le collisioni.

    Per il resto ti consiglio di usare le classi per cui l'oggetto mad può essere cancellato a piacimento, in quanto dopo lo disegni e lo controlli con cicli foreach.

  3. #3
    Utente L'avatar di marcelloma
    Registrato il
    01-08
    Località
    Palermo
    Messaggi
    4.083
    Per farlo scomparire di solito un metodo che si usa e' una variabile booleana "visibile = true/false", e l'oggetto viene disegnato solo se visibile == true ovviamente.

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •