µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Deux sprites qui affichent la même image

 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide
Sujet précédent :: Sujet suivant  
Auteur Message
Otruch


Hors ligne

Inscrit le: 18 Déc 2013
Messages: 25

MessagePosté le: Lun 24 Fév 2014 - 21:58    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

Bonjour,


un problème en entraîne un autre ! Maintenant c'est les sprites qui merdent !


Voilà, je charge un sprite en utilisant une image, je charge un deuxième sprite en utilisant une autre image. J'affiche les sprites, tous les deux affichent la dernière image ! Je me suis mis à jour en passant de la 4.7.1 à la 4.7.2 mais sans bon résultat. J'ai essayé avec un code plus simple, comme ça vous pourrez lire plus facilement le code, même problème.


Voici mon code (la balise code me met des balises en trop dans mon code, je le mets donc tel quel):



 garcon = Sprite.new("heros_garcon.png",32,32,VRAM)
fille = Sprite.new("heros_fille.png",32,32,VRAM)




while not Keys.newPress.Start do
Controls.read()
screen.drawFillRect(SCREEN_UP,0,0,256,192,Color.new(31,31,31))
garcon:drawFrame(SCREEN_UP,0,0,0)
fille:drawFrame(SCREEN_UP,32,32,0)
render()
end


garcon:destroy()
fille:destroy()




Dans ce code, ça m'affiche 2 filles au lieu d'un garçon et d'une fille.


De plus, quand j'appuie sur start, j'ai une erreur "bad image ressource", donc lors de l'appel destroy(), pas étonnant car il veut détruire deux fois la même image. Quelqu'un aurait-il une solution?


Merci d'avance pour votre réponse !


Revenir en haut
Publicité






MessagePosté le: Lun 24 Fév 2014 - 21:58    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 358

MessagePosté le: Mar 25 Fév 2014 - 13:45    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

Essaie de charger d'abord les image et les utiliser ensuite dans la fonction Sprite.new() à la place des strings .
Tu pourra donc les décharger tranquillement ensuite Wink Et en plus ça devrait mieux marcher .
Si ça se trouve c'est un bug que j'ai créé en changeant cette fonction pour passer des strings aux objets Image, pour pouvoir créer deux sprites avec la même image sans surcharger la VRAM ... Faudra que je check ça (un jour peut-être ...) .
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Otruch


Hors ligne

Inscrit le: 18 Déc 2013
Messages: 25

MessagePosté le: Mar 25 Fév 2014 - 14:11    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

Ah, j'avais pas vu qu'on pouvait directement depuis une image, en même temps normal, je regardais une trop vieille doc.


J'ai changé mon code et...ça ne marche pas, toujours le même problème. Bon, j'ai sans doute mis des destroy en trop à la fin, mais c'est pas ça le problème.


Voici mon code changé :


imageGarcon = Image.load("heros_garcon.png",VRAM)
imageFille = Image.load("heros_fille.png",VRAM)


garcon = Sprite.new(imageGarcon,32,32,VRAM)
fille = Sprite.new(imageFille,32,32,VRAM)


while not Keys.newPress.Start do
Controls.read()
screen.drawFillRect(SCREEN_UP,0,0,256,192,Color.new(31,31,31))
garcon:drawFrame(SCREEN_UP,0,0,0)
fille:drawFrame(SCREEN_UP,32,32,0)
render()
end


garcon:destroy()
fille:destroy()
Image.destroy(imageGarcon)
Image.destroy(imageFille)
garcon = nil
fille = nil
imageGarcon = nil
imageFille = nil






Revenir en haut
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 358

MessagePosté le: Mar 25 Fév 2014 - 15:50    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

Si t'échange les deux Sprite.new() ça donne quoi ?
P'têtre que je me suis planté plus que possible Rolling Eyes
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Otruch


Hors ligne

Inscrit le: 18 Déc 2013
Messages: 25

MessagePosté le: Mar 25 Fév 2014 - 16:25    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

si j'échange, ça me met 2 garçons, en gros c'est le dernier sprite chargé qui est pris pour tous les sprites

Revenir en haut
Otruch


Hors ligne

Inscrit le: 18 Déc 2013
Messages: 25

MessagePosté le: Mer 26 Fév 2014 - 16:01    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

Je viens de voir dans libs.lua


Au début de Sprite.new, ligne 127 :


if type(graph_) == "string" then
local path = graph_
img = Image.load(graph_, dest)
assert(img, "Image not found: "..graph_)
elseif type(graph_) == "userdata" then
img = graph_
local path = "" -- I don't know why I write this ...
else
error("bad graph type.")
end

img est une variable globale, et non locale




la fin de sprite.new, ligne 239


return {
path = path,
getWidth = getWidth,
getHeight = getHeight,
drawFrame = drawFrame,
addAnimation = addAnimation,
playAnimation = playAnimation,
resetAnimation = resetAnimation,
stopAnimation = stopAnimation,
startAnimation = startAnimation,
isAnimationAtEnd = isAnimationAtEnd,
destroy = destroy
}

il retourne le chemin de l'image et non l'image.



Dans toutes les méthodes de Sprite, il utilise la variable globale img. De ce fait, img sera toujours le dernier sprite chargé.


Ce qu'il faudrait :
  • mettre local img
  • remplacer path = path par img = img dans le return
  • dans toutes les méthodes qui utilisent img, remplacer par self.img

Si tu veux je m'en occupe ! J'avais peur que c'était du C et j'ai pas encore les notions pour la ulib et l'implémentation lua en C, mais comme c'est du lua, je peux m'en occuper.


Revenir en haut
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 358

MessagePosté le: Mer 26 Fév 2014 - 17:08    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

Oui, occupe t'en ... De toute façon j'ai pas git là (Ubuntu powaaa !), et je suis en vacances (donc évidement connexion internet à ch*er) donc c'est mieux que tu le fasses :3
Au pire tu m'envoies les modifs et je les poste sur le git avec windaubeows, ou tu demande à Reylak (je sais pas si t'as les droits en écriture).
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Otruch


Hors ligne

Inscrit le: 18 Déc 2013
Messages: 25

MessagePosté le: Mer 26 Fév 2014 - 18:42    Sujet du message: Deux sprites qui affichent la même image Répondre en citant

Ah non, j'ai juste pas l'habitude de coder comme toi, mettre toutes les fonctions dans ton new, fallait juste mettre un local img, sans self ni rien. Parcontre faut le mettre avant le if, le local, sinon il est local au if...donc j'ai juste modifié ton local path dans ton if parce qu'il renvoyait nil.


Du coup bah, j'ai pas git, j'ai pas appris à l'utiliser et je pense pas avoir les droit d'auteurs. Comme tu sembles avoir des problèmes avec ton ordi/ta connexion, je l'envoies à Reylak.


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 10:00    Sujet du message: Deux sprites qui affichent la même image

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com