Kollision wackelt?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Nichts95

Betreff: Kollision wackelt?

BeitragSa, Mai 26, 2007 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, irgendwie habe ich das Problem das bei einer Kollision in meinem Spiel der ganze Bildschirm wackelt! Hier die Funktion:
Code: [AUSKLAPPEN]

Function kollision()
If ImagesCollide(spieler, xpos,ypos,0, level1,0,0,0) Then
Print "hallo"
EndIf
End Function

Ich vermute mal dass das mit meiner "Levelform" zutun hat, deshalb hier das Bild der "Levelform":
user posted image
Ich hab hier im Forum auch irgendwie was gelesen das wenn man "schief" geht man die Kollision verhindern kann - vielleicht ist das auf Grund der Levelform so? Zudem kann man bei mir im ganzen Spiel schief gehen! (Das ist natülich gewollt...)

Tankbuster

BeitragSa, Mai 26, 2007 9:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Entweder du hast den Backbuffer nicht gesetzt, oder.... KP^^
Mach mal das "Print" raus! "Print" ist naja... nicht sehr toll. Ersetz das lieber durch "Text". Dann gehts sicherlich...
Wenn man in 3D "Print" verwendet, dann kann das Spiel schonmal ganz schön ruckeln...
An der Levelform liegt es nicht! Rolling Eyes
Twitter
Download Jewel Snake!
Windows|Android
 

Nichts95

BeitragSa, Mai 26, 2007 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tankbuster: Das mit dem Print war nur versuchsweise da das Spiel das erste war, dass eine Kollisionsabfrage enthielt^^

Jetzt habe ich bloß ein neues Problem - irgendwie funktioniert die Kollisionsabfrage nicht... Hier die zwei Funktionen die eigentlich dafür zuständig sind:
Code: [AUSKLAPPEN]

Function kollision()
If ImagesCollide(spieler, xpos,ypos,0, level1,0,0,0) Then
kollidiert = ja
Else
kolliediert = nein
EndIf
End Function

Function steuerung()
If kolliediert = nein Then
;oben
If KeyDown(200) Then
ypos = ypos - geschwindigkeit
EndIf
;unten
If KeyDown(208) Then
ypos = ypos + geschwindigkeit
EndIf
;rechts
If KeyDown(205) Then
xpos = xpos + geschwindigkeit
EndIf
;links
If KeyDown(203) Then
xpos = xpos - geschwindigkeit
EndIf
EndIf
End Function

Tankbuster

BeitragSa, Mai 26, 2007 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du die Variablen auch alle Global gemacht ??
Twitter
Download Jewel Snake!
Windows|Android
 

Nichts95

BeitragSa, Mai 26, 2007 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja...
 

ETsoftware

BeitragSa, Mai 26, 2007 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs mal so:
Code: [AUSKLAPPEN]
Function kollision()
If ImagesCollide(spieler, xpos,ypos,0, level1,0,0,0) Then
kollidiert$ = "ja"
Else
kollidiert$ = "nein"
EndIf
End Function

Function Steuerung()
If kollidiert="nein" Then ...

Also das ganze als Zeichenkette und die Variablennamen beide gleich.
Ich würde es jedoch mit Zahlen machen, wenn es kollidiert dann kollidiert=1 sonst kollidiert=0.

Edit:Sonst meint das Programm, dass ja und nein Variablen sind und weil ihnen keine Werte zugewiesen wurden, haben beiden den Wert 0

Hoffe ich konnte helfen!
ETsoftware 2007
 

Nichts95

BeitragSa, Mai 26, 2007 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm... Keine Fehlermeldung, aber auch keine Anerkennung dass die Spielfigur kolliediert und dann auf Tastendrücke nicht reagiert... Laughing
 

ETsoftware

BeitragSa, Mai 26, 2007 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier's mal so:
Code: [AUSKLAPPEN]
Global geschwindigkeit=10 ;Wichtig dass diese Variable einen Wert hat
Global ypos
Global xpos
Global spieler=LoadImage("spieler.jpg")
Global level1=LoadImage("level1.jpg")

Repeat
 Cls
 If ImagesCollide(spieler, xpos,ypos,0, level1,0,0,0) Then ;Direkt in Hauptschleife abfragen
  steuerung
  kollision="JA"
 EndIf
 Text 10,10,"Kollision="+kollision
 Text 10,25,"XPos="+xpos
 Text 10,40,"YPos="+ypos
 DrawImage spieler,xpos,ypos
 DrawImage level1,0,0
 Flip
 kollision="NEIN"
Until KeyHit(1)



Function steuerung()

;Hier habe ich die Abfrage gelöscht
;oben
If KeyDown(200) Then
ypos = ypos - geschwindigkeit
EndIf
;unten
If KeyDown(208) Then
ypos = ypos + geschwindigkeit
EndIf
;rechts
If KeyDown(205) Then
xpos = xpos + geschwindigkeit
EndIf
;links
If KeyDown(203) Then
xpos = xpos - geschwindigkeit
EndIf

End Function

Wichtige Stellen habe ich kommentiert!

Mfg
ETsoftware

Edit: Vielleicht solltest du das Programm mal mit Debugger laufen lassen, um zu sehen welche Werte die Variablen haben!
ETsoftware 2007
 

Nichts95

BeitragSa, Mai 26, 2007 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie klappt das nicht Sad
Code: [AUSKLAPPEN]

Function kollision()
If ImagesCollide(spieler, xpos,ypos,0, level1,0,0,0) Then ;Direkt in Hauptschleife abfragen

  kollidiert="level"
 EndIf
 DrawImage spieler,xpos,ypos
 Flip
 kollidiert="NEIN"
;------------Was passiert wenn kollidiert?
If kollidiert = "level" Then
xpos = xpos - 3
ypos = ypos - 3
SetBuffer BackBuffer()
DrawImage spieler,xpos,ypos
Flip
EndIf
End Function

Habe es etwas verändert dass die Spielfigur anhält, doch das klappt ja nicht^^

Tankbuster

BeitragSa, Mai 26, 2007 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
If ImagesCollide(spieler, xpos,ypos,0, level1,0,0,0) Then ;Direkt in Hauptschleife abfragen

kollidiert="level"
EndIf
DrawImage spieler,xpos,ypos
Flip
kollidiert="NEIN"
;------------Was passiert wenn kollidiert?
If kollidiert = "level" Then


kollidiert wird nie "level" sein, denn es wird immer wieder zu NEIN!
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group