Frage von maijonix, 75

Visual Basic Bewegung und Schießen?

Hallo ich habe ein problem in Bisual Basic und zwar: Ich lasse neine spielfigut von der draufsicht nach links rechts oben unten bewegen nun will ich dass wenn ich leertaste drücke diese figur dann in die richtung schießt, in die sie schaut... ich schaffe es leider nicht selbst und bin schon seit 3 monaten dran. Das problem ist glaube das ich in dem case move up und so dann keine e.Keycode events nutzen kann und ich muss das irgendwie anders bewältigen an einer anderen stelle im code.

vielen dank schonmal für eure vorschläge :D !

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von CrystalixXx, 35

Ich habe keine Vorstellungen von deinem bisherigen Code, deswegen kann ich auch nur raten, ob der Programmcode dein Problem trifft. Jedenfalls habe ich da mal etwas ganz einfaches zusammengeschrieben.

Private SpielerRichtung As Integer = 1
Private GeschossRichtung As Integer

Private Sub frmTest_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Dim Schrittweite As Integer = 3

Select Case e.KeyCode
Case Keys.Up
PictureBox1.Top -= Schrittweite
SpielerRichtung = 1
Case Keys.Right
PictureBox1.Left += Schrittweite
SpielerRichtung = 2
Case Keys.Down
PictureBox1.Top += Schrittweite
SpielerRichtung = 3
Case Keys.Left
PictureBox1.Left -= Schrittweite
SpielerRichtung = 4
Case Keys.Space
If Not timerGeschoss.Enabled Then
PictureBox2.Location = PictureBox1.Location
PictureBox2.Visible = True
timerGeschoss.Enabled = True
GeschossRichtung = SpielerRichtung
End If
End Select
End Sub

Private Sub timerGeschoss_Tick(sender As System.Object, e As System.EventArgs) Handles timerGeschoss.Tick
Dim Schrittweite As Integer = 13

Select Case GeschossRichtung
Case 1
PictureBox2.Top -= Schrittweite
Case 2
PictureBox2.Left += Schrittweite
Case 3
PictureBox2.Top += Schrittweite
Case 4
PictureBox2.Left -= Schrittweite
End Select

If PictureBox2.Top < 0 OrElse PictureBox2.Top > Me.Height OrElse PictureBox2.Left < 0 OrElse PictureBox2.Left > Me.Width Then
PictureBox2.Visible = False
timerGeschoss.Enabled = False
End If
End Sub

Du brauchst dafür eine Form mit zwei PictureBox-Steuerelementen (PictureBox1 für die Spielfigur und PictureBox2 für das Geschoss) und einem Timer (timerGeschoss). Der Programmcode ist aber nur als Anregung zu sehen. Sauberer Programmierstil ist das jedenfalls nicht.

Kommentar von maijonix ,

Hey vielen Danke fast so sieht mein code auch aus nur das der Spiel Bereich definiert ist und die case Halt extra habe aber soviel dazu

Hierzu eine frage ich habe 2 timer und und panels benutzt du hat alles in einem timer was mega gut ist ich wusste Nr nicht wie ich es realisieren soll also die Frage bewegt sich jetzt beides und kann das Geschoss sich schneller bewegen ?

Kommentar von CrystalixXx ,

Das Geschoss bewegt sich selbstständig (deswegen der Timer). Die Geschwindigkeit des Geschosses kannst du festlegen durch die Interval-Eigenschaft von "timerGeschoss". Die Schrittweite gibst du in der Variablen "Schrittweite" an. Steht das Interval des Timers auf 1000 und die Schrittweite auf 3, dann bewegt sich dein Geschoss um 3 Pixel pro Sekunde.

Die Spielfigur bewegt sich nur bei Tasteneingabe (daher das KeyDown-Ereignis).

Du kannst also das Geschoss mit der Leertaste abschießen und die Spielfigur gleich danach wieder bewegen. Eine Einschränkung ist allerdings hierbei, dass du nur ein Geschoss gleichzeitig aktiv haben kannst. Daher die If-Abfrage im Fall der gedrückten Leertaste.

Kommentar von maijonix ,

