Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0464: Verzögerte Mausverfolgung und Tastatursteuerung

 von 

Beschreibung 

Ein Shape kann mit der Maus an einen Punkt bewegt werden. Dies geschieht weich. Genauso auch mit der Tastatur über die Pfeiltasten. Ideal als Grundlage für einfache Spiele.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

GetAsyncKeyState

Download:

Download des Beispielprojektes [2,17 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'----------- Anfang Projektdatei MausTastatur.vbp -----------
'------ Anfang Formular "Form1" alias MausTastatur.frm ------
' Steuerelement: Timersteuerelement "Timer1"
' Steuerelement: Figur-Steuerelement "Spieler"
'egoweb@swissonline.ch

Option Explicit
Dim XA As Long
Dim YA As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
    XA = x 'Koordinaten des Mausklicks auslesen
    YA = Y
End Sub

Private Sub Timer1_Timer() 'Bewegung der Spielfigur
    Static x As Long, Y As Long
    Static KeyPressedX As Boolean, KeyPressedY As Boolean
    Static KeyPressedXDelay As Long, KeyPressedYDelay As Long
    
    If KeyPressedXDelay <= 0 Then
        KeyPressedX = False
        KeyPressedXDelay = 100
    End If
    KeyPressedXDelay = KeyPressedXDelay - Timer1.Interval
    If KeyPressedYDelay <= 0 Then
        KeyPressedY = False
        KeyPressedYDelay = 100
    End If
    KeyPressedYDelay = KeyPressedYDelay - Timer1.Interval
    
    If GetAsyncKeyState(vbKeyLeft) Then
        If Not KeyPressedX Then XA = XA - 25
        KeyPressedX = True
    ElseIf GetAsyncKeyState(vbKeyRight) Then
        If Not KeyPressedX Then XA = XA + 25
        KeyPressedX = True
    Else
        KeyPressedX = False
    End If
    
    If GetAsyncKeyState(vbKeyUp) Then
        If Not KeyPressedY Then YA = YA - 25
        KeyPressedY = True
    ElseIf GetAsyncKeyState(vbKeyDown) Then
        If Not KeyPressedY Then YA = YA + 25
        KeyPressedY = True
    Else
        KeyPressedY = False
    End If
    
    If x <> XA Then
        If Abs(XA - x) < 5 Then x = XA
        x = x + (XA - x) * 0.25
    End If
    
    If Y <> YA Then
        If Abs(YA - Y) < 5 Then Y = YA
        Y = Y + (YA - Y) * 0.25
    End If
'    Me.Cls
'    Me.PSet (XA, YA), vbRed
    If Spieler.Left <> x Or Spieler.Top <> Y Then
        Spieler.Left = x - Spieler.Width / 2 'Mittig zentrieren... (auskommentiert)
        Spieler.Top = Y - Spieler.Height / 2
    End If
    
End Sub

'------- Ende Formular "Form1" alias MausTastatur.frm -------
'------------ Ende Projektdatei MausTastatur.vbp ------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von PowerBauer am 18.09.2007 um 15:40

Der Code funktioniert im Prinzip - mir ist nur nicht klar, warum die Bewegung nach links schneller verläuft als nach rechts - oder ist das nur bei mir so?

Grüße
PB