collision mit types (als bilder)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

sldier

Betreff: collision mit types (als bilder)

BeitragDi, Nov 09, 2004 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo

mein nächstes prob (so langsam nerv ich was Wink )


types
Code: [AUSKLAPPEN]

Type ctropfen
Field x
Field y
Field r
End Type

Type etropfen
Field x
Field y
Field r
End Type

Type btropfen
Field x
Field y
Field xs
Field ys
Field r
Field w
Field s
Field p
End Type

Type dtropfen
Field x
Field y
Field xs
Field ys
Field r
Field w
Field s
Field p
End Type


soldat gegner + abfragen
Code: [AUSKLAPPEN]
For bwasser.btropfen = Each btropfen
DrawImage play2,bwasser\x, bwasser\y

bwasser\w=bwasser\w+1
If bwasser\w=16 Then bwasser\r=Rand(1,5) bwasser\w=0
bwasser\s=bwasser\s+1
If bwasser\s=120 Then
bwasser\s=0
cwasser.ctropfen = New ctropfen
cwasser\x = bwasser\x   
cwasser\y = bwasser\y
If bwasser\r = 5 Then cwasser\r = 1 Else cwasser\r = bwasser\r
EndIf


If bwasser\r=1 Then
feld(bwasser\x, bwasser\y) = 0
bwasser\xs= bwasser\x 
bwasser\ys= bwasser\y   
bwasser\y = bwasser\y - spped
feld(bwasser\x, bwasser\y) = 2
EndIf

If bwasser\r=2 Then
feld(bwasser\x, bwasser\y) = 0
bwasser\xs= bwasser\x 
bwasser\ys= bwasser\y 
bwasser\y = bwasser\y + spped
feld(bwasser\x, bwasser\y) = 2
EndIf

If bwasser\r=3 Then
feld(bwasser\x, bwasser\y) = 0
bwasser\xs= bwasser\x 
bwasser\ys= bwasser\y 
bwasser\x = bwasser\x - spped
feld(bwasser\x, bwasser\y) = 2
EndIf

If bwasser\r=4 Then
feld(bwasser\x, bwasser\y) = 0
bwasser\xs= bwasser\x 
bwasser\ys= bwasser\y
bwasser\x = bwasser\x + spped
feld(bwasser\x, bwasser\y) = 2
EndIf

If bwasser\r=5 Then
bwasser\xs= bwasser\x 
bwasser\ys= bwasser\y
EndIf

If bwasser\y > 495 Or bwasser\y < 50 Or bwasser\x < 140 Or bwasser\x > 795  Then bwasser\x=bwasser\xs bwasser\y=bwasser\ys
If bwasser\p<1 Then Delete bwasser.btropfen
Next

For bwasser.btropfen = Each btropfen
If ImagesCollide(map,140,10,0,play2,bwasser\x,bwasser\y,0) Then bwasser\r=Rand(1,5)
Next

For stone.woll = Each woll
For bwasser.btropfen = Each btropfen
If ImagesCollide(bwand,stone\x,stone\y,0,play2,bwasser\x,bwasser\y,0) Then bwasser\r=Rand(1,5) 
Next
Next

For stein.wall = Each wall
For bwasser.btropfen = Each btropfen
If ImagesCollide(wand,stein\x,stein\y,0,play2,bwasser\x,bwasser\y,0) Then bwasser\x=bwasser\xs bwasser\y=bwasser\ys 
Next
Next

For wasser.tropfen = Each tropfen
For bwasser.btropfen = Each btropfen
If ImagesCollide(shot,wasser\x,wasser\y,0,play2,bwasser\x,bwasser\y,0) Then Delete wasser.tropfen bwasser\p=bwasser\p-1
Next
Next

For bwasser.btropfen = Each btropfen
If ImagesCollide(play,x1,y1,0,play2,bwasser\x,bwasser\y,0) Then
If panzer>0 Then panzer=panzer-51 Else leben=leben-99 
EndIf
Next


schuss gegner
Code: [AUSKLAPPEN]

For cwasser.ctropfen = Each ctropfen
DrawImage shot,cwasser\x, cwasser\y

If cwasser\r=1 Then
feld(cwasser\x, cwasser\y) = 0 
cwasser\y = cwasser\y - speed
feld(cwasser\x, cwasser\y) = 2 
EndIf

If cwasser\r=2 Then
feld(cwasser\x, cwasser\y) = 0 
cwasser\y = cwasser\y + speed
feld(cwasser\x, cwasser\y) = 2 
EndIf

If cwasser\r=3 Then
feld(cwasser\x, cwasser\y) = 0 
cwasser\x = cwasser\x - speed
feld(cwasser\x, cwasser\y) = 2 
EndIf

