Shooter problem!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

oki02

Betreff: Shooter problem!

BeitragFr, Nov 07, 2008 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte dass wenn ein Schuss den gegner berührt er "Kollision" hinschreibt.
Bitte um hilfe.

mfg Oki02

Hier mein code:

Graphics 640,480,32,2

SetBuffer BackBuffer()

Global Player = LoadImage ("Player.bmp")
Global Gegner = LoadImage ("Alien.bmp")
Global Feuer1 = LoadImage ("123.bmp")

Player_x = 300
Player_y = 430

Gegner_x = 200
Gegner_y = 0

Type Feuer
Field Feuer_x#
Field Feuer_y#
Field Test#
End Type

While Not KeyHit(1)



If KeyDown(203)
Player_x = Player_x - 5
If Player_x < 0 Then Player_x = 0
Feuer = False
EndIf

If KeyDown(205)
Player_x = Player_x + 5
If Player_x > 600 Then Player_x = 600
Feuer = False
EndIf


; Feuer

If KeyHit(57)
s.Feuer = New Feuer
s\Feuer_x = Player_x + 10
s\Feuer_y = Player_y
EndIf

For s.Feuer = Each Feuer
s\Feuer_y = s\Feuer_y - 8

DrawImage Feuer1,s\Feuer_x,s\Feuer_y
Next

DrawImage Player,Player_x,Player_y
DrawImage Gegner,Gegner_x,Gegner_y

Gegner_y = Gegner_y + 2
If Gegner_y > 480 Then Gegner_y = 0

If ImagesCollide ( Gegner,Gegner_x,Gegner_y,0,Feuer1,Feuer_x,Feuer_y,0 ) Then
Print "Kollision!"
End
EndIf

Flip
Cls
Wend
End
  • Zuletzt bearbeitet von oki02 am Sa, Nov 08, 2008 10:49, insgesamt 2-mal bearbeitet

ToeB

BeitragFr, Nov 07, 2008 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal :
Markiere deinen Code un klick dann auf den Button "Code", sieht schöner und übersichtliger aus Wink


Dein Problem ist : Print schreibt zwar was hin bei kollision, aber wird ja durch Cls darauf gelöscht, das heißt, man sieht es für max. 1 schleifendurchgang, also nicht sehr viel ... Kannst ja z.b. Arrays nehmen, die immer eine neue Zeile hinschreibt.

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Vulture

BeitragFr, Nov 07, 2008 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Problem ist einfach und hat mit den Print nichts zu tun .... Fehler liegt in der For Schleife

Und zwar hier :
Code: [AUSKLAPPEN]
For s.Feuer = Each Feuer
s\Feuer_y = s\Feuer_y - 8

DrawImage Feuer1,s\Feuer_x,s\Feuer_y
Next

DrawImage Player,Player_x,Player_y
DrawImage Gegner,Gegner_x,Gegner_y

Gegner_y = Gegner_y + 2
If Gegner_y > 480 Then Gegner_y = 0

If ImagesCollide ( Gegner,Gegner_x,Gegner_y,0,Feuer1,Feuer_x,Feuer_y,0 ) Then
Print "Kollision!"
End
EndIf


Muss so aussehen :
Code: [AUSKLAPPEN]
For s.Feuer = Each Feuer
s\Feuer_y = s\Feuer_y - 8

DrawImage Feuer1,s\Feuer_x,s\Feuer_y

If ImagesCollide ( Gegner,Gegner_x,Gegner_y,0,Feuer1,s\Feuer_x,s\Feuer_y,0 ) Then
Print "Kollision!"
End
EndIf
Next

DrawImage Player,Player_x,Player_y
DrawImage Gegner,Gegner_x,Gegner_y

Gegner_y = Gegner_y + 2
If Gegner_y > 480 Then Gegner_y = 0

 


