Discuss Scratch

IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Dans un jeu, j'ai deux endoits où la couleur 64 100 94 est utilisée. Or lorsque je prends la pipette pour prendre la couleur dans le bloc de détection de couleur sur le 1er endroit où elle est utilisée, la couleur est détectée pour le 1er endroit mais pas pour le deuxième. À l'inverse si je fait la même manipulation avec la couleur du deuxième endroit, c'est la couleur du deuxième endroit qui est détectée mais pas celle de la première. J'ai vérifié, les couleurs sont bien totalement identiques, c'est incompréhensible.
EtoileDuCode
Scratcher
100+ posts

Mon projet considère que deux couleurs identiques sont différentes

Quel est le jeu ? Tu as l'URL ?
IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Je voulais pas le publier tt de suite mais de toute façon le code est pas bien complexe, toutes les infos importantes sont là normalement.
wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Le détecteur de couleur Scratch fonctionne en faisant de grosses approximations sur les couleurs (tu as sûrement déjà entendu parler des 32 nuances de rouge, 32 de vert et 16 de bleu).

J'imagine que tu utilises le bloc
<touching color [#c6e2ff] ?>

dans ce cas, il faut t'assurer que ta texture contienne cette couleur sur une zone de 2x2 pixels (même en vectoriel) et qu'elle ne soit pas en décalage avec la grille imaginaire de 2x2 pixels de l'éditeur (le centre de l'éditeur est l'intersection des deux axes centraux de la grille et non le milieu d'un pixel), ensuite, la taille du sprite peut influer sur le fonctionnement du bloc (tout comme les effets graphiques), vérifie qu'elle est au moins de 100% pour un pixel de 2x2.
IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

C'est du stylo.
wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

On s'enfonce encore dans les nombreuses optimisations de Scratch alors (je peux te détailler une solution simple mais elle ne te plaira pas).

Est-ce que la détection est fonctionnelle sur TurboWarp, qui n'utilise pas le même algorithme ?
IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

La détection n'est pas fonctionnelle sur Turbowarp non plus. Je veux bien une solution “simple”

Last edited by IMAG0 (Oct. 25, 2025 12:31:59)

wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Comment utilises-tu le stylo ?
IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Ça fait des carrés, je vais essayer de te refaire le code
wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Explications :

lorsque Scratch applique le stylo, il l'applique pour suivre les mouvements du sprite pixel par pixel.
Hors, certains mouvements ne sont pas rectilignes (par exemple, les changements de coordonnées brutaux, et les pas). Dans ce cas, la plupart du temps, les coordonnées des différents utilisations du stylo ne sont pas forcément rondes, ce qui implique que Scratch utilise le stylo sur les pixels concernés par intensité - distance (effet facilement observable) ; de plus, le stylo n'est pas carré mais ronds, d'où certains effets secondaires du même genre lors du traçage avec le stylo.
IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Le code
définir draw (x1) (y1) (x2) (y2)
s'orienter à [90]
aller à x:(x1) y:(y1)
stylo en position d'écriture
mettre la taille du stylo à [1]
si <(peinture) = [1]> alors
mettre la couleur du stylo à (#001ff2)
mettre [drawing v] à [0]
répéter ([abs v] de ((y1)-(y2))) fois
stylo en position d'écriture
aller à x:(x1) y:((y1)-(drawing))
avancer de ((x2)-(x1)) pas
relever le stylo
si <(lettre [1] de ((y1)-(y2))) = [-] > alors
ajouter [-1] à [drawing v]
sinon
ajouter [1] à [drawing v]
end
end
end
wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Je me permets de le retoucher :

définir draw (x1) (y1) (x2) (y2)
si <(peinture) = [1]> alors
mettre la taille du stylo à ([5] / [4]) // toute fraction comprise entre 1 et 2 tout deux exclus
mettre la couleur du stylo à (#001ff2)
mettre [drawing v] à [0]
répéter ([1] + ([abs v] de ((y1) - (y2))::operators)) fois
aller à x:(x1) y:((y1) + (drawing))
stylo en position d'écriture
mettre x à (x2)
relever le stylo
ajouter (<(y1) < (y2) > - <(y2) < (y1) >) à [drawing v]
fin
fin

Last edited by wilhelm43 (Oct. 25, 2025 14:52:03)

IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Je dois supprimer le bloc “s'orienter à” ? ok
Mon dessin a une légère transparence, si je répète trois fois le code c'est encore trop transparent et si je répète quatre fois le code, la détection ne fonctionne plus.

Last edited by IMAG0 (Oct. 25, 2025 14:34:03)

wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Essaye d'augmenter le rapport dans la division du bloc « mettre la taille du stylo à » juste pour déboguer (essaye avec plusieurs valeurs).
IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Si je mets à 7.6 / 4 c'est encore trop transparent, si je mets à 7.7 / 4 la détection ne marche plus.
Après quelques tests, si je mets à 7.6395 / 4 c'est trop transparent et si je mets à 7.6396 / 4 la détection ne marche plus. Je peux encore continuer longtemps comme ça mais je ne pense pas qu'il y ait de possibilitées qui fonctionnent.

Last edited by IMAG0 (Oct. 25, 2025 14:46:33)

wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

D'accord

Puis-je avoir accès au script de détection de couleur aussi ?
Je me suis aussi permis de modifier légèrement le script pour corriger un effet indésirable et le rendre plus simple.

Last edited by wilhelm43 (Oct. 25, 2025 14:52:40)

IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Quand je reçois [next level v]
basculer sur le costume (costume 2 v)
mettre [peinture v] à [0] // un autre code permet de le mettre à 1, ce n'est pas là d'où vient le problème
répéter indéfiniment
répéter jusqu'à ce que <une condition un peu longue mais qui permet en gros d'arrêter le script lorsqu'il doit pas tourner>
si <<couleur (#0020f1) touchée ?> ou <couleur (#001f83) touchée ?>> alors // le code qui nous intéresse
aller à [pointeur de souris v]
end
... // d'autres codes pour d'autres détections
end
end

Last edited by IMAG0 (Oct. 25, 2025 15:06:45)

wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Quel est l'intérêt de mettre une boucle conditionnelle dans une boucle infinie (utilise un simple si alors) ?

Si le problème vient de mon message explications plus haut, je crains que l'on ne puisse le résoudre.

La solution à laquelle je pense est d'utiliser une hitbox virtuelle pour chaque carré affiché, mais cela nécessite l'utilisation d'une liste au préalable (et je sais que tu n'es pas fan de leur utilisation).
On part sur ça ?

Last edited by wilhelm43 (Oct. 25, 2025 15:47:22)

IMAG0
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

On peut toujours essayer

wilhelm43 wrote:

Quel est l'intérêt de mettre une boucle conditionnelle dans une boucle infinie :/ (utilise un simple si alors) ?
Je sais plus pk j'avais fait ça

Last edited by IMAG0 (Oct. 25, 2025 15:51:04)

wilhelm43
Scratcher
1000+ posts

Mon projet considère que deux couleurs identiques sont différentes

Je dois te poser une question avant : le tracé se fait t-il de manière continue (à chaque itération du projet) ou seulement quand nécessaire ?

Powered by DjangoBB