If cwasser\r=4 Then
feld(cwasser\x, cwasser\y) = 0 
cwasser\x = cwasser\x + speed
feld(cwasser\x, cwasser\y) = 2 
EndIf

If cwasser\y >= 495 Or cwasser\y <= 5 Or cwasser\x <= 140 Or cwasser\x >= 795  Then Delete cwasser.ctropfen
Next

For cwasser.ctropfen = Each ctropfen
For dwasser.dtropfen = Each dtropfen
If ImagesCollide(play,dwasser\x,dwasser\y,0,shot,cwasser\x,cwasser\y,0) Then Delete cwasser.ctropfen dwasser\p=dwasser\p-1
Next
Next

For cwasser.ctropfen = Each ctropfen
If ImagesCollide(map,140,10,0,shot,cwasser\x,cwasser\y,0) Then Delete cwasser.ctropfen
Next

For cwasser.ctropfen = Each ctropfen
If ImagesCollide(play,x1,y1,0,shot,cwasser\x,cwasser\y,0) Then
If panzer>0 Then panzer=panzer-41 Else leben=leben-51
Delete cwasser.ctropfen
EndIf
Next

For stein.wall = Each wall
For cwasser.ctropfen = Each ctropfen
If ImagesCollide(wand,stein\x,stein\y,0,shot,cwasser\x,cwasser\y,0) Then Delete cwasser.ctropfen stein\p=stein\p-1
Next
Next

For stone.woll = Each woll
For cwasser.ctropfen = Each ctropfen
If ImagesCollide(bwand,stone\x,stone\y,0,shot,cwasser\x,cwasser\y,0) Then Delete cwasser.ctropfen stone\p=stone\p-1
Next
Next


schuss freund
Code: [AUSKLAPPEN]
For ewasser.etropfen = Each etropfen
DrawImage shot,ewasser\x, ewasser\y

If ewasser\r=1 Then
feld(ewasser\x, ewasser\y) = 0 
ewasser\y = ewasser\y - speed
feld(ewasser\x, ewasser\y) = 2 
EndIf

If ewasser\r=2 Then
feld(ewasser\x, ewasser\y) = 0 
ewasser\y = ewasser\y + speed
feld(ewasser\x, ewasser\y) = 2 
EndIf

If ewasser\r=3 Then
feld(ewasser\x, ewasser\y) = 0 
ewasser\x = ewasser\x - speed
feld(ewasser\x, ewasser\y) = 2 
EndIf

If ewasser\r=4 Then
feld(ewasser\x, ewasser\y) = 0 
ewasser\x = ewasser\x + speed
feld(ewasser\x, ewasser\y) = 2 
EndIf

If ewasser\y >= 495 Or ewasser\y <= 5 Or ewasser\x <= 140 Or ewasser\x >= 795  Then Delete ewasser.etropfen
Next

For ewasser.etropfen = Each etropfen
For bwasser.btropfen = Each btropfen
If ImagesCollide(play2,bwasser\x,bwasser\y,0,shot,ewasser\x,ewasser\y,0) Then Delete ewasser.etropfen bwasser\p=bwasser\p-1
Next
Next

For ewasser.etropfen = Each etropfen
If ImagesCollide(map,140,10,0,shot,ewasser\x,ewasser\y,0) Then Delete ewasser.etropfen
Next

For stein.wall = Each wall
For ewasser.etropfen = Each etropfen
If ImagesCollide(wand,stein\x,stein\y,0,shot,ewasser\x,ewasser\y,0) Then Delete ewasser.etropfen 
Next
Next

For stone.woll = Each woll
For ewasser.etropfen = Each etropfen
If ImagesCollide(bwand,stone\x,stone\y,0,shot,ewasser\x,ewasser\y,0) Then Delete ewasser.etropfen 
Next
Next


soldat gegner
Code: [AUSKLAPPEN]
For dwasser.dtropfen = Each dtropfen
DrawImage play,dwasser\x, dwasser\y

dwasser\w=dwasser\w+1
If dwasser\w=16 Then dwasser\r=Rand(1,5) dwasser\w=0
dwasser\s=dwasser\s+1
If dwasser\s=120 Then
dwasser\s=0
ewasser.etropfen = New etropfen
ewasser\x = dwasser\x   
ewasser\y = dwasser\y
If dwasser\r = 5 Then ewasser\r = 1 Else ewasser\r = dwasser\r
EndIf


If dwasser\r=1 Then
feld(dwasser\x, dwasser\y) = 0
dwasser\xs= dwasser\x 
dwasser\ys= dwasser\y   
dwasser\y = dwasser\y - spped
feld(dwasser\x, dwasser\y) = 2
EndIf

If dwasser\r=2 Then
feld(dwasser\x, dwasser\y) = 0
dwasser\xs= dwasser\x 
dwasser\ys= dwasser\y 
dwasser\y = dwasser\y + spped
feld(dwasser\x, dwasser\y) = 2
EndIf

