AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
TV LED 32” Continental Edison CELED32SAHD24B3
Voir le deal
139.99 €
-29%
Le deal à ne pas rater :
PC portable Gamer ERAZER DEPUTY P60 – 15,6” FHD 144Hz – i7-12è ...
999.99 € 1399.99 €
Voir le deal

 

 [GML][DnD] Empecher la création d'un instance d'instance

Aller en bas 
2 participants
AuteurMessage
Morlaer
Nouveau



Messages : 2

[GML][DnD] Empecher la création d'un instance d'instance Empty
MessageSujet: [GML][DnD] Empecher la création d'un instance d'instance   [GML][DnD] Empecher la création d'un instance d'instance EmptyLun 4 Juil 2016 - 16:35

Salut,

Je suis nouveau sur GMS, et j'ai un petit problème avec une instance rebelle.

En gros, j'ai créé une grille, et j'ai un obj_car et un obj mouse_click qui y sont aimanté.

Comme ca c'est ce que j'ai fait au tout début, ca à été fait en DnD, mais après fait la suite en GML.

En gros, j'ai 3 objets, obj_car, obj_mouseClick et obj_controller. Je vous met une courtes descriptions de ce que ces 3 objets contiennent.

MouseClick : step :
aimanté a la grille avec un place_snapped.
si obj_car est a la position de mouseClick alors obj_car saute à la position de mouseClick et mouseClick se détruit.
Car : step : si le nombre de mouseClick est égal a 1, obj_car bouge jusqu'a la position de mouseClick. Sinon, obj_car ne bouge pas.
Controller : global left button : Si le nombre de mouseClick est supérieur à 1, obj_car ne bouge pas, sinon créer l'instance mouseClick à la position de la souris.
step : j'ai ce bout de GML :
Code:
car_pos_x = obj_car.x;
car_pos_y = obj_car.y;

if !instance_exists(obj_mouseClick) {
    mouse_pos_x = null;
    mouse_pos_y = null;
}
else {
    mouse_pos_x = obj_mouseClick.x;
    mouse_pos_y = obj_mouseClick.y;
    if (mouse_pos_x - car_pos_x > 1 || mouse_pos_y - car_pos_y > 1 )
        {
        obj_car.speed = 0;
        
        }
}

Maintenant, quand je lance le jeu, si je clique sur une case adjacente à obj_car (y compris les diagonales), tout ce passe comme prévu, la voiture va jusqu'a mouseClick, ce dernier se détruit et tout va bien. Maintenant, si je clique à plus de 1 case, mouseClick se créé, mais la voiture n'a pas le droit de bouger donc elle se décale un peu vers mouseClick puis le jeu se bloque.

Maintenant, j'ai pensé qu'en détruisant mousClick quand il est a plus de 1 case de la voiture, le problème serait réglé. Du coup j'ai rajouté cette ligne sous "obj_car.speed = 0;" :
Code:
car_pos_x = obj_car.x;
car_pos_y = obj_car.y;

if !instance_exists(obj_mouseClick) {
    mouse_pos_x = null;
    mouse_pos_y = null;
}
else {
    mouse_pos_x = obj_mouseClick.x;
    mouse_pos_y = obj_mouseClick.y;
    if (mouse_pos_x - car_pos_x > 1 || mouse_pos_y - car_pos_y > 1 )
        {
        obj_car.speed = 0;
        with(obj_controller) instance_destroy();
        }
}

MouseClick se créer toujours, la voiture se bloque, exactement comme avant. Mais surtout, dorénavant les seules positions ou je peut vraiment bougé obj_car sont la case directement à gauche et la case directement au dessus. Toutes les autres bloquent.

Pourquoi cela se produit? Et pourquoi ça ne se produisait pas quand il n'y avait pas la ligne qui détruisait mouseClick?

J'ai beau avoir essayé plusieurs solutions, je n'arrive pas à résoudre ce problème.

Quelqu'un aurait une idée?

Merci!  hap
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****



