Visual Basic Bewegung und Schießen?

...komplette Frage anzeigen

2 Antworten

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.

Antwort bewerten Vielen Dank für Deine Bewertung
maijonix 09.06.2016, 22:21

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 ?

0
CrystalixXx 10.06.2016, 17:32
@maijonix

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.

0
maijonix 10.06.2016, 19:37
@CrystalixXx

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.

0
CrystalixXx 11.06.2016, 18:06
@maijonix

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.

0
maijonix 11.06.2016, 20:17
@CrystalixXx

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 ?! 

0
CrystalixXx 11.06.2016, 21:05
@maijonix

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

1
maijonix 12.06.2016, 09:58
@CrystalixXx

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

0

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

Antwort bewerten Vielen Dank für Deine Bewertung
maijonix 09.06.2016, 18:39

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 ?! 

0
Dereta 09.06.2016, 18:58

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

0
maijonix 09.06.2016, 19:24
@Dereta

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 ... 

0
CrystalixXx 09.06.2016, 19:44
@maijonix

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?

0
Dereta 09.06.2016, 21:16

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

0
maijonix 10.06.2016, 19:38
@Dereta

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

0

Was möchtest Du wissen?