Esporta (0) Stampa
Espandi tutto

Creare uno sfondo scorrevole

XNA Game Studio 4.0
Illustra come tracciare uno sprite di sfondo scorrevole utilizzando la classe SpriteBatch.

Esempio completo

La tecnica è illustrata dal codice disponibile in questo argomento. È possibile scaricare un esempio di codice completo per questo argomento, incluso il codice sorgente completo ed eventuali file di supporto aggiuntivi necessari per l'esempio.

Tracciare uno sprite di sfondo scorrevole

Per tracciare uno sprite di sfondo scorrevole

  1. Creare la classe del gioco.

  2. Caricare le risorse come illustrato nelle procedure di Tracciare uno sprite.

  3. Caricare la trama dello sfondo.

    private ScrollingBackground myBackground;
    protected override void LoadContent()
    {
        // Create a new SpriteBatch, which can be used to draw textures.
        spriteBatch = new SpriteBatch(GraphicsDevice);
        myBackground = new ScrollingBackground();
        Texture2D background = Content.Load<Texture2D>("starfield");
        myBackground.Load(GraphicsDevice, background);
    }
    
  4. Determinare le dimensioni della trama dello sfondo e le dimensioni dello schermo.

    Le dimensioni della trama vengono determinate tramite le proprietà Height e Width e le dimensioni dello schermo vengono determinate tramite la proprietà Viewport sul dispositivo grafico.

  5. Utilizzando le informazioni relative a trama e schermo, impostare l'origine della trama sul centro del margine superiore della trama e la posizione iniziale sullo schermo sul centro dello schermo.

    // class ScrollingBackground
    private Vector2 screenpos, origin, texturesize;
    private Texture2D mytexture;
    private int screenheight;
    public void Load( GraphicsDevice device, Texture2D backgroundTexture )
    {
        mytexture = backgroundTexture;
        screenheight = device.Viewport.Height;
        int screenwidth = device.Viewport.Width;
        // Set the origin so that we're drawing from the 
        // center of the top edge.
        origin = new Vector2( mytexture.Width / 2, 0 );
        // Set the screen position to the center of the screen.
        screenpos = new Vector2( screenwidth / 2, screenheight / 2 );
        // Offset to draw the second texture, when necessary.
        texturesize = new Vector2( 0, mytexture.Height );
    }
    
  6. Per scorrere lo sfondo, cambiare la posizione sullo schermo della trama dello sfondo nel metodo Update.

    Questo esempio sposta lo sfondo verso il basso di 100 pixel al secondo, incrementando il valore Y della posizione sullo schermo.

    protected override void Update(GameTime gameTime)
    {
        ...
        // The time since Update was called last.
        float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
    
        // TODO: Add your game logic here.
        myBackground.Update(elapsed * 100);
    
        base.Update(gameTime);
    }
    

    Il valore Y non deve essere maggiore dell'altezza della trama, in modo che lo sfondo scorra dal basso dello schermo e di nuovo all'inizio dello schermo.

    public void Update( float deltaY )
    {
        screenpos.Y += deltaY;
        screenpos.Y = screenpos.Y % mytexture.Height;
    }
    // ScrollingBackground.Draw
    
  7. Tracciare lo sfondo utilizzando l'origine e la posizione sullo schermo calcolate in LoadContent e Update.

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
    
        spriteBatch.Begin();
        myBackground.Draw(spriteBatch);
        spriteBatch.End();
    
        base.Draw(gameTime);
    }
    

    Nel caso in cui la trama non copra lo schermo, viene tracciata un'altra trama. In questo modo l'altezza della trama viene sottratta dalla posizione sullo schermo, utilizzando il vettore texturesize creato in fase di caricamento. Viene quindi creata l'illusione di un ciclo.

    public void Draw( SpriteBatch batch )
    {
        // Draw the texture, if it is still onscreen.
        if (screenpos.Y < screenheight)
        {
            batch.Draw( mytexture, screenpos, null,
                 Color.White, 0, origin, 1, SpriteEffects.None, 0f );
        }
        // Draw the texture a second time, behind the first,
        // to create the scrolling illusion.
        batch.Draw( mytexture, screenpos - texturesize, null,
             Color.White, 0, origin, 1, SpriteEffects.None, 0f );
    }
    

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2015 Microsoft