[RESOLU]Arreter l'objet qui poursuit un autre

Généralités sur la programmation 3D
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

[RESOLU]Arreter l'objet qui poursuit un autre

Message par guerrier001 »

Bonjour c'est moi (encore une fois) je suis désoler si des gens sont en colère après se que j'ai fait (ne pas les avoir écouter quand ils disaient de commencer par le commencement, avoir mis leur nom sur un projet qu'il n'étaient pas au courant...). Alors voila j'ai un problème difficile a résoudre (facile pour certain):

Code : Tout sélectionner

If DM_EntityZ(*tiny)= DM_EntityZ(*sphere)-150

 DM_MoveEntity(*sphere,0,0,2)

EndIf
Voila je ne sais pas arrêter l'entité "sphere" qui se dirige sur l'entité "tiny" a au moins 45 m de lui

PS:Je remerci ceux qui ont voulu m'aider a un certain moment surtout a Cpl.Bator a tmyke et a Ar-S a qui je doit des excuses pour mon comportement. Je dit aussi que grâce a vous mon projet a avancer grandement.

PS2:Je sais aussi que tmyke a arrêter de travailler sur DM3D et travaille sur un autre mais je ne veux pas changer de moteur de peur d'avoir a changer tous le code de mon projet.
Dernière modification par guerrier001 le ven. 19/juin/2009 1:38, modifié 1 fois.
Le guerrier avance vers sa destiné!
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Je t'avoue que ta question mérite quelques précisions supplémentaire.

Ceci dit je dirais qu'il faut calculer le distance entre les deux entités (tiny et sphere)
et voir si il est inférieur à 45. non ?
(l'instruction DM_EntityDistance.f(*tiny, *sphere) est faite pour ce genre de cas).
Force et sagesse...
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

Merci tmyke je vais essayer dommage que cpl.Bator ne m'ai toujours pas pardonner de mes erreurs.

Edit: je crois pas que c'est ça, je voudrais que la sphère poursuit tiny entre 150 en 50 mètre mais en dessous de 50m il s'arrête mais si tiny bouge et est a plus de 50 mètre de lui il le suit encore jusqu'à atteindre au moins 50 mètre entre lui et tiny et qu'il ne bouge plus quand tiny se rapproche de lui a moins de 50 mètre.

PS:

Code : Tout sélectionner

DM_EntityZ(*tiny)=> DM_EntityZ(*sphere)-150

 DM_MoveEntity(*sphere,0,0,2)
Ce code me sert a arrêter la sphere si la valeur 150 entre tiny et lui est plus grand
Le guerrier avance vers sa destiné!
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Cela revient toujours à un contrôle de distance entre tes deux entités, des instructions existent pour
cela, et il n'est pas trop difficile de coder la chose en quelques lignes pour faire en
sorte qu'un element reste à une certaine distance d'un autre, ainsi que de tester régulièrement
si une entité s'approche en dessous d'un certains seuil d'une autre.
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

guerrier001 a écrit :Merci tmyke je vais essayer dommage que cpl.Bator ne m'ai toujours pas pardonner de mes erreurs.

Edit: je crois pas que c'est ça, je voudrais que la sphère poursuit tiny entre 150 en 50 mètre mais en dessous de 50m il s'arrête mais si tiny bouge et est a plus de 50 mètre de lui il le suit encore jusqu'à atteindre au moins 50 mètre entre lui et tiny et qu'il ne bouge plus quand tiny se rapproche de lui a moins de 50 mètre.
ben tu donne la solution toi meme :)

je traduit ce que tu dis :

si position_tiny>position_sphere+50 metres :avance tiny:fin_si
(si position_tiny est superieur a la position de la sphere+50 metres, on avance tiny)

si position_tiny<position_sphere+50 :stop tiny:fin_si

:)

ps : 'si' ça se dit 'IF' en purebasic
'fin_si' ça se dit 'endif' ;)

ces 'if' sont a évaluer pour la position X , y , et z , donc tu as 3 fois
a faire le test !! :)
guerrier001
Messages : 130
Inscription : dim. 11/janv./2009 15:04

Message par guerrier001 »

Je l'ai fait avec Z alors je le teste avec Z , je vais essayer cela.

Edit: merci maintenant je sais ce qu'il fallait faire:

Code : Tout sélectionner

DM_PointEntity(*sphere,*tiny)
; les personnage se suit de vue.
DM_EntityDistance.f(*tiny, *sphere)
;on calcul la distance avec le code qui suit:
If DM_EntityZ(*tiny)=> DM_EntityZ(*sphere)-50
;Si la distance point de vu Z de tiny est inférieur a celle de la sphere(la sphere c'est tiger le tigre),
DM_MoveEntity(*sphere,0,0,0)
;alors la sphere ne bouge pas (coucher dit tiny au tiger lol)
ElseIf DM_EntityZ(*tiny)=> DM_EntityZ(*sphere)-150
;alors que si la distance du point de vu est a moins de 150 entre tiny et la sphere(100 metre de distanceentre 50 150 metre) 
DM_MoveEntity(*sphere,0,0,2)
;alors la sphere le suit.
EndIf
;fin de ce code
If DM_EntityZ(*tiny)=> DM_EntityZ(*sphere)+150
; meme chose mais sauf qu'on calcule quand il sont de l'autre coter
 DM_MoveEntity(*sphere,0,0,0)
 ;toujour zero
 ElseIf  DM_EntityZ(*tiny)=> DM_EntityZ(*sphere)+50
; on recommence mais pour le faire marcher a l'envère (ce qui est bien avec sa on fait d'une piere deux coups, il avoir une vue de 360°)
 DM_MoveEntity(*sphere,0,0,2)
;Et la on lui dit de marcher
EndIf
;fin de celui-ci aussi
If  DM_EntityX(*tiny)=> DM_EntityX(*sphere)-50
;maintenant sur les coter
 DM_MoveEntity(*sphere,0,0,0)
;on l'arrete d'un coter
ElseIf DM_EntityX(*tiny)=> DM_EntityX(*sphere)-150
;mais si il est assez loin
 DM_MoveEntity(*sphere,0,0,2)
;il bouge de ce coter(il c'est la sphere alias tiger)
EndIf
;fin aussi
If DM_EntityX(*tiny)=> DM_EntityX(*sphere)+150
;On recommence encore un derniere fois le code de l'autre coter
 DM_MoveEntity(*sphere,0,0,0)
 ;il bouge pas quand il est tres proche de tiny
 ElseIf  DM_EntityX(*tiny)=> DM_EntityX(*sphere)+50
; mais la il est pret 
 DM_MoveEntity(*sphere,0,0,2)
;a le bondir dessus
EndIf
;et voila la dernière fin (je veux pas qu'il le suit en sautant betement comme le personnage, il a un cerveau l'ia alors pas de DM_EntityY).
Merci a vous deux sans quoi je serai perdu :D
Le guerrier avance vers sa destiné!
Répondre