J'essaye d'écrire un code qui défile en paralaxe. Tous les sprites de la table des "morceaux" doivent se lever dans les airs, puis réinitialiser leur position à y = 200 et x = nombre aléatoire. Plus tard, je vais les rendre plus petits ou plus gros en fonction de la vitesse à laquelle ils se déplacent pour un véritable effet 3D.Comment faire un itération du code sur des objets d'une table dans lua?
Voici une tentative naïve:
local speed = math.random(250,1000)
pieces = { "sprite", "sprite1", "sprite2", "sprite3", "sprite4",
"sprite5", "sprite6", "sprite7", "sprite8", "sprite9", "sprite10",
"sprite11", "sprite12", "sprite13", "sprite14", "sprite15" }
function update(self, dt)
for i, v in ipairs(pieces) do
p = go.get_position(v)
p.y = p.y + speed * dt
print(v)
if p.y > 800 then
p.y = -200
p.x = math.random(1,25) * math.random(10,35)*2
local speed = math.random(250,1000)
end
go.set_position(v)
end
end
Si j'imprimer "v" à l'intérieur des ipairs i obtenir la sortie désirée (sprite, sprite1, lutin, etc), donc je pensais que ce que je serait surtout travailler . Ce n'est pas le cas. De l'aide?
Eh bien, vous vouliez le boucler - il boucle bien, l'impression v le montre. Vous devrez expliquer ce que vous voulez et ce que vous obtenez. "Ça ne marche pas" n'est pas une explication. Si cela ne modifie pas la 'vitesse', c'est parce que vous déclarez la variable locale 'speed' dans la branche 'si p.y> 800', donc une nouvelle valeur aléatoire n'est pas utilisée à l'extérieur si cette branche. Si cela ne fonctionne pas d'une autre manière, vous devrez expliquer. – Vlad
Vous avez raison. J'ai oublié de dire que le problème spécifique est que p = go.get_position (v) donne un message d'erreur. Je crois que je ne fais pas correctement référence à l'objet. – josh
Qu'est-ce que c'est? Je suppose que c'est une collection de game_objects, indexée par les noms que vous avez dans le tableau 'pieces'. Mais où est-il dans votre échantillon? At-il des fonctions get_position()/set_position()? Comment ceux-ci définis? – Vlad