
Uploaded with ImageShack.us
32 Bit-Version-Download: http://purebasic-projekte.jimdo.com/downloads/
Code: Alles auswählen
Enumeration 1 ;-> Danke für den Hinweis kswb73
#Collision_Top ;Auf den Boden geklatscht
#Collision_Bottom ;An die Decke gesprungen
#Collision_Left ;Gegen die linke Wand gedonnert
#Collision_Right ;Gegen die rechte Wand gedonnert
EndEnumeration
Procedure.i Collision(AX.f, AY.f, AWidth.f, AHeight.f, ADX.f, ADY.f, BX.f, BY.f, BWidth.f, BHeight.f)
;By Josef Sniatecki
Protected M.f, Y.f
If AX < BX + BWidth And AX + AWidth > BX And AY < BY + BHeight And AY + AHeight > BY
If ADX > 0
If ADY > 0
M = ADY/ADX
Y = AY - ((AX + AWidth) - BX)*M
If Y + AHeight > BY
ProcedureReturn #Collision_Left
Else
ProcedureReturn #Collision_Top
EndIf
ElseIf ADY < 0
M = ADY/ADX
Y = AY - ((AX + AWidth) - BX)*M
If Y < BY + BHeight
ProcedureReturn #Collision_Left
Else
ProcedureReturn #Collision_Bottom
EndIf
Else
ProcedureReturn #Collision_Left
EndIf
ElseIf ADX < 0
If ADY < 0
M = ADY/ADX
Y = AY + ((BX + BWidth) - AX)*M
If Y > BY + BHeight - 1
ProcedureReturn #Collision_Bottom
Else
ProcedureReturn #Collision_Right
EndIf
ElseIf ADY > 0
M = ADY/ADX
Y = AY + ((BX + BWidth) - AX)*M
If Y + AHeight - 1 < BY
ProcedureReturn #Collision_Top
Else
ProcedureReturn #Collision_Right
EndIf
Else
ProcedureReturn #Collision_Right
EndIf
ElseIf ADY > 0
ProcedureReturn #Collision_Top
ElseIf ADY < 0
ProcedureReturn #Collision_Bottom
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Code: Alles auswählen
Select Collision(PlayerX, PlayerY, PlayerWidth, PlayerHeight, PlayerMoveX, PlayerMoveY, WallX, WallY, WallWidth, WallHeight)
Case #Collision_Top
PlayerY = WallY - PlayerHeight
PlayerMoveY = 0
Case #Collision_Bottom
PlayerY = WallY + WallHeight
PlayerMoveY = 0
Case #Collision_Left
PlayerX = WallX - PlayerWidth
PlayerMoveX = 0
Case #Collision_Right
PlayerX = WallX + WallWidth
PlayerMoveX = 0
EndSelect