If e.KeyCode = Keys.Space Then
Geschoss.Parent = Me
Geschoss.Visible = True
Geschoss.BackColor = Color.Yellow
Geschoss.Location = New Point(AffeBlau.Location.X + 20, AffeBlau.Location.Y + 20)
Geschoss.Size = New Size(10, 10)
x = AffeBlau.Location.X
y = AffeBlau.Location.Y
End If

Ich wollte hier die space taste abfraen um beim drücken der taste die location des geschosses zu bestimmen und habe versucht diese auszulagern. Aber wenn ich den spieler webege bewegt sich das geschoss mit in die richtung des Spielers.

Kommentar von CrystalixXx ,

Wo steht denn dieser Code? Die Bewegung des Geschosses erfolgt im Timer, nirgends sonst. Sonst passiert es eben, wie du es schilderst, dass sich das Geschoss anders verhält, als es soll.

Kommentar von maijonix ,

Dieser code steht im key down event um zu der space druck zeit die position zu bestimmen und diese zu speichern in dem timer bei den cases kommt dann die bewegung 

sprich das ist nicht die bewegung nur die abfrage der position und dann in die mitte mit +20 x und y das panel geschoben und dann soll die position danach wieder abgefragt werden und gespeichert in x und y um nur die position zu speichern die bei der space taste druck, das panel hat. Soweit klappt es aber ich kann dann komischerweise mit dern Pfeiltasten mit denen ich auch den user steuerplötzlich das flugobjekt steuern obwohl ich doch im code die position nur dann abfrage wenn space gedrückt wird aber wird sie ja dann nicht mehr ....

hierzu eine andere frage was wenn ich dem timer nur noch für das flugobjekt nutze und ein press event für die bewegung nehme um dann das komplett auseinander zu haben ?! würde das was ändern ?! 

Kommentar von CrystalixXx ,

Du könntest ja mal deinen gesamten Code schicken. Irgendwo scheinst du da im Timer etwas durcheinander gebracht zu haben.

Kommentar von maijonix ,

können wir das über eine andere platform machen ?! oder über email verkehr ?! 

Antwort
von Dereta, 56

Pseudocde:
int playerDir = 0;
/*
0 hoch
1 rechts
2 runter
3 links
Je nach tasten abfrage setzen
*/
if (Leertaste && playerDir == 0)
KugelMotion[x] -= 1
Etcpp

Kommentar von maijonix ,

Hey es hat geklappt :D danke...komisch ich habe immer total kompliziert gedacht :/ 

aber jetzt ist ein neues problem entstanden :D und zwar
Wenn die sich bewegende picture box (mit timer) sich bewegt und dann das geschoss sich bewegen soll (ebenfalls mit timer) stopp beim schießen die figut wo sich bewegt ... bekomme ich das denn irgendwie weg ?! 

Kommentar von Dereta ,

parallele timer.. Ist mit vb net aber nicht so wirklich das wahre

Kommentar von CrystalixXx ,

Parallele Timer oder die Spieleentwicklung?

Kommentar von maijonix ,

warum und wie realisiere ich das habe insgesamt 3 timer für zeit, die bewegung der figur und jetzt für das geschoss ...die zeit muckt nicht auf nur der eine timer stopt wenn der andere dazwischen funkt ... 

Kommentar von CrystalixXx ,

Wie bewegt sich denn die Spielfigur? Drücke ich einmal die Richtungstaste und dann läuft die Spielfigur selbstständig bis zu einer definierten Grenze oder einem Richtungswechsel oder bewegt sie sich nur um eine definierte Anzahl Pixel pro Tastendruck?

Kommentar von maijonix ,

Ja genau ein mal und das teil läuft :D 

Kommentar von Dereta ,

Ich glaube eher sie läuft ohne Beschränkung. Aber nur solange taste gedrückt. Also auch keine feste Pixel Zahl pro frame... Da ich denke es keine fps Beschränkung gibt. Zumindest hört es sich bis jetzt so an

Kommentar von maijonix ,

Sie läuft selbständig mit einer begrenzung :D 

Keine passende Antwort gefunden?

Fragen Sie die Community