AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez
 

 Script de détection de collision avec une direction HBGD

Aller en bas 
AuteurMessage
loucheman
Très bonne participation
loucheman

Messages : 115

Script de détection de collision avec une direction HBGD Empty
MessageSujet: Script de détection de collision avec une direction HBGD   Script de détection de collision avec une direction HBGD EmptySam 19 Mai 2007 - 15:02

Script de détection de collision avec une direction Haut,Bas,Gauche,Droite
Sert à savoir s'il y a une collision à x,y en bas (ou à gauche ou à droite, ou en haut...) par exemple...

[edit]
Dans votre jeu de platforme, vous voulez savoir s'il y a collision en bas de votre perso avec le plancher : ce script est pour vous !

vous voulez savoir s'il y a collision entre la tête de votre perso et le plancher qui est au dessus de vous lors d'un saut : ce script est pour vous !

Pleins d'usages !

Code:
//Script : CheckCollision
//Par Loucheman, Crédit apprécié si vous utilisez ce script !

//Verifie s'il y a collision avec un objet dans une direction précise
//Retourne l'ID de l'instance entrant en collision, noone si aucune collision

//argument0 : Position X à vérifier : normalement X de l'objet mais peut être différent si pour vérifier un futur mouvement par exemple
//argument1 : Position Y à vérifier
//argument2 : direction à vérifier
//            1 = droite
//            2 = haut
//            3 = gauche
//            4 = bas
//argument3 : objet à vérifier si collision
//argument4 : precice
//            true = vérification précise de la collision
//            false = vérification non précise de la collision

var ObjectCollision,X,Y;

X = argument0
Y = argument1

switch (argument2)
    {
    case 1://droite
        {
        x1 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index)  + 1
        y1 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index)   
        x2 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index)  + 1
        y2 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index)
        return collision_line(x1,y1,x2,y2,argument3,argument4,true)
        break
        }
    case 2://haut
        {
        x1 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index) 
        y1 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index)    - 1
        x2 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index) 
        y2 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index)    - 1
        return collision_line(x1,y1,x2,y2,argument3,argument4,true)
        break
        }
    case 3://gauche
        {
        x1 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index)  - 1
        y1 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index)   
        x2 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index)  - 1
        y2 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index)
        return collision_line(x1,y1,x2,y2,argument3,argument4,true)
        break
        }
    case 4://bas
        {
        x1 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index) 
        y1 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index) + 1
        x2 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index) 
        y2 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index) + 1
        return collision_line(x1,y1,x2,y2,argument3,argument4,true)
        break
        }
    default :
        {
        show_message("Mauvaise utilisation de la fonction CheckCollision!!!")
        }
    }

Exemple d'utilisation de la fonction :
Code:
if keyboard_check_direct(vk_up) and CheckCollision(x,y+1,4,VPlancher,false) then
//Si la touche flèche haut est pesée et que le perso est sur un mur JUMP!
    {   
    vspeed=-5
    }

"x" veut dire x de mon objet
"y+1" veut dire 1 pixel en dessous de mon objet
"4" veut dire détection en bas du sprite de mon objet
***en donnant y+1 comme paramètre j'effectue un test de collision
1 pixel en dessous de bbox_bottom...
"VPlancher" est l'objet avec lequel je veut tester s'il y a une collision
"false" veut dire détection non précise de la collision avec VPlancher
***Donc en utilisant la bounding box de VPlancher...

J'espère que cela vous sera utile !

Loucheman
Revenir en haut Aller en bas
loucheman
Très bonne participation
loucheman

Messages : 115

Script de détection de collision avec une direction HBGD Empty
MessageSujet: Re: Script de détection de collision avec une direction HBGD   Script de détection de collision avec une direction HBGD EmptyVen 1 Juin 2007 - 1:39

Voici une nouvelle version de CheckCollision : CheckCollisionAngle !

À quoi ça sert vous me dîtes : si vous avez la version enregistrée, vous utilisez surement image_angle pour que l'angle de la sprite suive la direction de votre objet. C'est la même chose pour ce script, il détecte les collisions selon un angle passé en paramètre...

Un exemple : vous faîtes un petit jeu de tank, vous voulez savoir s'il y a collision entre le Mur et l'avant du tank (ex: pour faire reculer le tank un peu s'il y a collision). Le tank peut tourner à 360 degrés, donc l'avant du tank peut être entre 0 et 360 degres. Juste à appeler la fonction pour voir s'il y a collision à droite (car dans l'image de mon tank, le devant du tank pointe vers la droite), entre mon tank et l'objet Mur selon la direction de mon objet!!!