Messages : 1452

[GML][DnD] Empecher la création d'un instance d'instance Empty
MessageSujet: Re: [GML][DnD] Empecher la création d'un instance d'instance   [GML][DnD] Empecher la création d'un instance d'instance EmptyLun 4 Juil 2016 - 17:46

Tout d'abord, bienvenue au CBNA Hat

Morlaer a écrit:
les seules positions ou je peut vraiment bougé obj_car sont la case directement à gauche et la case directement au dessus.
En effet, dans cette partie de code :
Code:
if (mouse_pos_x - car_pos_x > 1 || mouse_pos_y - car_pos_y > 1 )
{
    obj_car.speed = 0;
    //...
}
Tu arrêtes la voiture dès que mouse est indirectement à droite OU indirectement en bas de la voiture. En plus du || qui devrait être remplacé par un &&, tu oublies la gauche et le haut. Pour ne rien arranger, tu arrêtes la voiture quand elle est loin (différence de case > 1), alors que tu veux qu'elle s'arrête près de mouse.

Essaye donc en modifiant la condition ainsi :
Code:
if (abs(mouse_pos_x - car_pos_x) <= 1 && abs(mouse_pos_y - car_pos_y) <= 1 )

Cette partie du problème devrait être réglée, si je ne me suis pas trompé. Smile
(j'ai foutu des <= mais tu peux essayer avec des < si l'effet est meilleur bien sûr Wink )

Edit: et si tu veux des explications supplémentaires, je peux te faire un schéma Razz

_________________
côt.
Revenir en haut Aller en bas
https://cagibi.itch.io/
Morlaer
Nouveau



Messages : 2

[GML][DnD] Empecher la création d'un instance d'instance Empty
MessageSujet: Re: [GML][DnD] Empecher la création d'un instance d'instance   [GML][DnD] Empecher la création d'un instance d'instance EmptyLun 4 Juil 2016 - 17:58

Aaah merci! J'avais effectivement dans l'idée qu'il y avait un problème avec le mouseclick -car, mais je comprend toujours pas pourquoi sans la ligne instance_destroy ce problème n'à pas lieu..
Par contre pour le lieu d'arrêt de la voiture j'avais pas du tout vu, merci beaucoup.
Et est-ce que tu as une idée de pourquoi le mouseclick ne se détruit pas? Peut-être que je peut plutôt directement l'empêcher de se créer ? Ou alors la destruction de mouseclick rentre en conflit avec sa création dans controller --> global left button?
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****



Messages : 1452

[GML][DnD] Empecher la création d'un instance d'instance Empty
MessageSujet: Re: [GML][DnD] Empecher la création d'un instance d'instance   [GML][DnD] Empecher la création d'un instance d'instance EmptyLun 4 Juil 2016 - 18:09

J'ai ma petite idée sur comment supprimer efficacement l'objet mouseclick.
Tu remplaces les <= de mes conditions par des < afin que la voiture s'arrête en collision avec l'objet mouseclick (ils seront sur la même case). Puis, dans l'objet mouseclick lui-même, tu ajoutes un événement "collision avec la voiture", et dedans tu lui dis de s'auto-détruire (instance_destroy()). ^^

(et du coup il ne sera pas nécessaire de détruire l'obj_controller Razz )

_________________
côt.
Revenir en haut Aller en bas
https://cagibi.itch.io/
Contenu sponsorisé





[GML][DnD] Empecher la création d'un instance d'instance Empty
MessageSujet: Re: [GML][DnD] Empecher la création d'un instance d'instance   [GML][DnD] Empecher la création d'un instance d'instance Empty

Revenir en haut Aller en bas
 
[GML][DnD] Empecher la création d'un instance d'instance
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Creation dans la creation : nouvelle objet ingame
» Empêcher la répétition des image gif
» Empecher la superposition [résolu]
» Empecher le curseur de sortir de la fenetre du jeu
» Collision, empêcher l'empilement d'objet

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