Kollisionsabfrage
Übersicht

![]() |
GranatiBetreff: Kollisionsabfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Also ich hab ein Snake Spiel für 2 Spieler Programmiert das läuft so ab: Wenn ein Spieler mit seinem Snake dem anderem rein "fährt" dann hat er verloren. Und nun folgendes Problem: Bei der Kollisionsabfrage prüft er nur das neu gemalte Bild also den Kopf des Snakes und nich die anderern wie kann ich das Problem lösen ??? ![]() thx schon mal im Vorraus!!! |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du fragst einfach alle ab.....
Oder zeichnest du nur, und speicherst die Position nicht ab, oder wie machst du das Genau? (Dim,Tiles,Koli,....) |
||
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier mal der Code des Player 1:
Graphics 1024, 768, 16, 1 ;############# ; Variablen ## ;############# ;Bilder Global bild_2 = LoadImage("Bild_2.bmp") Global bild_1 = LoadImage("Bild_1.bmp") Global test = LoadImage("test.bmp") ; Startposition festlegen Global x = 20 Global y = 20 ; Die Richtung festlegen Global xplus = 1 ; Nach rechts Global yplus = 0 ; weder nach oben oder nach unten. Nur nach rechts. ; Die Länge der Schlange Global laenge = 500 Dim snakex(laenge + 1) Dim snakey(laenge + 1) ; Startposition festlegen 2 Global x2 = 1004 Global y2 = 748 ; Die Richtung festlegen 2 Global xplus2 = -1 ; Nach rechts Global yplus2 = 0 ; weder nach oben oder nach unten. Nur nach rechts. ; Die Länge der Schlange 2 Global laenge2 = 500 Dim snakex2(laenge2 + 1) Dim snakey2(laenge2 + 1) ;####################################################################### ;######################## H A U P T S C H L E I F E #################### ;####################################################################### Repeat Cls tastenpruefen snakebewegen tastenpruefen2 snakebewegen2 Kollisions_Abfrage_1 Flip Until KeyHit(1) End ;####################################################################### ;####################################################################### ;####################################################################### ;####################################################################### ;######################## P L A Y E R 1 ################################ ;####################################################################### ;----------------------------------------------------------------------- Function tastenpruefen() ; Tastenabfrage If KeyHit(205) Then ; rechts xplus = 1 yplus = 0 EndIf If KeyHit(203) Then ; links xplus = -1 yplus = 0 EndIf If KeyHit(208) Then ; unten xplus = 0 yplus = 1 EndIf If KeyHit(200) Then ; oben xplus = 0 yplus = -1 EndIf End Function ;---------------------------------------------------------------------- Function snakebewegen() x = x + xplus ; xplus und yplus werden in tastenpruefen() gesetzt. y = y + yplus ; Wenn er am Rand ist, kommt er an der anderen Seite wieder raus If x > 1024 Then x = 0 If x < 0 Then x = 1024 If y > 768 Then y = 0 If y < 0 Then y = 768 ; Jeder Punkt der Linie wird gemalt For i = 0 To laenge DrawImage bild_1, snakex(i), snakey(i) Next ; Jedem Punkt werden die Koordinaten des davorliegenden zugewiesen. ; Das eigentlich wichtige an einem Snake-Programm. ;_________ For i = laenge To 1 Step -1 snakex(i) = snakex(i + 1) snakey(i) = snakey(i + 1) Next ;--------- ; Der erste Punkt hat die Hauptkoordinaten. Die des Anfangs eben. snakex(0) = x snakey(0) = y End Function ;____________________ Function Kollisions_Abfrage_1() If ImagesCollide(bild_1, x, y, frame1, bild_2, x2, y2, frame2) Then DrawImage test, 50, 50 End Function |
||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, also,
also du machst eine For-schleife, die alle snakex und y durchgeht: Code: [AUSKLAPPEN] for i = 0 to lange if (x > snakex(i) and x>snake(x)) or x+bildbreite > snakex(i) and x+bb>snakex(i) then dasselbe noch für y so sollte es eigentlich gehen. Ich würde auch nicht ImagesCollide verwenden, weil das sehr langsam ist... cu simi |
||
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab das jetzt so übertragen:
Code: [AUSKLAPPEN] For i = 0 To leange
If (x > snakex(i) And x>snake(x)) Or x+3>snakex(i) And x+3>snakex(i) Then DrawImage test,50 ,50 End If Next Und dann kommt die Fehlermeldung: "Function not found" |
||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
- Zuletzt bearbeitet von Granati am So, Nov 21, 2004 16:53, insgesamt 2-mal bearbeitet
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Granati hat Folgendes geschrieben: If (x > snakex(i) And x>snakex(x)) Or x+1024>snakex(i) And x+1024>snakex(i) Then DrawImage test,50 ,50 If (y > snakey(i) And x>snakey(y)) Or y+1024>snakey(i) And y+1024>snakey(i) Then DrawImage test,50 ,50 Next yyyy |
||
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmmt nicht hab ich geändert!!!! | ||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Welche Function findet er nicht? Zitat: Function ?...? not fund
|
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh hab ich vergessen.
Bei dem Code: Code: [AUSKLAPPEN] For i = 0 To leange
If (x > snakex(i) And x>snake(x)) Or x+3>snakex(i) And x+3>snakex(i) Then DrawImage test,50 ,50 End If Next Kennt er das nicht: Code: [AUSKLAPPEN] If (x > snakex(i) And x>snake(x)) Or x+3>snakex(i) And x+3>snakex(i)
|
||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habs schon geschrieben ![]() ![]() Zitat: If (x > snakex(i) And x>snakex(i)) Or x+3>snakex(i) And x+3>snakex(i) |
||
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, jetzt hab ichs so:
Code: [AUSKLAPPEN] For i = 0 To leange If (x > snakex(i) And x>snakex(i)) Or x+3>snakex(i) And x+3>snakex(i) Then DrawImage test,50 ,50 If (y > snakey(i) And y>snakey(i)) Or y+3>snakey(i) And y+3>snakey(i) Then DrawImage test,50 ,50 End If End If Next Aber jetzt zeigt er das Bild "test" von anfang an an. |
||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
- Zuletzt bearbeitet von Granati am So, Nov 21, 2004 18:16, insgesamt einmal bearbeitet
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi.
If (y > snakey(i) And y>snakey(i)) ??????? Und ab damit in >Beginner-Fragen<. Toni |
||
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ hot-bit:
Wenn du schon so schlau bist kannst du mir ja sagen woran das liegt. ![]() |
||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi.
Schau: Wenn du nicht mal weißt, was du da programmiert hast, dann ist es auch flüssiger als flüssig, also überflüssig, wenn ich dir das zu erklären versuche. Versuche einfach mal zu verstehen, was diese Code-Zeile bewirken soll. Und noch was: Du brauchst BlitzBasic nur einmal sagen, was es zu tun hat ! ![]() Toni |
||
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
So Problem gelöst: ![]() Code: [AUSKLAPPEN] Function Kollisions_Abfrage_1()
For i = 0 To leange If x = x2 Or x2 = x Or y = y2 Or y2 = y Then DrawImage test, 50, 50 Next End Function Jetzt hab ichs so und jetzt funktionierts wie ichs wollte muss es jetzt nur noch etwas austüfteln. ![]() ![]() ![]() |
||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi.
Junge, Junge.. tztztztz... Habe dir doch gerade gesagt, daß du Blitzbasic nur einmal sagen mußt, was es tun soll ! Code: [AUSKLAPPEN] If x = x2 Or x2 = x Or y = y2 Or y2 = y
Was soll das nun wieder ? Ich würde mal vorschlagen, befasse dich lieber mal intensiv mit BlitzBasic, und fang erst nach einiger Zeit an, über ein Game nach zu denken. Ist nur ein freundschaftlicher Rat. Toni |
||
![]() |
Ralf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Hot-Bit meint glaube ich das es auch noch komplizierter geht, nämlich so: Code: [AUSKLAPPEN] If x = x2 Or x2 = x And Not x <> x2 And Not x2 <> x
If y = y2 Or y2 = y And Not y <> y2 And Not y2 <> y EndIf EndIf ![]() Spass beiseite, so reicht es vollkommen: Code: [AUSKLAPPEN] If x = x2 Or y = y2
Ralf |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Ja, und wie Hot-Bit schon erwähnte... Die Schleife macht absolut null Sinn! grüße |
||
![]() |
Granati |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ hot-bit: Danke für den Rat!!!!!!
Das war ja ürsprunglich ein einfacher Snake Code den ich umgeändert hab. Drum Check ich halt auch nicht ganz alles. |
||
|>GRANATI<|
Http://people.freenet.de/exdream-games/ (Ex)Dream Games |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Granati hat Folgendes geschrieben: @ hot-bit: Danke für den Rat!!!!!!
Das war ja ürsprunglich ein einfacher Snake Code den ich umgeändert hab. Drum Check ich halt auch nicht ganz alles. Das hat absolut nichts damit zu tun was für ein Programm das vorher war. Es geht hier um Grundlegendes. Ich denke du wärst vorläufig in der Beginner-Ecke mit deinen Posts besser aufgehoben. Was Hotti dir erklären wollte ist ja dass es reicht zwei Variablen einmal auf ihre Gleichheit zu Prüfen- denn wenn sie es beim ersten mal waren sind sie es beim zweiten sicherlich auch. Und eine Schleife deren ausführende Variable im Wiederholungsteil nicht auftaucht ist meist nutzlos. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group