OVH Cloud OVH Cloud

[DIR MX2004] List et intersects

2 réponses
Avatar
Twinky
Hello

sur la scene j'ai 5 objets rectangle (shape)
1 (en noir) sert de percuteur
les 4 autres (en bleu) detectent s'ils ont été percuté.

la boucle fonctionne et les 4 rect en bleu
se colorent bien en vert foncé
mais lorsque le percuteur touche le dernier rect de la liste
il (le percuteur) se colore en orange

Or pourquoi le percuteur ne se colore pas sur tous les rect
bleu mais uniquement sur le dernier de la liste (soit sprite 7) ?

percuteur = sprite 2
touch variable locale
------------------------------
on mouseup me
myList =[4,5,6,7]

repeat with i in myList
if sprite 2 intersects(i) then
-- avec if sprite 2 intersects(myList[i-3])
touch = 1
-- on colore les rect bleu en vert foncé
sprite(i).color = rgb(0,100,100)
put "i="&i
else
-- retour couleur origine (rect bleu)
sprite(i).color = rgb(0,0,255)
touch = 0
end if
-- put myList[i-3]
end repeat

-- percuteur change de couleur au toucher
if touch = 1 then
sprite(2).color = rgb(255,200,0)
else
sprite(2).color = rgb(0,0,0)
end if

put "touch= "&touch
end

Merci pour l'aide apportée

---------
Twinky

2 réponses

Avatar
Bubar
> repeat with i in myList
if sprite 2 intersects(i) then
-- avec if sprite 2 intersects(myList[i-3])
touch = 1
-- on colore les rect bleu en vert foncé
sprite(i).color = rgb(0,100,100)
put "i="&i
else
-- retour couleur origine (rect bleu)
sprite(i).color = rgb(0,0,255)
touch = 0
end if
-- put myList[i-3]
end repeat

-- percuteur change de couleur au toucher
if touch = 1 then
sprite(2).color = rgb(255,200,0)
else
sprite(2).color = rgb(0,0,0)
end if

put "touch= "&touch
end


Bête problème de repeat

tu entres dans le repeat, donc tu vas tester les 4 sprites dans l'ordre, et
mettre touch à 1 si le sprite testé est clické et à 0 si il n'est pas
clické.
Donc (faire un trace est souvent utile)
clic sur le sprite 6
sprite touch
4 0
5 0
6 1
7 0 <--- oups !

Il faut que tu quittes la boucle dès qu'un sprite est clické, ou alors que
tu ne mettes touch à 0 que s'il n'est pas déjà à 1
cas 1
repeat with i in myList
if sprite 2 intersects(i) then
-- avec if sprite 2 intersects(myList[i-3])
touch = 1
-- on colore les rect bleu en vert foncé
sprite(i).color = rgb(0,100,100)
put "i="&i


exit repeat <----------
else
-- retour couleur origine (rect bleu)
sprite(i).color = rgb(0,0,255)
touch = 0
end if
-- put myList[i-3]
end repeat



cas 2 (si tu dois absolument tester les 4 sprites pour d'autres choses)
touch=0
repeat with i in myList
if sprite 2 intersects(i) then
-- avec if sprite 2 intersects(myList[i-3])
touch = 1
-- on colore les rect bleu en vert foncé
sprite(i).color = rgb(0,100,100)
put "i="&i
else
-- retour couleur origine (rect bleu)
sprite(i).color = rgb(0,0,255)
-- touch = 0 <-- ligne à virer
end if
-- put myList[i-3]
end repeat



--
Bubar
Freelance Multimédia - internet
Création de logiciels multimédia et sites web
http://www.wapitistudio.com
Avatar
Twinky
Merci Bubar pour toutes ces explications ;)