If dwasser\r=3 Then
feld(dwasser\x, dwasser\y) = 0
dwasser\xs= dwasser\x 
dwasser\ys= dwasser\y 
dwasser\x = dwasser\x - spped
feld(dwasser\x, dwasser\y) = 2
EndIf

If dwasser\r=4 Then
feld(dwasser\x, dwasser\y) = 0
dwasser\xs= dwasser\x 
dwasser\ys= dwasser\y
dwasser\x = dwasser\x + spped
feld(dwasser\x, dwasser\y) = 2
EndIf

If dwasser\r=5 Then
dwasser\xs= dwasser\x 
dwasser\ys= dwasser\y
EndIf

If dwasser\y > 495 Or dwasser\y < 50 Or dwasser\x < 140 Or dwasser\x > 795  Then dwasser\x=dwasser\xs dwasser\y=dwasser\ys
If dwasser\p<1 Then Delete dwasser.dtropfen
Next

For dwasser.dtropfen = Each dtropfen
If ImagesCollide(map,140,10,0,play2,dwasser\x,dwasser\y,0) Then dwasser\r=Rand(1,5)
Next

For stone.woll = Each woll
For dwasser.dtropfen = Each dtropfen
If ImagesCollide(bwand,stone\x,stone\y,0,play2,dwasser\x,dwasser\y,0) Then dwasser\r=Rand(1,5) 
Next
Next

For stein.wall = Each wall
For dwasser.dtropfen = Each dtropfen
If ImagesCollide(wand,stein\x,stein\y,0,play2,dwasser\x,dwasser\y,0) Then dwasser\x=dwasser\xs dwasser\y=dwasser\ys 
Next
Next



so das waren alle wichtigen scriptstellen

der fehler dritt nur auf wenn viele schüße fallen und

1. bwasser - ewasser trifft scriptstelle

Code: [AUSKLAPPEN]
For ewasser.etropfen = Each etropfen
For bwasser.btropfen = Each btropfen
If ImagesCollide(play2,bwasser\x,bwasser\y,0,shot,ewasser\x,ewasser\y,0) Then Delete ewasser.etropfen bwasser\p=bwasser\p-1
Next
Next


oder2. cwasser - dwasser trifft scriptstelle
Code: [AUSKLAPPEN]
For cwasser.ctropfen = Each ctropfen
For dwasser.dtropfen = Each dtropfen
If ImagesCollide(play,dwasser\x,dwasser\y,0,shot,cwasser\x,cwasser\y,0) Then Delete cwasser.ctropfen dwasser\p=dwasser\p-1
Next
Next



wisst ihr warum?

hab auch probiert die geschwindigkeit zu verringern (der soldaten und der schüsse)

aber bringt auch nichts ... mein gedanke war das 2 schüsse gleichzeitig einen soldaten berühren aber wie könnte ich das ändern?
 

Ava

Gast

BeitragDi, Nov 09, 2004 16:41
Antworten mit Zitat
Du hast irgendwie nirgendswo beschrieben, was genau eigentlich das Problem ist? nur das es auftritt ...

Blitzbasic ist übrigens keine Scriptsprache. *lächel*
 

sldier

BeitragDi, Nov 09, 2004 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
also es kommt dann eine meldung

"object does not exist"

naja sorry hab script... wegen php geschrieben
 

ke^kx

BeitragDi, Nov 09, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht liegts daran, dass BB denkt du willst auch den Schuss löschen, an dem du p = p - 1 machst. Aber ehrlich gesagt hab ich eigentlich keine Ahnung *lol*

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

sldier

BeitragDi, Nov 09, 2004 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
den schuss lösche ich ja auch ...

mit p=p-1 hohl ich dem soldaten einen lebenspunkt weg
 

ke^kx

BeitragDi, Nov 09, 2004 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann check ich deinen Code überhaupt nicht^^ Sollen jetzt ewasser und dwasser auch gelöscht werden oder sind das die Spieler?
Wenn sie nicht gelöscht werden sollen tu sie einfach mal in die nächste Zeile, vielleicht funzt es dann.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

Ava

Gast

BeitragDi, Nov 09, 2004 17:19
Antworten mit Zitat
"Object does not exist!" sagt Dir auf jeden Fall, dass Du versuchst, ein Type-Element anzusprechen, dass nicht (oder nicht mehr) vorhanden ist. Ich würde Dir auch gern weiterhelfen, wie genau es zu diesem Problem kommt, aber ehrlich: ich bin irgendwie zu faul, mir den ganzen vielen Code da oben durchzugucken. Rolling Eyes
 

sldier

BeitragDi, Nov 09, 2004 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
würde es helfen wenn du den ganzen code hast?

aber hier ne auflistung

