If - Else problem...
Übersicht

![]() |
rambo256Betreff: If - Else problem... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo...
Hab schon wieder ne komische Frage *schämendindieeckegeh*: Irgendwie nimmt BB nicht die "Else-Alternative" ![]() Obwohl die obrige Bedingung nicht erfüllt worden ist ![]() ![]() Hier der Code: Code: [AUSKLAPPEN] For x=0 To Max_Tiles_X
For y=0 To Max_tiles_Y If Array_collide_places(3,X,Y) = 1 Then If ImageRectCollide(Tileset_boxes_gfx,(X+scroll_x#)*Tile_width,(y+scroll_y#)*Tile_height,tile_matrix(3,x,y),t\x+22,t\y+4,20,61) Then t\collide_boxes = 1 If t\x+22 > ((x+scroll_x#)*tile_width) Or t\x+42 < (((x+scroll_x#)*tile_width)+tile_width) Then If (t\y+64 <= ((y+scroll_y#)*tile_height)+8) Then t\collide_boxes = 1 t\y# = t\old_y# t\jump = 0 t\vy# = 0 EndIf Else t\collide_boxes = 1 t\x# = t\old_X# scroll_x# = Old_scroll_x# scroll_y# = Old_scroll_y# EndIf Else t\collide_boxes = 0 EndIf EndIf next next Hab ich mich da irgendwo verschrieben oder was? Wenn ich die 3-IF abfrage komplett ausklammere,dann funktioniert es... *keineerklärungdafürhab* Hoffe ihr könnt mir helfen. THX! Edit: sorry wennd er Code an manchen Stellen verrutscht ist,aber das liegt an dem Forum... ![]() |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mhhh...
Also ich hab mich geirrt,an der Art und Weise,wie ich die If's und Else's aneinandergereiht habe,liegt es nicht... Hab kurz getestet,,in dem ich die 3 If-anweisung einfach so gemacht habe,das sie immer false ist,dann klappte das... Ich glaube es liegt eher daran: Code: [AUSKLAPPEN] If t\x+22 > ((x+scroll_x#)*tile_width) Or t\x+42 < (((x+scroll_x#)*tile_width)+tile_width) Then
Damit möchte ich bezwecken,dass BB prüfen soll,ob sich der Spieler "in" dem bereich einer Kiste befindet. (Ihr müsst wissen,das ich zurzeit an einem 2D-Shooter arbeite,da brauch ich Kisten). Hiermit: Code: [AUSKLAPPEN] If (t\y+64 <= ((y+scroll_y#)*tile_height)+8) Then
teste ich,ob sich der Spiele auf der Kiste befindet. wenn dies zutrifft,dann bleibt er oben auf ihr,aber wenn dies nicht zutrifft,dann ist der Spieler unterhalb der oberkante der Kiste,entweder von links oder rechts.Also er läuft praktisch dagegen. Damit er diese Kiste nicht durchlaufen kann. Setze ich die x-koordinate auf die alte zurück. Nun meine Frage: Wie löse ich dieses Problem am besten: Der Spieler kann auf Kisten springen und darauf laufen,aber er kann sie nicht durchschreiten. Ist mein Lösungsansatz richtig? Wäre sehr dankbar für jede Hilfe! THX! |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also hier mein 2.Lösungsansatz:
Code: [AUSKLAPPEN] If ImageRectCollide(Tileset_boxes_gfx,(X+scroll_x#)*Tile_width,(y+scroll_y#)*Tile_height,tile_matrix(3,x,y),t\x+22,t\y+4,20,61) Then
If (t\x+42) < ((x+scroll_x#)*tile_width) Or (t\x +22)> (((x+scroll_x#)*tile_width))+tile_width) Then t\collide_boxes = 1 t\x# = t\old_X# scroll_x# = Old_scroll_x# scroll_y# = Old_scroll_y# Else If (t\y+64 <= ((y+scroll_y#)*tile_height)+tile_height) Then t\collide_boxes = 1 t\y# = t\old_y# t\jump = 0 t\vy# = 0 EndIf EndIf Else t\collide_boxes = 0 EndIf zur Erklärung: Das: Code: [AUSKLAPPEN] If ImageRectCollide(Tileset_boxes_gfx,(X+scroll_x#)*Tile_width,(y+scroll_y#)*Tile_height,tile_matrix(3,x,y),t\x+22,t\y+4,20,61) Then
prüft auf Kollision vom Player mit den Boxentileset. Funzt gut. Das: Code: [AUSKLAPPEN] If (t\x+42) < ((x+scroll_x#)*tile_width) Or (t\x+22) > (((x+scroll_x#)*tile_width))+tile_width) Then soll prüfen,ob sich er Spieler neben einer Box befindet. Funzt : nicht,ist auch das eigentliche problem. Nähere Erläuterungen: Code: [AUSKLAPPEN] t\x : das ist ein Type-Feld des players und gibt die x-koordinate zurück.
die anderen Fields dürften wohl klar sein. Das: Code: [AUSKLAPPEN] t\collide_boxes = 1
t\x# = t\old_X# scroll_x# = Old_scroll_x# scroll_y# = Old_scroll_y# Das lässt den player von der Box "apprallen" und setzt die collide_boxes Variable auf true. Funzt: sehr gut. Das: Code: [AUSKLAPPEN] If (t\y+64 <= ((y+scroll_y#)*tile_height)+tile_height) Then
t\collide_boxes = 1 t\y# = t\old_y# t\jump = 0 t\vy# = 0 EndIf Das prüft dann,wenn der player nicht neben der Kiste steht,ob der Player sich denn dann auf der Kiste befindet. Wenn dies sich bewahrheitet,Bleibt der player auf der Kiste stehen,kann sich aber hin und herbewegen. Funzt: sehr gut. Nähere Erläuterungen: Code: [AUSKLAPPEN] If (t\y+64 : 64 werden addiert,da der Player 64 Pixel hoch ist.
Code: [AUSKLAPPEN] (t\x+42) / Code: [AUSKLAPPEN] (t\x+22) : 42 bzw. 22 werden hinzuaddiert,weil die Frames eine Breite von 64 Pixeln besitzen,aber der Player selber,genau in der mitte von dem Frame platziert wurde. Deswegen werden 42 bzw. 22 hinzuaddiert.
Also,bitte äußert euch! Wenn ihr etwas nicht verstanden habt,dann meldet euch bitte. Ich hab mir jetzt schon einen ast geschrieben,damit ihr mir besser helfen könnt. Gebt Bescheid,wenn ihr eine idee habt,woran das lliegt! THX! |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hah,ich hab das Problem gelöst....
Code: [AUSKLAPPEN] If ImageRectCollide(Tileset_boxes_gfx,(X+scroll_x#)*Tile_width,(y+scroll_y#)*Tile_height,tile_matrix(3,x,y),t\x+22,t\y+4,20,61) Then
If (t\old_x#+42) <= ((x+scroll_x#)*tile_width) Or (t\old_x#+22) >= ((((x+scroll_x#)*tile_width)+tile_width)) Then t\collide_boxes = 1 t\x# = t\old_X# scroll_x# = Old_scroll_x# scroll_y# = Old_scroll_y# Else If (t\y+64 <= ((y+scroll_y#)*tile_height)+tile_height) Then t\collide_boxes = 1 t\y# = t\old_y# t\jump = 0 t\vy# = 0 EndIf EndIf Else t\collide_boxes = 0 EndIf Man bin ich gut 8) ![]() Dieser thread besteht zwar jetzt aus einem Monolog,aber egal ![]() |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wollte gerade helfen ...
Vieleicht machste es aber trotzdem übersichtlicher xmin#=(x+scroll_x#)*tile_width xmax#=(x+scroll_x#)*tile_width+tile_width If (t\x+42 < xmin) Or (t\x +22> xmax) Then |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, danke,das muss ich wohl machen,nehme ich mir dann mal ebend vor. Da gibt es noch eine kleine Sache:
Wo muss das hier hin? Code: [AUSKLAPPEN] Old_scroll_x# = scroll_x# Old_scroll_y# = scroll_y# Das muss doch eigentlich direkt davor,wo ich den scroll_x# wert ändere,oder nicht? Aber ich habe 2 Stellen wo ich das mache... ![]() |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Würde ich anders machen ,
erst ne Variable nehmen wo man hin will und wenn da keine Collision statt findet dann den Wert übernehmen und das für X & Y getrennt machen . Das mit der Kiste , wenn du auf der Kiste bist ist die Collision ja genau anders herum, also wenn du in der Luft bist fällste wieder ne Ebene runter . Auf der Kiste kannste also in alle Richtungen laufen bis wieder nen Hindernis auf dieser Ebene kommt . |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Markus2 hat Folgendes geschrieben: Das mit der Kiste ,
wenn du auf der Kiste bist ist die Collision ja genau anders herum, also wenn du in der Luft bist fällste wieder ne Ebene runter . Auf der Kiste kannste also in alle Richtungen laufen bis wieder nen Hindernis auf dieser Ebene kommt . Versteh ich jetzt nicht wirklich. Das klappt schon bei mir,also das der von einer Kiste runterfällt und so weiter... Er kann sich auch schon auf ihr bewegen auch kein Problem. Meinst du das? |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
War so gemeint falls die Kiste mal nicht das ganze Teil ausfüllt . | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group