Discuss Scratch

lolrenz12
Scratcher
1000+ posts

Comment peut-on faire pointer un objet vers un clone?

Bonjour, je suis un autre mec! Je me demander comment je peut faire qu'un objet pointe vers le clone d'un autre. Savez-vous?

Itharius
Scratcher
1000+ posts

Comment peut-on faire pointer un objet vers un clone?

ah priori , j'enregistrerais les coordonnées dans des listes et je ferais pointer mon objet vers l'élément correspondant à l'ID du clone.

lolrenz12
Scratcher
1000+ posts

Comment peut-on faire pointer un objet vers un clone?

Bien vu! Mais… comment produis-je différents IDs?

NilsTheBest
Scratcher
1000+ posts

Comment peut-on faire pointer un objet vers un clone?


lolrenz12 wrote:

Bien vu! Mais… comment produis-je différents IDs?
Tu pourrais essayer ceci:
répéter (...) fois
ajouter à [ID v] (0)
créer un clone de [... v]
end

Sinon je suis sûr qu'il y a une manière plus élaborée et approfondie de donner à chaque clone un ID.

Last edited by NilsTheBest (Nov. 30, 2018 19:40:10)


NilsTheChair | 5 years on Scratch | 4000+ posts | former wiki editor | 332nd FPC | CoR founder
SBissay
Scratcher
500+ posts

Comment peut-on faire pointer un objet vers un clone?

Pour produire différents ID, le code de NTB est ce qu'il se fait de mieux je pense. Mais il est important que la variable ID soit “pour ce lutin uniquement”.

Ensuite, pour répondre à ta première question, je vois deux possibilités de pointer vers un clone :

  1. Utiliser un autre lutin invisible.
    En effet, tu peux mettre les coordonnées du clone vers lequel s'orienter dans des variables globales, puis envoyer un message pour que le lutin invisible se rende aux coordonnées enregistrées, et enfin pointer vers le lutin invisible.

    Exemple :
    Le clone :
    mettre [x v] à (abscisse x)
    mettre [y v] à (ordonnée y)
    envoyer à tous [position v]

    Le lutin invisible :
    quand je reçois [position v]
    aller à x: (x) y: (y)
    envoyer à tous [en place v]

    Le lutin qui doit s'orienter :
    quand je reçois [en place v]
    s'orienter vers [lutin invisible v]

    C'est simple à mettre en place, mais ça a de gros inconvénient, notamment si plusieurs clones essaient d'envoyer leurs coordonnées en même temps…

  2. Du coup, la méthode qu'a commencé à évoquer Itharius.
    Important : les listes coord.x et xoord.y ne sont PAS pour ce lutin uniquement, mais par contre la variable ID l'est.
    Création des clones :
    quand le drapeau vert pressé
    mettre [ID v] à [1]
    répéter (n) fois
    créer un clone de [moi-même v]
    ajouter à [ID v] (1)
    end

    Les clones :
    quand je commence comme un clone
    répéter indéfiniment
    remplacer l'élément (ID) de la liste [coord.x v] par (abscisse x)
    remplacer l'élément (ID) de la liste [coord.y v] par (ordonnée y)
    end

    Bon, maintenant on sait comment mettre les coordonnées d'un clone dans une liste. Le problème restant, c'est comment s'orienter vers des coordonnées précises.
    Pour cela, il faut connaître l'angle entre le lutin à orienter et les coordonnées en question. La réponse, c'est la fonction atan2 (je ne vais pas rentrer dans les détails de trigo), et ensuite il faut traduire cet angle en orientation Scratch, qui vaut 90 - angle.

    Code :
    définir s'orienter vers (x) (y)
    si < (x) > (0)> alors
    mettre [angle v] à ([atan v] de ((y) / (x))
    sinon
    si <(x) < (0)> alors
    si <(y) < (0)> alors
    mettre [angle v] à (([atan v] de ((y) / (x))) - (180))
    sinon
    mettre [angle v] à (([atan v] de ((y) / (x))) + (180))
    end
    sinon
    si <(y) < (0)> alors
    mettre [angle v] à [-90]
    sinon
    mettre [angle v] à [90]
    end
    end
    end
    s'orienter à ((90)-(angle))

    Et voilà !

Generative art :              Pivot  :               Sudoku :
lolrenz12
Scratcher
1000+ posts

Comment peut-on faire pointer un objet vers un clone?

Merci pour vos réponses! Je crois que le topic est résolu!

Powered by DjangoBB