Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash
Flash Forum d'entraide sur la technologie Flash (Cours, FAQs, Sources)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/09/2007, 08h28   #1
Membre actif
 
Avatar de jbidou88
 
Inscription : avril 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 483
Points : 187
Points : 187
Par défaut [FLASH 8] Problème de hitTest pour jeux de plate-forme

Bonjour, je suis en train de réaliser un petit jeu de plate-forme et j'ai quelque problème avec mes hitTest pour les collisions. Quelqu'un a-t-il une autre solution que d'utiliser les hitTest ou non ? Je mets ma source à disposition si quelqu'un veux jeter un coup d'oeil.

Merci de votre aide
Fichiers attachés
Type de fichier : fla test.fla (64,0 Ko, 7 affichages)
jbidou88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 09h18   #2
Rédacteur
 
Avatar de The_Pretender
 
Homme Matthieu DELOISON
Formateur ActionScript Flash
Inscription : juin 2004
Messages : 645
Détails du profil
Informations personnelles :
Nom : Homme Matthieu DELOISON
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Formateur ActionScript Flash
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2004
Messages : 645
Points : 3 673
Points : 3 673
Bonjour,

Tu peux utiliser les coordonnées et la taille de tes objets pour savoir si ils sont en collision. Mais ca va faire beaucoup de calcul.
Je ne pense pas que ce soit la meilleure solution.
__________________
Découvrez : Tutoriels, ressources AS2 et AS3
La Méthode AS3 Facile pour développer des applications et jeux Flash en ActionScript 3 : ActionScript-Facile.com
The_Pretender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 09h21   #3
Membre actif
 
Avatar de jbidou88
 
Inscription : avril 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 483
Points : 187
Points : 187
Mon problème est que les objets et mon personnage ce superpose un petit peu certaine fois.
jbidou88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 12h50   #4
Membre chevronné
 
Avatar de luta
 
Inscription : novembre 2003
Messages : 1 038
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 1 038
Points : 691
Points : 691
Envoyer un message via MSN à luta
moi personnelement j aurais essayer de calculer la prochaine position d un personnage...
par exemple imaginons le personage en train de tomber sur une plateforme
et bien il vaut mieu calculer sa position suivante avant de la déplacer et détecter sil est dans l interval de la plateforme (_x) et s il actuellement il est audessus (_y) et a la prochaine position... s il est en dessous (_y) et toujours dans l interval de la plateforme...
si toutes ces conditions sont respectées alors la prochaine position sera SUR la plateforme...

Petit conseil, j ai commencé à coder un jeu de plateforme...et franchement le hittest c est vraiment pas indiqué
luta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 12h57   #5
Membre actif
 
Avatar de jbidou88
 
Inscription : avril 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 483
Points : 187
Points : 187
Tu me conseillerais quoi comme méthode à la place des hitTest ???
jbidou88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 13h17   #6
Rédacteur
 
Avatar de The_Pretender
 
Homme Matthieu DELOISON
Formateur ActionScript Flash
Inscription : juin 2004
Messages : 645
Détails du profil
Informations personnelles :
Nom : Homme Matthieu DELOISON
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Formateur ActionScript Flash
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2004
Messages : 645
Points : 3 673
Points : 3 673
Citation:
Envoyé par The_Pretender Voir le message
Bonjour,

Tu peux utiliser les coordonnées et la taille de tes objets pour savoir si ils sont en collision. Mais ca va faire beaucoup de calcul.
Je ne pense pas que ce soit la meilleure solution.
Citation:
Envoyé par luta Voir le message
moi personnelement j aurais essayer de calculer la prochaine position d un personnage...
par exemple imaginons le personage en train de tomber sur une plateforme
et bien il vaut mieu calculer sa position suivante avant de la déplacer et détecter sil est dans l interval de la plateforme (_x) et s il actuellement il est audessus (_y) et a la prochaine position... s il est en dessous (_y) et toujours dans l interval de la plateforme...
si toutes ces conditions sont respectées alors la prochaine position sera SUR la plateforme...

Petit conseil, j ai commencé à coder un jeu de plateforme...et franchement le hittest c est vraiment pas indiqué
C'est aussi ce que je lui préconisais en quelque sorte.
Il faut développé un petit moteur qui à partir de la position et de la taille de l'objet, il détermine si il y a collision ou non.
__________________
Découvrez : Tutoriels, ressources AS2 et AS3
La Méthode AS3 Facile pour développer des applications et jeux Flash en ActionScript 3 : ActionScript-Facile.com
The_Pretender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 13h30   #7
Membre actif
 