//Script : CheckCollisionAngle
//Par Loucheman, Crédit apprécié si vous utilisez ce script !

//Verifie s'il y a collision avec un objet dans une direction précise avec un angle
//gauche signifie le côté gauche de la sprite quand l'angle est de 0 degre...

//argument0 : Position X à vérifier : normalement X de l'objet mais peut être différent si pour vérifier un futur mouvement par exemple
//argument1 : Position Y à vérifier
//argument2 : direction à vérifier
// 1 = droite
// 2 = haut
// 3 = gauche
// 4 = bas
//argument3 : angle de la sprite
//argument4 : objet à vérifier si collision
//argument5 : precice
// true = vérification précise de la collision
// false = vérification non précise de la collision

//Exemple : obj = CheckCollisionAngle(x,y,3,direction,Mur,false)
// "x" veut dire x de mon objet
// "y+1" veut dire 1 pixel en dessous de mon objet
// "4" veut dire détection en bas du sprite de mon objet
// ***en donnant y+1 comme paramètre j'effectue un test de collision
// 1 pixel en dessous de bbox_bottom de mon objet...
// Angle de la sprite (normalement direction)
// "VMur" est l'objet avec lequel je veut tester s'il y a une collision
// "false" veut dire détection non précise de la collision avec VMur
// ***Donc en utilisant la bounding box de VMur...


var X,Y,x1,y1,x2,y2,x1Angle,y1Angle,x2Angle,y2Angle;

X = argument0
Y = argument1

switch (argument2)
{
case 1://droite
{
x1 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index) //+ 1
y1 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index)-0
x2 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index) //+ 1
y2 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index)+0
x1Angle = lengthdir_x(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
y1Angle = lengthdir_y(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
x2Angle = lengthdir_x(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
y2Angle = lengthdir_y(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
http://Controller.STR=string(X)+" / "+string(Y)+" / "+string(x1)+" / " + string(y1)+" / " + string(x2)+" / " + string(y2)+" / "
http://Controller.STR=string(x1Angle)+" / " + string(y1Angle)+" / " + string(x2Angle)+" / " + string(y2Angle)+" / "
return collision_line(X+x1Angle,Y+y1Angle,X+x2Angle,Y+y2Angle,argument4,argument5,true)
break
}
case 2://haut
{
x1 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index)+2
y1 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index) //- 1
x2 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index) -2
y2 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index) //- 1
x1Angle = lengthdir_x(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
y1Angle = lengthdir_y(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
x2Angle = lengthdir_x(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
y2Angle = lengthdir_y(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
return collision_line(X+x1Angle,Y+y1Angle,X+x2Angle,Y+y2Angle,argument4,argument5,true)
break
}
case 3://gauche
{
x1 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index) //- 1
y1 = Y - sprite_yoffset + sprite_get_bbox_top(sprite_index) -0
x2 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index) //- 1
y2 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index)+0
x1Angle = lengthdir_x(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
y1Angle = lengthdir_y(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
x2Angle = lengthdir_x(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
y2Angle = lengthdir_y(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
return collision_line(X+x1Angle,Y+y1Angle,X+x2Angle,Y+y2Angle,argument4,argument5,true)
break
}
case 4://bas
{
x1 = X - sprite_xoffset + sprite_get_bbox_left(sprite_index) +2
y1 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index) //+ 1
x2 = X - sprite_xoffset + sprite_get_bbox_right(sprite_index) -2
y2 = Y - sprite_yoffset + sprite_get_bbox_bottom(sprite_index) //+ 1
x1Angle = lengthdir_x(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
y1Angle = lengthdir_y(point_distance(X,Y,x1,y1),argument3+point_direction(X,Y,x1,y1))
x2Angle = lengthdir_x(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
y2Angle = lengthdir_y(point_distance(X,Y,x2,y2),argument3+point_direction(X,Y,x2,y2))
return collision_line(X+x1Angle,Y+y1Angle,X+x2Angle,Y+y2Angle,argument4,argument5,true)
break
}
default :
{
show_message("Mauvaise utilisation de la fonction CheckCollision!!!")
}
}

_________________
Loucheman
Revenir en haut Aller en bas
 
Script de détection de collision avec une direction HBGD
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: