Kollisionsabfrage

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Granati

Betreff: Kollisionsabfrage

BeitragSo, Nov 21, 2004 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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 ??? Rolling Eyes
thx schon mal im Vorraus!!!

simi

BeitragSo, Nov 21, 2004 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 21, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 21, 2004 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 21, 2004 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 21, 2004 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 21, 2004 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmmt nicht hab ich geändert!!!!
|>GRANATI<|

Http://people.freenet.de/exdream-games/
(Ex)Dream Games

Hubsi

BeitragSo, Nov 21, 2004 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Function findet er nicht? Zitat:
Function ?...? not fund
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Granati

BeitragSo, Nov 21, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 21, 2004 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs schon geschrieben Exclamation Rolling Eyes
Zitat:

If (x > snakex(i) And x>snakex(i)) Or x+3>snakex(i) And x+3>snakex(i)

Granati

BeitragSo, Nov 21, 2004 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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-bit

Gast

BeitragSo, Nov 21, 2004 18:09
Antworten mit Zitat
Hoi.

If (y > snakey(i) And y>snakey(i)) ???????


Und ab damit in >Beginner-Fragen<.

Toni

Granati

BeitragMo, Nov 22, 2004 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@ hot-bit:
Wenn du schon so schlau bist kannst du mir ja sagen woran das liegt. Wink
|>GRANATI<|

Http://people.freenet.de/exdream-games/
(Ex)Dream Games
 

hot-bit

Gast

BeitragMo, Nov 22, 2004 19:11
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 ! Wink

Toni

Granati

BeitragMo, Nov 22, 2004 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
So Problem gelöst: Idea


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. Very Happy Very Happy Very Happy
|>GRANATI<|

Http://people.freenet.de/exdream-games/
(Ex)Dream Games
 

hot-bit

Gast

BeitragMo, Nov 22, 2004 21:23
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

BeitragDi, Nov 23, 2004 1:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Wink

Spass beiseite, so reicht es vollkommen:
Code: [AUSKLAPPEN]
If x = x2 Or y = y2


Ralf
 

David

BeitragDi, Nov 23, 2004 8:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ja, und wie Hot-Bit schon erwähnte... Die Schleife macht absolut null Sinn!

grüße

Granati

BeitragDi, Nov 23, 2004 9:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@ 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

BladeRunner

Moderator

BeitragDi, Nov 23, 2004 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group