Casino online









Mercato forex






A3. Gestire l'input


L'ultimo risultato ottenuto è l'immagine della mazza su uno sfondo bianco... non molto entusiasmante come cosa. Perciò ora sarebbe utile gestire l'input della tastiera, per consentire il movimento dell'oggetto Bat alla pressione delle frecce direzionali destra e sinistra. Come avevo già accennato, la gestione dell'input avviene nel metodo Update. Per rendere le cose più ordinate, creiamo due nuovi membri all'interno della classe Game da noi definita:
Imports Microsoft.Xna.Framework
Imports Microsoft.Xna.Framework.Input
Imports Microsoft.Xna.Framework.Graphics

Public Class Game
    Inherits Microsoft.Xna.Framework.Game

    Private Graphics As GraphicsDeviceManager
    Private Batch As SpriteBatch

    'BatSpeed rappresenta la velocità della mazza.
    '3 è un buon valore, magari un po' lento
    Private BatSpeed As Single = 3

    Private Bat As GameObject

    Private Function GetTexture(ByVal Name As String) As Texture2D
        Return Texture2D.FromFile(Me.Graphics.GraphicsDevice, _
            My.Application.Info.DirectoryPath & "\" & Name)
    End Function

    'Controlla lo stato della tastiera e vede quali pulsanti sono
    'premuti
    Private Sub KeyboardCheck()
        'Ottiene lo stato della tastiera.
        'GetState() è una funzione statica della
        'classe Keyboard, che restituisce lo stato dela tastiera
        Dim KeyState As KeyboardState = Keyboard.GetState

        'Se è premuto il tasto direzionale destro,
        'si sposta a destra
        If KeyState.IsKeyDown(Keys.Right) Then
            'Notare che i Vector2 supportano l'operatore +.
            'La somma viene eseguita come una normale somma
            'di vettori: in questo caso, il vettore velocità
            'è orizzontale, perciò manca della componente Y
            Bat.Position += New Vector2(BatSpeed, 0)
        End If
        'Se è premuto il tasto direzionale sinistro,
        'si sposta a sinistra
        If KeyState.IsKeyDown(Keys.Left) Then
            Bat.Position += New Vector2(-BatSpeed, 0)
        End If
        'Se è premuto Esc, esce
        If KeyState.IsKeyDown(Keys.Escape) Then
            'Exit() è il metodo che permette di
            'terminare il gioco
            Me.Exit()
        End If

        'KeyState espone anche la funzione IsKeyUp,
        'per controllare se un tasto NON è premuto
    End Sub

    Sub New()
        Me.Graphics = New GraphicsDeviceManager(Me)
        Me.Content.RootDirectory = "Content"
    End Sub

    Protected Overrides Sub Initialize()
        Batch = New SpriteBatch(Me.Graphics.GraphicsDevice)
        MyBase.Initialize()
    End Sub

    Protected Overrides Sub LoadContent()
        MyBase.LoadContent()

        Bat = New GameObject(GetTexture("Bat.png"))
        Bat.Position = New Vector2( _ 
            Me.Graphics.GraphicsDevice.Viewport.Width / 2, _
            Me.Graphics.GraphicsDevice.Viewport.Height - 40)
    End Sub

    Protected Overrides Sub UnloadContent()
        MyBase.UnloadContent()
    End Sub

    Protected Overrides Sub Update(ByVal GameTime As GameTime)
        'Controlla i tasti premuti
        KeyboardCheck()

        MyBase.Update(GameTime)
    End Sub

    Protected Overrides Sub Draw(ByVal gameTime As GameTime)
        Me.Graphics.GraphicsDevice.Clear(Color.White)

        Batch.Begin()

        Bat.Draw(Batch)

        Batch.End()

        MyBase.Draw(gameTime)
    End Sub
End Class 
Dopo aver fatto correre il programma, si vede la stessa schermata bianca, ma premendo i tasti direzionali destra o sinistra, la mazza si sposta sullo schermo.
Avere la schermata bianca, tuttavia, è un po' deprimente. Facciamo in modo di mettere un sfondo adatto, un po' colorito, magari, come questo:


Chaos - trovato su Google

Salvate l'immagine sempre in bin\Debug. Per lo sfondo, dichiariamo una nuova variabile Background (sempre di tipo GameObject):
Public Class Game
    '...

    Private Background As GameObject

    '...

    Protected Overrides Sub LoadContent()
        MyBase.LoadContent()

        'Inizializza l'oggetto caricando il suo sprite
        'dalla cartella del programma
        Background = New GameObject(GetTexture("Background.png"))
        'Dato che lo sfondo sarà grande come tutta la
        'finestra, per posizionarlo esattamente al centro
        'bisogna impostare Position = Center.
        'Ricordate che Center viene calcolato dal mio codice
        'nel corpo del costruttore New
        Background.Position = Background.Center

        'Tuttavia, avrete notato che la finestra ha dimensioni
        'più piccole dello sfondo che useremo, perciò
        'bisogna ridimensionarla.
        
        'Dichiara un nuovo Viewport. La classe Viewport è
        'praticamente uguale a Rectangle
        Dim Size As New Viewport
        'Imposta le dimensioni
        Size.Width = Background.Sprite.Width
        Size.Height = Background.Sprite.Height
        Size.X = 0
        Size.Y = 0
        'Assegna Size alla proprietà Viewport di GraphicsDevice
        Me.Graphics.GraphicsDevice.Viewport = Size
        'Poi cambia le impostazioni predefinite per la dimensione
        Me.Graphics.PreferredBackBufferHeight = Size.Height
        Me.Graphics.PreferredBackBufferWidth = Size.Width
        'E quindi applica i cambiamenti
        Me.Graphics.ApplyChanges()

        Bat = New GameObject(GetTexture("Bat.png"))
        Bat.Position = New Vector2( _ 
            Me.Graphics.GraphicsDevice.Viewport.Width / 2, _
            Me.Graphics.GraphicsDevice.Viewport.Height - 40)
    End Sub
    
    '...
    
    Protected Overrides Sub Draw(ByVal gameTime As GameTime)
        Me.Graphics.GraphicsDevice.Clear(Color.White)

        Batch.Begin()

        'Disegna lo sfondo, prima di tutto il resto
        Background.Draw(Batch)
        Bat.Draw(Batch)

        Batch.End()

        MyBase.Draw(gameTime)
    End Sub
End Class 



La mazza si muove sullo sfondo






 

The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.