Hi,
I would like to put very easy tips in the code archive. With this first one, you can make a perfect collision with the 4 sides of a squre ( nice for plateformers, etc ). Please, run this code and tell me if that's ok, and I'll put it in the code archive.
;nom de l'application
AppTitle "Collision avec les quatre cotes d'un carre V1.0"
;initialisation du mode graphique
Graphics 640,480,16
;creation de l'image #01
CreateImage01X#=128
CreateImage01Y#=64
CreateImage01=CreateImage(CreateImage01X,CreateImage01Y)
;creation de l'image #02
CreateImage02X#=64
CreateImage02Y#=128
CreateImage02=CreateImage(CreateImage02X,CreateImage02Y)
;variables de l'image #01
Image01X#=0;image 01 X
Image01Y#=0;image 01 Y
Image01Xtampon#=0;image 01 X tampon
Image01Ytampon#=0;image 01 Y tampon
Image01Xvelocite#=0;velocite Image 01 X
Image01Yvelocite#=0;velocite Image 01 Y
;variables de l'image #02
Image02X#=288;image 02 X
Image02Y#=208;image 02 Y
;extra
ExtraEndIf%=0;pour aller sur le pointeur
;*****************
;* boucle du jeu *
;*****************
;initialise le tampon secondaire
SetBuffer BackBuffer()
;tant que "echappe" n'a pas ete presse
While Not KeyDown(1)
;/////////////////////////////////////////////////////////////////////////
;couleur du rafraichissement du tampon secondaire
ClsColor 255,0,0
;efface le tampon secondaire
Cls
;/////////////////////////////////////////////////////////////////////////
;calcul de la velocite Image 01
Image01X=(Image01X+Image01Xvelocite)
Image01Y=(Image01Y+Image01Yvelocite)
;/////////////////////////////////////////////////////////////////////////
;test de la collision
If ImagesOverlap (CreateImage01,Image01X,Image01Y,CreateImage02,Image02X,Image02Y)
;collision haut
If (Image01Ytampon+CreateImage01Y-1)<Image02Y
Image01Y=(Image02Y-CreateImage01Y)
ExtraEndIf=1
EndIf
If ExtraEndIf=1 Goto Saut
;collision bas
If (Image01Ytampon+1)>(Image02Y+CreateImage02Y)
Image01Y=(Image02Y+CreateImage02Y)
ExtraEndIf=1
EndIf
If ExtraEndIf=1 Goto Saut
;collision gauche
If (Image01Xtampon+CreateImage01X-1)<Image02X
Image01X=(Image02X-CreateImage01X)
ExtraEndIf=1
EndIf
If ExtraEndIf=1 Goto Saut
;collision droite
If (Image01Xtampon+CreateImage01X+1)>(Image02X+CreateImage02X)
Image01X=(Image02X+CreateImage02X)
EndIf
;pointeur
.Saut
EndIf
;/////////////////////////////////////////////////////////////////////////
;bloc controle par le joueur
DrawBlock CreateImage01,Image01X,Image01Y
;bloc statique
DrawBlock CreateImage02,Image02X,Image02Y
;/////////////////////////////////////////////////////////////////////////
;affiche les textes
Text 0,00,"Informations"
Text 0,20,"Image01X "+Image01X
Text 0,30,"Image01Y "+Image01Y
Text 0,50,"Image01Xvelocite "+Image01Xvelocite
Text 0,60,"Image01Yvelocite "+Image01Yvelocite
;/////////////////////////////////////////////////////////////////////////
;mise a jour
Image01Xtampon=Image01X
Image01Ytampon=Image01Y
ExtraEndIf=0
Image01Xvelocite=0
Image01Yvelocite=0
;/////////////////////////////////////////////////////////////////////////
;basculement des tampons
Flip
;/////////////////////////////////////////////////////////////////////////
;clavier haut
If KeyDown(200) Image01Yvelocite=(-2)
;clavier bas
If KeyDown(208) Image01Yvelocite=(+2)
;clavier gauche
If KeyDown(203) Image01Xvelocite=(-2)
;clavier droite
If KeyDown(205) Image01Xvelocite=(+2)
;/////////////////////////////////////////////////////////////////////////
;fin de la boucle
Wend
End
|