Hilfe bei Kollision von Schuss mit Gegner
Übersicht

Razor1994Betreff: Hilfe bei Kollision von Schuss mit Gegner |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ist mein Programm und ich möchte das wenn eine Kugel den Gegner trifft das kollision erscheint. Wenn ich es starte funktioniert alles und auch Gegner kommen aber wenn ich will schiessen kommt zuerst nichts und beim zweiten mal drücken kommt die fehlermeldung "object does not exist" was mache ich falsch?
Code: [AUSKLAPPEN] Global xmax=1024
Global ymax=768 Graphics xmax,ymax,0,1 SetBuffer BackBuffer() ; Bilder laden Global player = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\player.bmp") Global wand = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\block3.bmp") Global bullet = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\bullet.bmp") Global gegner = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\alien.bmp") ; Variablen Global player_x=250 Global player_y=300 Global shot_counter=0 Global frame = 0 Global counter MidHandle player ; Dim spielerbild(3) ; Schuss Type Type shot Field shot_x Field shot_y End Type ; Gegner Type Type enemie Field speed Field enemie_x Field enemie_y End Type ; Haupschleife Repeat Cls ; Wand zeichnen For z2=0 To 1 If z2=1 Then x=xmax-38 Else x=0 For z=0 To ymax/38 DrawImage wand,x,z*38 Next Next ; Spielerbewegung If KeyDown(203) Then player_x=player_x-5 If KeyDown(205) Then player_x=player_x+5 If KeyDown(208) Then player_y=player_y+5 If KeyDown(200) Then player_y=player_y-5 ; Spielerbild in Gehrichtung For i = 0 To 3 spielerbild(i) = CopyImage (player) RotateImage spielerbild(i), i*90 ;Dreht das Bild Next If KeyDown(203) Then frame=3 If KeyDown(205) Then frame=1 If KeyDown(208) Then frame=2 If KeyDown(200) Then frame=0 DrawImage spielerbild(frame), player_x, player_y ; Wandstopp If player_x <= 42 Then player_x=player_x+10 If player_x >= 968 Then player_x=player_x-10 If player_y >= 38 Then player_y=player_y-10 If player_y <= 710 Then player_y=player_y+10 ; Zufällige Aliens counter = counter + 1 If counter >= 100 Then counter = 0 e.enemie = New enemie ;gegner erstellen,eigenschaften werte zuweisen e\speed = 1 e\enemie_x = Rnd(28,772) e\enemie_y = -5 EndIf For e.enemie = Each enemie ;alle Gegner ansprechen e\enemie_y = e\enemie_y + e\speed ;alle Gegner nach unten DrawImage gegner,e\enemie_x,e\enemie_y ; Gegner erstellen If e\enemie_y >600 Then Delete e.enemie ;unten angekommen gegner löschen Next ; Kugelschuss If KeyDown(57) Then shot_counter=shot_counter+1 End If If shot_counter=5 Then schuss.shot=New shot schuss\shot_x=player_x ; vielleich mit 0 wenn von mittelpunk des bildes aus gesehen mit y Achse. schuss\shot_y=player_y shot_counter=0 End If ; Schussbewegung For schuss.shot=Each shot schuss\shot_y=schuss\shot_y-8 DrawImage bullet,schuss\shot_x,schuss\shot_y If schuss\shot_y<1 Then Delete schuss Next ; Kollision von Schuss mit Alien For schuss.shot=Each shot If ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y) Then Print "kollision" EndIf Next Flip Until KeyHit(1) End |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
1.
; Spielerbild in Gehrichtung For i = 0 To 3 spielerbild(i) = CopyImage (player) RotateImage spielerbild(i), i*90 ;Dreht das Bild Next Darf nicht in der Schleife stehn 1 mal genügt ![]() 2. object does not exist Heisst das du ein Object ,also einen Eintrag mit Delete löscht, welchen du noch im gleichen Schleifendurchgang ansprichst. Kann dir gerade nicht sagen wo weil ich kein BB zur Hand habe... Welche Zeile markiert der Debugger? mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry vielleicht stehe ich gerade auf dem Schlauch aber wie nicht in der Schleife?
und 2. bei Code: [AUSKLAPPEN] If ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y) Then
|
||
tobias12 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
lade es einfach am anfang | ||
Mein Projekteforum |
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jep habs grade selbst gelöst.
dank dem hinweis aufs delete |
||
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jetzt hab ich aber trotzdem noch eine andere Frage. es kommt immer Variable must be a type wenn ich das
Code: [AUSKLAPPEN] If e\enemie_y >600 Or ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y)Then
Delete e.enemie ;unten angekommen gegner löschen EndIf einfüge Code: [AUSKLAPPEN] Global xmax=1024
Global ymax=768 Graphics xmax,ymax,0,1 SetBuffer BackBuffer() ; Bilder laden Global player = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\player.bmp") Global wand = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\block3.bmp") Global bullet = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\bullet.bmp") Global gegner = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\alien.bmp") ; Variablen Global player_x=250 Global player_y=300 Global shot_counter=0 Global frame = 0 Global counter MidHandle player ; Dim spielerbild(3) ; Schuss Type Type shot Field shot_x Field shot_y End Type ; Gegner Type Type enemie Field speed Field enemie_x Field enemie_y End Type For i = 0 To 3 spielerbild(i) = CopyImage (player) RotateImage spielerbild(i), i*90 ;Dreht das Bild Next ; Haupschleife Repeat Cls ; Wand zeichnen For z2=0 To 1 If z2=1 Then x=xmax-38 Else x=0 For z=0 To ymax/38 DrawImage wand,x,z*38 Next Next ; Spielerbewegung If KeyDown(203) Then player_x=player_x-5 If KeyDown(205) Then player_x=player_x+5 If KeyDown(208) Then player_y=player_y+5 If KeyDown(200) Then player_y=player_y-5 ; Spielerbild in Gehrichtung If KeyDown(203) Then frame=3 If KeyDown(205) Then frame=1 If KeyDown(208) Then frame=2 If KeyDown(200) Then frame=0 DrawImage spielerbild(frame), player_x, player_y ; Wandstopp If player_x <= 42 Then player_x=player_x+10 If player_x >= 968 Then player_x=player_x-10 If player_y >= 38 Then player_y=player_y-10 If player_y <= 710 Then player_y=player_y+10 ; Zufällige Aliens counter = counter + 1 If counter >= 100 Then counter = 0 e.enemie = New enemie ;gegner erstellen,eigenschaften werte zuweisen e\speed = 1 e\enemie_x = Rnd(28,772) e\enemie_y = -5 EndIf For e.enemie = Each enemie ;alle Gegner ansprechen e\enemie_y = e\enemie_y + e\speed ;alle Gegner nach unten DrawImage gegner,e\enemie_x,e\enemie_y ; Gegner erstellen If e\enemie_y >600 Or ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y)Then Delete e.enemie ;unten angekommen gegner löschen EndIf Next ; Kugelschuss If KeyDown(57) Then shot_counter=shot_counter+1 End If If shot_counter=5 Then schuss.shot=New shot schuss\shot_x=player_x ; vielleich mit 0 wenn von mittelpunk des bildes aus gesehen mit y Achse. schuss\shot_y=player_y-20 shot_counter=0 End If ; Schussbewegung For schuss.shot=Each shot schuss\shot_y=schuss\shot_y-8 DrawImage bullet,schuss\shot_x,schuss\shot_y If schuss\shot_y<1 Then Delete schuss Next Flip Until KeyHit(1) End |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
du musst bevor du die Schuesse auf Kollision pruefts natuerlich auch mit for next durchgehen. Also so: Code: [AUSKLAPPEN] For schuss.shot=each shot
If e\enemie_y >600 Or ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y)Then Delete e.enemie ;unten angekommen gegner löschen EndIf next Mfg, count-doku ![]() |
||
- Zuletzt bearbeitet von count-doku am Sa, Jul 11, 2009 3:43, insgesamt einmal bearbeitet
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jetzt haben wir wieder das ganz oben genannte problem. Dabei habe ich vor dieser Zeile Code: [AUSKLAPPEN] If ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y) kein delete eingebaut. (Übrigens ich habe noch ein paar Sachen verändert.)Code: [AUSKLAPPEN] Global xmax=1024
[/code]
Global ymax=768 Graphics xmax,ymax,0,1 SetBuffer BackBuffer() ; Bilder laden Global player = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\player.bmp") Global wand = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\block3.bmp") Global bullet = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\bullet.bmp") Global gegner = LoadImage("C:\Programme\Blitz2DDemo\help\resources\samples\Graphics\alien.bmp") ; Variablen Global player_x=250 Global player_y=300 Global shot_counter=0 Global frame = 0 Global counter MidHandle player ; Dim spielerbild(3) ; Schuss Type Type shot Field shot_x Field shot_y Field tot End Type ; Gegner Type Type enemie Field speed Field enemie_x Field enemie_y Field tot End Type For i = 0 To 3 spielerbild(i) = CopyImage (player) RotateImage spielerbild(i), i*90 ;Dreht das Bild Next ; Haupschleife Repeat Cls ; Wand zeichnen For z2=0 To 1 If z2=1 Then x=xmax-38 Else x=0 For z=0 To ymax/38 DrawImage wand,x,z*38 Next Next ; Spielerbewegung If KeyDown(203) Then player_x=player_x-5 If KeyDown(205) Then player_x=player_x+5 If KeyDown(208) Then player_y=player_y+5 If KeyDown(200) Then player_y=player_y-5 ; Spielerbild in Gehrichtung If KeyDown(203) Then frame=3 If KeyDown(205) Then frame=1 If KeyDown(208) Then frame=2 If KeyDown(200) Then frame=0 DrawImage spielerbild(frame), player_x, player_y ; Wandstopp If player_x <= 42 Then player_x=player_x+10 If player_x >= 968 Then player_x=player_x-10 If player_y >= 38 Then player_y=player_y-10 If player_y <= 710 Then player_y=player_y+10 ; Zufällige Aliens counter = counter + 1 If counter >= 100 Then counter = 0 e.enemie = New enemie ;gegner erstellen,eigenschaften werte zuweisen e\speed = 1 e\enemie_x = Rnd(28,772) e\enemie_y = -5 EndIf For e.enemie = Each enemie ;alle Gegner ansprechen e\enemie_y = e\enemie_y + e\speed ;alle Gegner nach unten DrawImage gegner,e\enemie_x,e\enemie_y ; Gegner erstellen If e\enemie_y >600 Then e\tot = 1 EndIf Next For schuss.shot=Each shot If ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y) e\tot = 1 And schuss\tot = 1 EndIf Next ; Kugelschuss If KeyDown(57) Then shot_counter=shot_counter+1 End If If shot_counter=5 Then schuss.shot=New shot schuss\shot_x=player_x ; vielleich mit 0 wenn von mittelpunk des bildes aus gesehen mit y Achse. schuss\shot_y=player_y-20 shot_counter=0 End If ; Schussbewegung For schuss.shot=Each shot schuss\shot_y=schuss\shot_y-8 DrawImage bullet,schuss\shot_x,schuss\shot_y Next For schuss.shot=Each shot If schuss\shot_y<1 Then schuss\tot = 1 EndIf Next For schuss.shot=Each shot If schuss\tot Delete schuss.shot Next For e.enemie = Each enemie If e\tot Delete e.enemie Next Flip Until KeyHit(1) End |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst das Durchgehen der Schuesse in der Schleife machen in der du auch die Gegner durchgest.
Code: [AUSKLAPPEN] For e.enemie = Each enemie ;alle Gegner ansprechen
e\enemie_y = e\enemie_y + e\speed ;alle Gegner nach unten DrawImage gegner,e\enemie_x,e\enemie_y ; Gegner erstellen If e\enemie_y >600 Then e\tot = 1 EndIf For schuss.shot=Each shot If ImagesOverlap(bullet,schuss\shot_x,schuss\shot_y,gegner,e\enemie_x,e\enemie_y) e\tot = 1 And schuss\tot = 1 EndIf Next Next Mfg, count-doku |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was soll das hier bitte darstellen:
Code: [AUSKLAPPEN] e\tot = 1 And schuss\tot = 1
...? AND ![]() ![]() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group