Erklärung ist einfach du hast kein Feuer_X und Feuer_Y in dein code sonder nur in der Schleife als Type so muss es gehen !
User posted image
Projekte : TerraSE Terranigma - Break Up - Final Round - Survivor Elite - Sequence Basic
 

oki02

Betreff: Danke

BeitragFr, Nov 07, 2008 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnellen Antworten.
Ihr habt mir sehr geholfen.


mfg Oki02
 

oki02

Betreff: -

BeitragSa, Nov 08, 2008 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab noch eine kleine Frage .
warum erstellt er keinen Neuen Gegner auf ein X kordinate die Zufällig ist und löscht den "erschossenen" Gegner.

Bitte um Hilfe!

Code: [AUSKLAPPEN]

Graphics 640,480,32,2

SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global Player = LoadImage ("Player.bmp")
Global Gegner = LoadImage ("Alien.bmp")
Global Feuer1 = LoadImage ("123.bmp")

Player_x = 300
Player_y = 430

Type Gegner
   Field Gegner_x#
   Field Gegner_y#
End Type

Type Feuer
   Field Feuer_x#
   Field Feuer_y#
End Type

Gegner_x = Rand(0,610)

While Not KeyHit(1)
Cls



a.Gegner = New Gegner
a\Gegner_x = Gegner_x
a\Gegner_y = Gegner_y

If KeyDown(203)
   Player_x = Player_x - 5
      If Player_x < 0 Then Player_x = 0
   Feuer = False
EndIf

If KeyDown(205)
   Player_x = Player_x + 5
      If Player_x > 600 Then Player_x = 600
   Feuer = False
EndIf

If KeyHit(57)
s.Feuer = New Feuer
s\Feuer_x = Player_x + 10
s\Feuer_y = Player_y
EndIf

; Feuer

For s.Feuer = Each Feuer
s\Feuer_y = s\Feuer_y - 8

DrawImage Feuer1,s\Feuer_x,s\Feuer_y

If ImagesCollide ( Gegner,Gegner_x,Gegner_y,0,Feuer1,s\Feuer_x,s\Feuer_y,0 ) Then
Delete s
Delete a

a.Gegner = New Gegner
Gegner_x = Gegner_x
Gegner_y = Gegner_y

EndIf
Next

DrawImage Player,Player_x,Player_y

DrawImage Gegner,a\Gegner_x,a\Gegner_y

Gegner_y = Gegner_y +2
If Gegner_y > 480 Then Gegner_y = 0

Flip
Cls
Wend
End



mfg Oki02
 

da_poller

Betreff: Re: -

BeitragSa, Nov 08, 2008 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]


Delete s.feuer
Delete a.gegner



zuvor aber sichergehen das die passenden objekte ausgewählt sind.
 

oki02

Betreff: -

BeitragSa, Nov 08, 2008 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab den Code umgeschrieben nur passiert drozdem nicht das wass ich will.

mfg Oki02

Xeres

Moderator

BeitragSa, Nov 08, 2008 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte daran liegen, dass deine Variablenbenenung z.T. widersprüchlich ist.
Gegner ist ein Bild und ein Type... Types benennt man eindeutig, so das man weiß, womit man gerade hantiert. Die Fields haben auch nicht nochmal irgendwo den Typenamen drin stehen; es ist ja klar das sie zusammen gehören.
Code: [AUSKLAPPEN]
Type Feuer
   Field Feuer_x#
   Field Feuer_y#
End Type
;Besser:
Type TFeuer
   Field x#
   Field y#
End Type

und "Gegner_x = Rand(0,610)" wird einmal vor der Hauptschleife ausgeführt und bleibt daher immer gleich. Damit erstellst du jeden Schleifendurchlauf einen neuen Gegner, also vermutlich 60 stk. in der Sekunde.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

oki02

BeitragSa, Nov 08, 2008 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Durch herumprobieren habe ich es hingekrigt

Aber trozdem Danke für die Antworten.

mfg Oki02

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group