AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [résolu] déplacement ennemie case par case

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Ender10
Nouveau


Messages : 4

MessageSujet: [résolu] déplacement ennemie case par case   Ven 8 Jan 2016 - 16:11

Bonjour à tous,

Je suis en train de faire un jeu tour par tour ou le joueur et l'ennemie se deplace case par case. J'ai programmé que quand le joueur est dans la porté de "vision" de l'ennemie, l'ennemie se dirige vers le joueur. Le probleme c'est que l'ennemie ne se deplace pas case par case vers le joueur (quand le joueur se déplace).



je voudrais faire comme pokemon donjon mystere (voir a 24 sec)


J'espère avoir été assez clair et merci d'avance pour votre aide Wink


Dernière édition par Ender10 le Dim 17 Jan 2016 - 14:37, édité 1 fois
Revenir en haut Aller en bas
Ender10
Nouveau


Messages : 4

MessageSujet: Re: [résolu] déplacement ennemie case par case   Sam 9 Jan 2016 - 12:58

Je vous montre le code (pour l'instant je n'ai pas encore crée la collision des murs)

Voila l'obj_joueur :
Code:
Create Event:

execute code:

gridSize = 32;
moveSpeed = 4;
isMoving = false;
moveTimer = 0;
speedX = 0;
speedY = 0;

Step Event:

execute code:

if (isMoving == false)
{
    if (keyboard_check_pressed(vk_right))
    {
        isMoving = true;
        moveTimer = gridSize;
        speedX = moveSpeed;
        speedY = 0;
    }
    if (keyboard_check_pressed(vk_left))
    {
        isMoving = true;
        moveTimer = gridSize;
        speedX = -moveSpeed;
        speedY = 0;
    }
    if (keyboard_check_pressed(vk_up))
    {
        isMoving = true;
        moveTimer = gridSize;
        speedX = 0;
        speedY = -moveSpeed;
    }
    if (keyboard_check_pressed(vk_down))
    {
        isMoving = true;
        moveTimer = gridSize;
        speedX = 0;
        speedY = moveSpeed;
    }
}

if (isMoving == true)
{
    x += speedX;
    y += speedY;
    
    moveTimer -= moveSpeed;
    if (moveTimer == 0) { isMoving = false; }
}

et l'obj_ennemie :
Code:
Create Event:

execute code:

gridSize = 32;
moveSpeed = 4;
isMoving = false;
moveTimer = 0;
speedX = 0;
speedY = 0;

Step Event:

execute code:

if (isMoving == false)
{
    if (keyboard_check_pressed(vk_left) || keyboard_check_pressed(vk_up) || keyboard_check_pressed(vk_right) || keyboard_check_pressed(vk_down))
    {
    // je sais pas quoi mettre pour qu'il se dirige vers le joueur
    }
}

if (isMoving == true)
{
    x += speedX;
    y += speedY;
    
    moveTimer -= moveSpeed;
    if (moveTimer == 0) { isMoving = false; }
}


Dite moi ce que je dois changer
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****
avatar

Messages : 1431

MessageSujet: Re: [résolu] déplacement ennemie case par case   Sam 9 Jan 2016 - 13:30

Tu peux faire un objet parent des deux, étant donné qu'une partie de leur code est la même, ça améliorera l'organisation et rendra le code moins lourd.
Tu peux également remplacer keyboard_check_pressed par keyboard_check pour un meilleur gameplay Wink

Pour le soucis de ton ennemi, si tu veux une IA pas trop développée tu peux voir d'abord si le héros est assez proche, puis bouger en fonction de la direction entre les deux objets.
Tu peux le faire en utilisant point_direction de l'ennemi au héros, un angle entre 45° et 135° par exemple signifie que l'ennemi doit aller vers le haut (les angles sous GM commencent à droite (0°) et vont dans le sens inverse des aiguilles d'une montre).

_________________
côt.
Revenir en haut Aller en bas
https://hyperdev.wordpress.com/
Ender10
Nouveau


Messages : 4

MessageSujet: Re: [résolu] déplacement ennemie case par case   Sam 9 Jan 2016 - 15:03

Merci de ta réponse Very Happy , j'ai ajouter la fonction point_direction dans l'evenement step de l'ennemi.
Mais je rencontre un autre problème Confused , c'est que l'ennemi se dirige seulement vers le bas...

Le Step event de obj_ennemi :
Code:
if (isMoving == false)
{
    if (keyboard_check(vk_left) || keyboard_check(vk_up) || keyboard_check(vk_right) || keyboard_check(vk_down))
    {
        // se déplace vers le haut
        if (46 < point_direction(x, y, obj_player.x, obj_player.y) < 135)
        {
        isMoving = true;
        moveTimer = gridSize;
        speedX = 0;
        speedY = -moveSpeed;
        }
        // se déplace vers la gauche
        if (136 < point_direction(x, y, obj_player.x, obj_player.y) < 225)
        {
        isMoving = true;
        moveTimer = gridSize;
        speedX = -moveSpeed;
        speedY = 0;
        }
        // se déplace vers le bas
        if (226 < point_direction(x, y, obj_player.x, obj_player.y) < 315)
        {
        isMoving = true;
        moveTimer = gridSize;
        speedX = 0;
        speedY = moveSpeed;
        }
        // se déplace vers la droite
        if (316 < point_direction(x, y, obj_player.x, obj_player.y) < 45)
        {
        isMoving = true;
        moveTimer = gridSize;
        speedX = moveSpeed;
        speedY = 0;
        }
    }
}

if (isMoving == true)
{
    x += speedX;
    y += speedY;
    
    moveTimer -= moveSpeed;
    if (moveTimer == 0) { isMoving = false; }
}

Ai-je fait une faute ? scratch
Revenir en haut Aller en bas
Ender10
Nouveau


Messages : 4

MessageSujet: Re: [résolu] déplacement ennemie case par case   Sam 9 Jan 2016 - 15:49

C bon j'ai corrigé moi même

if (46 < angle < 135)

if (46 < angle && angle < 135)

Merci Very Happy
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: [résolu] déplacement ennemie case par case   Sam 9 Jan 2016 - 16:11

Ender10 a écrit:
C bon j'ai corrigé moi même

if (46 < angle < 135)

if (46 < angle && angle < 135)

Merci Very Happy
En effet 46 < angle < 135 est incorrect
Ça équivaut à faire (46 < angle) < 135
Or (46 < angle) est un booléen, c-à-d une valeur égale à 1 (true) ou 0 (false)
Or dans tous les cas, 0 ou et 1 est inférieur à 135.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [résolu] déplacement ennemie case par case   

Revenir en haut Aller en bas
 
[résolu] déplacement ennemie case par case
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Retour à la case départ!
» Cold case
» CASE PRISON
» La bonne case Isabelle Eyoum
» Zvonimir à Neuchatel à la Case A Chocs ! 13/09/14 + "bonus"

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