Avatar de jbidou88
 
Inscription : avril 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 483
Points : 187
Points : 187
Ökay je vais essayé la méthode qui consiste a calculer la prochaine valeur du perso.
jbidou88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2007, 16h46   #8
Membre actif
 
Avatar de jbidou88
 
Inscription : avril 2006
Messages : 483
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 483
Points : 187
Points : 187
Cette solution fontionne bien, voila ce que ça donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
var v_deplacement = 5;
 
function droite () {
 
	if(!sol.hitTest(perso._x+(perso._width/2)+v_deplacement,perso._y,true)) {
		if(!sol.hitTest(perso._x+(perso._width/2)+v_deplacement,perso._y-(perso._height/2),true)) {
			if(!sol.hitTest(perso._x+(perso._width/2)+v_deplacement,perso._y+(perso._height/2),true)) {
				perso._x += v_deplacement;	
			}
		}
	} else {
		if(!sol.hitTest(perso._x+(perso._width/2)+1,perso._y-(perso._height/2),true)) {
			if(!sol.hitTest(perso._x+(perso._width/2)+1,perso._y+(perso._height/2),true)) {
				if(!sol.hitTest(perso._x+(perso._width/2)+1,perso._y,true)) {
					perso._x += 1;
				}
			}
		}
	}
}
 
function gauche () {
 
	if(!sol.hitTest(perso._x-(perso._width/2)-v_deplacement,perso._y,true)) {
		if(!sol.hitTest(perso._x-(perso._width/2)-v_deplacement,perso._y-(perso._height/2),true)) {
			if(!sol.hitTest(perso._x-(perso._width/2)-v_deplacement,perso._y+(perso._height/2),true)) {
				perso._x -= v_deplacement;
			}
		}
	} else {
		if(!sol.hitTest(perso._x-(perso._width/2)-1,perso._y-(perso._height/2),true)) {
			if(!sol.hitTest(perso._x-(perso._width/2)-1,perso._y+(perso._height/2),true)) {
				if(!sol.hitTest(perso._x-(perso._width/2)-1,perso._y,true)) {
					perso._x -= 1;
				}
			}
	 	}
	}
}
 
function saut () {
	if(!sol.hitTest(perso._x,perso._y-(perso._height/2)-v_deplacement,true)) {
		if(!sol.hitTest(perso._x-(perso._width/2),perso._y-(perso._height/2)-v_deplacement,true)) {
			if(!sol.hitTest(perso._x+(perso._width/2),perso._y-(perso._height/2)-v_deplacement,true)) {
				perso._y -= v_deplacement;
			}
		}
	} else {
		if(!sol.hitTest(perso._x,perso._y-(perso._height/2)-1,true)) {
			if(!sol.hitTest(perso._x-(perso._width/2),perso._y-(perso._height/2)-1,true)) {
				if(!sol.hitTest(perso._x+(perso._width/2),perso._y-(perso._height/2)-1,true)) {
					perso._y -= 1;
				}
			}
		}
	}
}
 
function bas () {
	if(!sol.hitTest(perso._x,perso._y+(perso._height/2)+v_deplacement,true)) {
		if(!sol.hitTest(perso._x-(perso._width/2),perso._y+(perso._height/2)+v_deplacement,true)) {
			if(!sol.hitTest(perso._x+(perso._width/2),perso._y+(perso._height/2)+v_deplacement,true)) {
				perso._y += v_deplacement;
			}
		}
	} else {
		if(!sol.hitTest(perso._x,perso._y+(perso._height/2)+1,true)) {
			if(!sol.hitTest(perso._x-(perso._width/2),perso._y+(perso._height/2)+1,true)) {
				if(!sol.hitTest(perso._x+(perso._width/2),perso._y+(perso._height/2)+1,true)) {
					perso._y += 1;
				}
			}
		}
	}
}
jbidou88 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 09h48   #9
Membre chevronné
 
Avatar de luta
 
Inscription : novembre 2003
Messages : 1 038
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 1 038
Points : 691
Points : 691
Envoyer un message via MSN à luta
Super!
Personnelement je n aurais meme pas utilisé le hitTest...
en effet imagine que ton test gauche() fasse que perso._x+(perso._width/2)+v_deplacement soit supérieur à la distance max couverte par l objet sol...alors ton personnage 'traversera' le mur...

Donc j aurai juste fait une comparaison de valeurs _x avant et _x apres.

Maintenant si ca marche comme ça.... bah voila
luta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h13.


 
 
 
 
Partenaires

Hébergement Web