Discuss Scratch

Vor_TeX
New to Scratch
5 posts

Problème ; 0 + 1 = 2

Bonjour,
J'ai un lutin qui construit des clones de lui-même. Ces clones (pour l'instant, 1 seul), bouge sur une map découpée en carré. Ce clone a deux variables ; Piquier_x et Piquier_y qui vont de, respectueusement, 1à10 (compris) et 1à15 (compris). On bouge ce lutin avec “z”, “q”, “d” et “s”.
Le script :

quand [ z] est cliqué
ajouter à [ Piquier_y] (1)

J'ai aussi un script qui transforme ce Piquier_y en ordonnée :

aller à x: (élément ( (Piquier_y)) de [list v] :: list) y: (0)

Sauf que, quand je l'execute, le clone avance de 2 au lieu d'1 !
Avez-vous une idée du problème ? Ou sinon, si vous avez besoin d'autres informations, n'hesitez-pas ! Ou encore, avec-vous eu le même problème une fois ?
Merci d'avance pour vos réponses !


cc_scratch_cc
Scratcher
24 posts

Problème ; 0 + 1 = 2

sorry for i donot know Français

I guess the cause is that there are multi objects listen the event. origin and all clones all received click event via same script
Vor_TeX
New to Scratch
5 posts

Problème ; 0 + 1 = 2

Non , je comprends pas !

Il y'a un test :

“Si non obstacle ici alors :”
“dire Piquier_x” # Pour voir ce qu'il me dit : 7
“ajouter 1 à piquier_x”
“dire piquier_x” #Il me renvoie 9 !
“stop ce script”

Pourtant, dans aucun autre lutin cette variable n'est mentionné !
link-potter
Scratcher
500+ posts

Problème ; 0 + 1 = 2

Je ne suis pas sûr d'avoir compris le problème mais si tu veux qu'un lutin se déplace tu peux juste faire :
quand le drapeau vert pressé
répéter indéfiniment
si <touche [z v] pressée?> alors
ajouter (1) à x
end
si <touche [q v] pressée?> alors
ajouter (-1) à x
end
si <touche [d v] pressée?> alors
ajouter (1) à y
end
si <touche [s v] pressée?> alors
ajouter (-1) à y
end
end
Vor_TeX
New to Scratch
5 posts

Problème ; 0 + 1 = 2

Oui, mais dans mon cas, le clone se deplace sur des cases précises qui bougent en fonction de la caméra !

Exemple :

J'appuie sur “q”:
“Piquier_x1” += 1
J'appuie sur “z”:
“Piquier_y1” += 1


Et après :

Repeter indefiniment:
aller à x: liste_case_x(piquier_x1) y:liste_case_y(Piquier_y1) #Les listes sont les cases du plateau et leur indice augmente ou diminue si j'appuie sur les flèches directionnelles pour bouger la “caméra” (voir une autre partie du plateau) !

Sauf que le lutin se déplace de 2 ! Et pas de 1

Last edited by Vor_TeX (July 24, 2018 06:30:07)

smrman
Scratcher
1000+ posts

Problème ; 0 + 1 = 2

Bonjour,
J'ai 2 choses à dire:

La première: l'exemple de script est faux.

Vor_TeX wrote:

aller à x: (élément ( (Piquier_y)) de [list v] :: list) y: (0)

En tout cas, n'est pas correcte dans ce que tu veux faire. Il faut ajouter directement la varaible et non un élément d'une liste.

La deuxième: comme l'a dit cc_scratch_cc plus haut, plusieurs objets écoutent l'événement et incrémentent la variable.
Pour faire simple, quand tu utilises un bloc d'événement, il est valable pour les clones mais aussi pour le lutin d'origine.
Ca nous fais donc que quand tu appuies sur la touche Z, le lutin de base et le clone détectent ça et incrémentent chacun la variable de 1.
Or 2*1 = 2
La position du lutin a bien été augmentée de 2, bon c'est pas ce que tu voualis mais c'est comme ça que scratch marche.

Il faudrait donc ajouter une condition pour différencier le lutin de base et le clone, pour qu'un seul des deux incrémente la variable.
Tu peux facilement le faire via un “id” (variable locale qui est incrémentée à la création de chaque clone)


Vor_TeX
New to Scratch
5 posts

Problème ; 0 + 1 = 2

ok merci
Au final, j'ai juste fait +1 = +2 et juste après -1 = +1

Merci pour vos réponses

Powered by DjangoBB