Simple collision question 2D

Blitz3D Forums/Blitz3D Beginners Area/Simple collision question 2D


;28-11-2004, version 1.0

;////////////////////////////////////////////////////////////////////////
;nom de l'application
AppTitle "collision bloc 1"

;////////////////////////////////////////////////////////////////////////
;variable du mode graphique
Const Resolution00%=640;X
Const Resolution01%=480;Y
Const Resolution02%=16;profondeur des couleurs
Const Resolution03%=2;mode graphique

;////////////////////////////////////////////////////////////////////////
;initialisation du mode graphique
Graphics Resolution00,Resolution01,Resolution02,Resolution03

.VarCollision
;////////////////////////////////////////////////////////////////////////
;variable, collisions

;image 0, dimension
Const C00%=128;taille, X
Const C01%=128;taille, Y
;image 0, dimension collision [0]
Const C02%=64;taille, X
Const C03%=64;taille, Y
Const C04%=((C00-C02)/2);espace, X
Const C05%=((C01-C03)/2);espace, Y

;image 1, dimension
Const C10%=64;taille, X
Const C11%=64;taille, Y

.VarJoueur
;////////////////////////////////////////////////////////////////////////
;variable, joueur
J00#=100.0;position, X
J01#=100.0;position, Y
J02#=J00;position, X tampon
J03#=J01;position, Y tampon

.VarDecor
;////////////////////////////////////////////////////////////////////////
;variable, decor
D00%=288;position, X
D01%=208;position, Y


;*****************
;* boucle du jeu *
;*****************


;////////////////////////////////////////////////////////////////////////
;initialise le tampon secondaire
SetBuffer BackBuffer()

;////////////////////////////////////////////////////////////////////////
;tant que "echappe" n'a pas ete presse
While Not KeyDown(1)

;////////////////////////////////////////////////////////////////////////
;efface le tampon secondaire
Cls

.L00
;////////////////////////////////////////////////////////////////////////
;collision

If RectsOverlap (Floor#(J00+C04),Floor#(J01+C05),C02,C03,D00,D01,C10,C11)
	
	Text 0,00,"Collision !!!"
	
	;haut
	If Floor#((J03+C05)+C03)<=D01
		
		;mise a jour
		J01=Floor#((D01-C05)-C03)
		
		;saute au pointeur
		Goto P_Collision00
	EndIf
	
	;bas
	If Floor#(J03+C05)>=(D01+C11)
		
		;mise a jour
		J01=Floor#((D01+C11)-C05)
		
		;saute au pointeur
		Goto P_Collision00
	EndIf
	
	;gauche
	If Floor#(J02+C04+C02)<=D00
		
		;mise a jour
		J00=Floor#((D00-C04)-C02)
		
		;saute au pointeur
		Goto P_Collision00
	EndIf
	
	;droite
	If Floor#(J02+C04)>=(D00+C10)
		
		;mise a jour
		J00=Floor#((D00+C10)-C04)
		
		;saute au pointeur
		Goto P_Collision00
	EndIf
EndIf

;pointeur
.P_Collision00

.L01
;////////////////////////////////////////////////////////////////////////
;dessin
Color 0,255,255
Rect Floor#(J00+C04),Floor#(J01+C05),C02,C03,1

;dessin
Color 0,0,255
Rect D00,D01,C10,C11,1

.L02
;////////////////////////////////////////////////////////////////////////
;texte
Text 0,10,"J02 "+J02
Text 0,20,"D00 "+D00

.L03
;////////////////////////////////////////////////////////////////////////
;mise a jour
J02=J00;position, X tampon
J03=J01;position, Y tampon

;////////////////////////////////////////////////////////////////////////
;basculement des tampons
Flip

;////////////////////////////////////////////////////////////////////////
;haut
If KeyDown(200)
	J01=(J01-4.0);position, Y
EndIf

;bas
If KeyDown(208)
	J01=(J01+4.0);position, Y
EndIf

;gauche
If KeyDown(203)
	J00=(J00-4.0);position, X
EndIf

;droite
If KeyDown(205)
	J00=(J00+4.0);position, X
EndIf

;////////////////////////////////////////////////////////////////////////
;fin de la boucle
Wend

;////////////////////////////////////////////////////////////////////////
;fin du programme
End



>the first square (player) has a second square inside for the collision.