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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
> 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
> 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