Problem beim Blitten eines Bildes (VB.NET)

Shogoki92

Mitglied
Hallo ich habe folgendes Problem: Ich hab ein Bild das ich in ein Surface Blitte
und dann will ich es per Tastendruck bewegen. Doch wenn ich die Taste drücke passiert nichts da sich anscheinend mein Surface nicht refreshed. Wenn ich das Fenster ausserhab des Desktopbereichs ziehe und wieder rein dann ist die Veränderung plötzlich sichtbar.

Ich benutze die SDL.NET lib

Hier mein Code:

Code:
Imports SdlDotNet.Graphics
Imports SdlDotNet.Input
Imports SdlDotNet.Core
Class Form1

    Dim screen, image As Surface

    Dim sprite1, sprite2 As Sprites.Sprite
    Public even As SdlDotNet.Core.Events
    Dim dst, dstblue, test As Rectangle
    Dim picX As Integer = 50, picY As Integer = 50
    Dim color As New Color
 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        image = New Surface(My.Resources.erde)
        test = New Rectangle(77, 77, image.Width, image.Height)
        dst = New Rectangle(picX, picY, image.Width, image.Height)
        dstblue = New Rectangle(picX, picY, image.Width, image.Height)
        color = New Color
        color = Drawing.Color.Green
        screen = Video.SetVideoMode(640, 480, 32, True, False, False, True)
        screen.Fill(color)
        screen.Blit(image, dst)

    End Sub


    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Me.Hide()
        AddHandler SdlDotNet.Core.Events.KeyboardDown, AddressOf keyd
        SdlDotNet.Core.Events.Run()
        Return
    End Sub

    Sub keyd(ByVal sender As Object, ByVal e As KeyboardEventArgs)
        If e.Key = Key.DownArrow Then
            If picY < 470 - image.Height Then
                picY = picY + 1

            End If
        ElseIf e.Key = Key.UpArrow Then
            If picY > 10 Then
                picY = picY - 1
            End If
        ElseIf e.Key = Key.LeftArrow Then
            If picX > 10 Then
                picX = picX - 1
            End If
        ElseIf e.Key = Key.RightArrow Then
            If picX < 630 - image.Width Then
                picX = picX + 1
            End If
        End If

        dst.X = picX
        dst.Y = picY
        screen.Fill(color.Green)
        screen.Blit(image, dst)

    End Sub

End Class


hoffe ihr könnt mir weiterhelfen.

Schonmal Danke im vorraus

MfG Shogoki92
 
Ruf am Ende des Keyd Ereignisses Form1.Invalidate auf. Damit sagst du der Form das es sich neu darstellen soll.
Alternative kannst du mit Form1.Refresh auch sofort das neuzeichnen erzwingen.
 
Danke für die Hilfe aber ich Habs schon selber hinbekommen. Und zwar so:

Code:
 Sub keyd(ByVal sender As Object, ByVal e As KeyboardEventArgs)
        If e.Key = Key.DownArrow Then
            If picY < 470 - image.Height Then
                picY = picY + 1

            End If
        ElseIf e.Key = Key.UpArrow Then
            If picY > 10 Then
                picY = picY + 1
            End If
        ElseIf e.Key = Key.LeftArrow Then
            If picX > 10 Then
                picX = picX - 1
            End If
        ElseIf e.Key = Key.RightArrow Then
            If picX < 630 - image.Width Then
                picX = picX + 1
            End If
        End If
      

        dst.X = picX
        dst.Y = picY
        dstblue.Y = picY
        dstblue.X = picX

        screen.Fill(dstblue, Drawing.Color.Black)

        screen.Blit(image, dst)
        screen.Update(dst)


    End Sub


ich habe einfach scrreen.update(dst) ganz unten hingeschrieben. So funktionierts ^^

Aber Trotzdem Danke
 

Neue Beiträge

Zurück