Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 00:28

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB2010]Shoot 'Em Up Schussfunktion

Discussion on [VB2010]Shoot 'Em Up Schussfunktion within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2010
Posts: 14
Received Thanks: 0
[VB2010]Shoot 'Em Up Schussfunktion

Guten Abend,
ich probiere nun seit gut 2 Stunden bei einem Shoot 'Em Up Game eine einfache Funktion einzubauen, um auf Gegner in dem Spiel zu schießen.

Die abgefeuerte Kugel soll sich zu den Koordinaten des Mauszeigers bewegen, die beim Zeitpunkt des Klicks abgespeichert werden.

Ich habe versucht das ganze über eine lineare Funktion zu lösen die zwischen den zwei Punkten verläuft, also zwischen dem Abschusspunkt und dem Mauszeiger, aber leider macht die Kugel danach irgendwas, aber nicht was sie eigentlich machen sollte.

Desweiteren ist mir aufgefallen, dass es dabei zu Problemen kommen würde falls man die gleichen X-Koordinaten oder Y-Koordinaten hat.

Falls mein Ansatz das Problem über ne lineare Funktion zu lösen falsch ist oder es einen besseren gibt, würde ich mich freuen wenn mir jemand diese Lösung verraten würde.

Anbei noch der Code für die Berechnung der lineare Funktion, also bei y = m * x + t wird m und t berechnet und wie anschließend daraus die neuen X- bzw. Y-Werte für die Kugel bestimmt werden.

Code:
    Private Sub lineareFunktion()
        mouseX = MousePosition.X
        mouseY = MousePosition.Y

        playerX = Player.Location.X
        playerY = Player.Location.Y

        entfernung = mouseX - playerX

        If entfernung < 0 Then
            entfernung = -entfernung
        End If

        If entfernung <> 0 Then
            m = (mouseY - playerY) / entfernung
        End If

        t = playerY - (m * playerX)

        newX = playerX
        newY = playerX
    End Sub

    Private Sub KugelMovement()
        If entfernung = 0 Then
            If Kugel.Location.Y < mouseY Then
                Kugel.Location = New Point(Kugel.Location.X, Kugel.Location.Y + speed)
                mouseY = mouseY + speed
            End If
            If Kugel.Location.Y > mouseY Then
                Kugel.Location = New Point(Kugel.Location.X, Kugel.Location.Y - speed)
                mouseY = mouseY - speed
            End If
        Else
            If Kugel.Location.X < mouseX Then
                newX = newX + speed
            Else
                newX = newX - speed
            End If
            newY = m * newX + t
        End If
    End Sub
ravvon is offline  
Old 12/01/2013, 11:36   #2
 
elite*gold: 0
Join Date: Jan 2010
Posts: 14
Received Thanks: 0
Habe den Fehler gefunden.

MousePosition.X bzw .Y gibt die Koordinaten über den gesamten Bildschirm wieder und nicht innerhalb des Fensters.
Also musste ich von diesem Wert noch die Entfernung des Fenster zum Bildschirmrand subtrahieren.

Jetzt habe ich versucht die Schüsse über ein Array zu regeln, sobald ich jedoch eine For-Schleife zum erstellen der PictureBoxes aufrufen möchte bleibt das Programm einfach hängen und nichts mehr passiert.
Es gibt jedoch keine Fehlermeldung oder ähnliches sondern das Programm lädt einfach ewig obwohl die For-Schleife nur 3mal durchlaufen soll, wobei die Anzahl an Durchläufen völlig egal ist denn sie hängt sich bei jeglicher Größe auf.
Desweiteren ist auch der Inhalt der For-Schleife egal, denn selbst wenn ich jeglichen Inhalt auskommentiere hängt sich das Programm sobald die For-Schleife aufgerufen wird auf, funktioniert jedoch wenn die For-Schleife nie aufgerufen wird.

Hier noch der Code der For-Schleife:
Code:
Dim Shot(2) As PictureBox

Private Sub initShots()
        For i As Integer = 0 To 2 Step ++i
            Shot(i) = New PictureBox With { _
                .Size = New Size(12, 12),
                .Image = My.Resources.shot,
                .Location = New Point(0, 0),
                .Visible = False,
                .Enabled = False
            }
            Me.Controls.Add(Shot(i))
        Next
    End Sub
ravvon is offline  
Old 12/01/2013, 19:07   #3
 
DeinMud's Avatar
 
elite*gold: 0
Join Date: Jan 2010
Posts: 990
Received Thanks: 127
benutz GDI+ für Spiele
oder noch besser sowas wie SharpDX
DeinMud is offline  
Thanks
1 User
Old 12/07/2013, 12:04   #4
 
elite*gold: 0
Join Date: Jan 2010
Posts: 14
Received Thanks: 0
Alles klar, danke für den Tipp ich werds mir mal anschauen.
ravvon is offline  
Reply




All times are GMT +1. The time now is 00:30.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.