wasser - schuss von dir (spieler
bwasser-soldat gegner
cwasser-schuss gegner
dwasser-schuss freund
ewasser-soldat freund
 

sldier

BeitragDi, Nov 09, 2004 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ava hat Folgendes geschrieben:
"Object does not exist!" sagt Dir auf jeden Fall, dass Du versuchst, ein Type-Element anzusprechen, dass nicht (oder nicht mehr) vorhanden ist. Ich würde Dir auch gern weiterhelfen, wie genau es zu diesem Problem kommt, aber ehrlich: ich bin irgendwie zu faul, mir den ganzen vielen Code da oben durchzugucken. Rolling Eyes


und wenn ich ganz lieb darum bitte...

ich kann sonst nich weiter arbeiten Crying or Very sad
 

ke^kx

BeitragDi, Nov 09, 2004 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du es denn jetzt probiert indem du das in die nächste Zeile tust?
Wenn es dann immer noch nicht funzt guck ich mir das ganze nochmal genauer an.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

sldier

BeitragDi, Nov 09, 2004 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ja habs probiert aber klappt immernochnicht aber hab nochwas herrausgefunden:

wenn nur wenig (zB 1ner) gegner im spiel sind und von freunden getroffen werden kommt der fehler nicht... es passiert das was soll

=> 1 LP wird abgezogen schuss verschwindet

aber wenn ein gewühl von gegnern ist kommt der fehler wieder

(bei dem spiel kommen öfters mal "gewühle")
 

ke^kx

BeitragDi, Nov 09, 2004 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Eventuel liegt es daran (wie Jake in deinem anderen Thread postete), dass du kein end if benutzt.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

sldier

BeitragDi, Nov 09, 2004 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

For ewasser.etropfen = Each etropfen
For bwasser.btropfen = Each btropfen
If ImagesCollide(play2,bwasser\x,bwasser\y,0,shot,ewasser\x,ewasser\y,0) Then
Delete ewasser
bwasser\p=bwasser\p-1
EndIf
Next
Next


so hab ichs jetzt (wenn ihr so meintet) aber es klappt trotzdem nicht

das schlimmste ist ja das es wenn nur ein typ da ist klappts... ab 2 oder 3 nichtmehr

warum?
 

ke^kx

BeitragDi, Nov 09, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach mal nach dem endif ein exit rein, genau daran hatte es bei mir nämlich auch mal gehangen^^
Ich weis nicht ob es dann funzt aber probieren kann man es ja.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

sldier

BeitragDi, Nov 09, 2004 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
danke wir sind denke ich der lösung einen schritt näher gerückt denn jetzt passiert folgendes:

hab 8 gegner gemacht
hab selbst auf sie geschossen (gleicher code)

1 wurder zerstört die anderen blieben einfach da wo sie waren (haben sich weiter bewegt und weiter geschossen)

also müssen die irgentwie alle als 1 soldat gesehen werden nur wo?

#########
zusatz

nochwas rausgefunden

es geht doch ... mit nem hacken

wenn ich 4 gegner mache muss ich erst den ersten erschießen weil sonst der 2te unverwundbar ist...

wie kann ich das verändern ... oder was bringt es dazu?
  • Zuletzt bearbeitet von sldier am Di, Nov 09, 2004 18:14, insgesamt einmal bearbeitet
 

Ava

Gast

BeitragDi, Nov 09, 2004 18:14
Antworten mit Zitat
Jiriki hat Folgendes geschrieben:
Eventuel liegt es daran (wie Jake in deinem anderen Thread postete), dass du kein end if benutzt.

Jiriki


LoL, wer verbreitet denn solche Gerüchte? *lächel*


Aber ich habe Deinen Fehler soieben entdeckt:
Code: [AUSKLAPPEN]
For ewasser.etropfen = Each etropfen
For bwasser.btropfen = Each btropfen
If ImagesCollide(play2,bwasser\x,bwasser\y,0,shot,ewasser\x,ewasser\y,0) Then
Delete ewasser
bwasser\p=bwasser\p-1
EndIf
Next
Next


Denn es ist ganz klar, dass diese Schleife zu einem Fehler führt! Du löscht den ewasser-type, obwohl er sich in der äusseren Schleife befindet und weiterhin durchlaufen wird! Verschachtel die Schleifen in einer anderen Reihenfolge (ist ja in diesem Fall nicht sehr schwierig Wink). Dann sollte es eigentlich klappen. du darfst nachdem ein Type-Eintrag gelöscht wurde, nicht wieder auf diesen Eintrag zugreifen!
 

sldier

BeitragDi, Nov 09, 2004 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen vielen dank erstma @ ava
aber auch vielen dank allen anderen die sich zeit für den code genommen
haben

war echt so ich musste nur die reihenfolge ändern ...

ok THX nochma mache jetzt weiter Smile

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group