AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-39%
Le deal à ne pas rater :
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
399 € 649 €
Voir le deal
Le Deal du moment : -28%
Brandt LVE127J – Lave-vaisselle encastrable 12 ...
Voir le deal
279.99 €

 

 charger le sprite d'un autre objet

Aller en bas 
2 participants
AuteurMessage
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 17:47

salut

Je voulais savoir s'il était possible de charger des sprites et ensuite de les utiliser comme sprite_index pour divers objet, sans que ces objets ait à les charger ou à faire des sprites_add ou sprite_replace.
En gros, je souhaite qu'un objet_vide ait comme sprite le sprite défini par un autre objet_charge_sprite.

Voici ce que je souhaite faire en détail :
- je voudrais charger tous mes sprites (fichiers externes) en leur donnant un nom dans un objet_charge_sprite. Je pensais les appeler de la manière suivante :
Code:

sprite1 = sprite_add(...);
sprite2 = sprite_add(...);
sprite3 = sprite_add(...);

Ensuite, pour que mon objet _empty affiche le sprite souhaité, je pensais faire un event dans l'objet_charge_sprite :
Code:

with Objet_empty
{
sprite_index=sprite1
}

Mais ça ne marche pas, ce qui est normal car pour l'objet_empty, sprite1 est une variable et non un sprite.

Savez-vous si cette technique est possible et si oui comment on peut faire ça ?

En fait, j'ai beaucoup d'objets ayant des sprites identiques sur mes maps et je me demande si je ne charge pas chaque sprite à chaque création de chaque objet (car ce sont des fichiers externes).

Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 17:51

Alors tu as deux façons de le faire, la première que je préfère :
Code:
global.sprite1 = sprite_add(...);
global.sprite2 = sprite_add(...);
global.sprite3 = sprite_add(...);

with Objet_empty
{
sprite_index=global.sprite1
}

Ou celle-là :
Code:
sprite1 = sprite_add(...);
sprite2 = sprite_add(...);
sprite3 = sprite_add(...);

with Objet_empty
{
sprite_index=other.sprite1
}

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 18:05

bibi675 a écrit:
Alors tu as deux façons de le faire, la première que je préfère :
Code:
global.sprite1 = sprite_add(...);
global.sprite2 = sprite_add(...);
global.sprite3 = sprite_add(...);

with Objet_empty
{
sprite_index=global.sprite1
}

Ou celle-là :
Code:
sprite1 = sprite_add(...);
sprite2 = sprite_add(...);
sprite3 = sprite_add(...);

with Objet_empty
{
sprite_index=other.sprite1
}

Ah mais bibi675 tu es FABULOUS !!!!! Very Happy

Un immense merci copain (là, ça y est on est copain c'est sûr Wink)
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 18:25

Lol, de rien. ^^

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 18:35

bibi675 a écrit:
Lol, de rien. ^^
Ah mais si, imagine ce que tu pourrais ajouter à ton fichier saveRoom avec cette méthode :
- la possibilité de charger des dizaines d'objet (voire des centaines) avec juste quelques sprite externes, et ce en quelques secondes au lieu de plus d'une dizaine (je suis en train de faire des tests, là pour voir si cette technique fonctionne, mais j'ai bon espoir :fleche_d).
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 19:18

Pourquoi toi tu chargeais le sprite à chaque fois ? gha

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 20:40

bibi675 a écrit:
Pourquoi toi tu chargeais le sprite à chaque fois ? gha
il me semblait qu'avec des ressources externes, à chaque fois que GM crée un objet depuis un fichier externe il chargeait à nouveau les sprites pour ce nouvel objet, mais visiblement, ce n'est pas le cas.

En fait, j'essaie toujours de réduire le temps de chargement des maps, donc, je teste toutes les méthodes possibles Razz

Edit : YES !! si c'est bien ce que fait GM : à chaque objet créé par un fichier externe comme par exemple :
Code:

ID = instancee_create(x,y,obj) with(ID){//actions}
Gm recharge chaque sprite à chaque fois !
Mais grâce à la technique que j'ai faite, il ne charge le sprite qu'une seule fois et l'utilise sur chaque objet crée par ce fichier externe, ce qui fait que je viens de charger 300 objets de sols avec sprite_set_alpha_from_sprite en 1 secondes, au lieu de 21 secondes de chargement Very Happy !


Dernière édition par blendman le Ven 23 Avr 2010 - 21:05, édité 1 fois
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 20:43

Argh, 400 chargements de sprites au lieu d'une dizaine, c'est normal que ça prenne 20 secondes, ton problème est réglé. ^^
Utilise simplement un objet controlleur et met dans le create le chargement de tes sprites en global, puis met dans le Create de tes objets à charger un simple petit sprite_index = global.ton_sprite. clinoeuil

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 21:08

bibi675 a écrit:
Argh, 400 chargements de sprites au lieu d'une dizaine, c'est normal que ça prenne 20 secondes, ton problème est réglé. ^^
Utilise simplement un objet controlleur et met dans le create le chargement de tes sprites en global, puis met dans le Create de tes objets à charger un simple petit sprite_index = global.ton_sprite. clinoeuil
oui, le problème venait de là, mon script de loading était mal fait, il chargeait à nouveau chaque sprite à chaque objet créé Very Happy.
Du coup, là, ça m'ouvre des perspectives énormes, mais faut que je refasse bien au propre tout ça Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 22:28

Eh bien voilà plus besoin d'utiliser des maps énormes. happy1
Pis si ça prend encore un peu de temps (1 - 2 secondes), si tu fais une ptite transition sympa lors du chargement, ça passera sûrement inaperçu. clinoeuil

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptyVen 23 Avr 2010 - 22:39

Bon, mon cher Bibi675, je vais encore avoir besoin de toi Smile.

Voilà, j'ai un bug que je n'arrive pas à résoudre.
- je charge ma map (1 fichier texte : map1.map) dont le contenu ressemble à ça :
Code:

bl();
s(871,57,5,1);
s(95,653,5,11);
s(158,46,5,7);
....

bl() est un script dont le code est :
Code:

instance_create(x,y,bibliothek_o)

L'objet bibliothek_o a un event create qui charge les sprites de la manière suivante :
Code:

execute_file("data\banque1.txt")

le fichier banque1.txt ressemble à ça :
Code:

sol[1] = sprite_add("data\sols\sol1.gif",1,0,0,0,0,0,0);
sol[2] = sprite_add("data\sols\sol2.gif",1,0,0,0,0,0,0);
sol[3] = sprite_add("data\sols\sol3.gif",1,0,0,0,0,0,0);
sol[4] = sprite_add("data\sols\sol4.gif",1,0,0,0,0,0,0);
sol[5] = sprite_add("data\sols\sol5.gif",1,0,0,0,0,0,0);
sol_a[1] = sprite_add("data\sols\sol1_a.gif",1,0,0,0,0,0,0);
sol_a[2] = sprite_add("data\sols\sol2_a.gif",1,0,0,0,0,0,0);
sol_a[3] = sprite_add("data\sols\sol3_a.gif",1,0,0,0,0,0,0);
sol_a[4] = sprite_add("data\sols\sol4_a.gif",1,0,0,0,0,0,0);
sol_a[5] = sprite_add("data\sols\sol5_a.gif",1,0,0,0,0,0,0);
sol_a[6] = sprite_add("data\sols\sol6_a.gif",1,0,0,0,0,0,0);
...


Dans le fichier de map, on avait aussi un script s(...) dont le code est :
Code:

global.bx = argument0;
global.by = argument1;
global.type = argument2;
global.alpha = argument3;

ID = instance_create(global.bx,global.by,sol_o)
with (ID)
{
sprite_index = bibliothek_o.sol[global.type];
sol_a = bibliothek_o.sol_a[global.alpha];
sprite_set_alpha_from_sprite(sprite_index, sol_a)
}

ouf, on y est, on a tout Smile.
Ca a l'air compliqué, mais c'est en fait assez simple :
- d'abord, j'ai un objet controler qui crée les varialbe et leur mets une valeur par defaut, par exemple :
Code:

global.bx = 0
global.by = 0
global.type = 0
global.alpha = 0

- ensuite, quand j'ouvre mon fichier map, il crée un objet bibliothek_o, qui va charger les sprites (grâce au script bl()Wink
- ensuite il crée des objets sols (script s(..)Wink, avec les valeurs qui sont données.


Donc, pour :
s(871,57,5,1);
> il devrait me créer l'objet sol_o en (bx=871, by=57)
le type =5 et l'alpha =1, il devrait utiliser les 2 sprites suivants (d'après le fichier banque1.txt) :
sol[5] = sprite_add("data\sols\sol5.gif",1,0,0,0,0,0,0);
sol_a[1] = sprite_add("data\sols\sol1_a.gif",1,0,0,0,0,0,0);
et mettre ça en alpha avec le sprite_set_alpha..

Et bien, il me crée bien l'objet, mais lorsque j'ai pleins d'objet sol_o avec des alpha différents, les alpha sont tous ajouté les uns aux autres..

Une idée du problème ? car ça devrait marcher normalement (si j'utilise un seul type de sprite et un seul type d'alpha, avec 300 sol_o différents, ça marche, c'est bizarre) Razz
Revenir en haut Aller en bas
http://blendman.blogspot.com/
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 8:47

BOn, je réponds au message, car j'ai trouvé et je pense que ça pourrait intéresser ceux qui souhaitent faire un jeu avec beaucoup de maps et de fichiers externes Smile :

il suffit de changer quelques trucs dans le code :
Code:

ID = s2_(global.bx,global.by,sol2_o)
with (ID)
{
sol = biblio.sol[global.type];
sol1=sprite_duplicate(sol)
sprite_index=sol1;
sol_a = biblio.sol_a[global.alpha];
sprite_set_alpha_from_sprite(sol1, sol_a);

Par ailleurs, je me demande si la fonction
Code:

sprite_duplicate(ind)
recharge à chaque fois le sprite dupliqué, je vais faire de nouveaux tests pour vérifier ça Smile.
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 11:10

Si ça t'intéresse, je peux t'implémenter l'alpha dans une version spéciale de mon enregistreur/chargeur de room, c'est vraiment pas dur à faire. clinoeuil

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 11:56

bibi675 a écrit:
Si ça t'intéresse, je peux t'implémenter l'alpha dans une version spéciale de mon enregistreur/chargeur de room, c'est vraiment pas dur à faire. clinoeuil
oui, ça m'intéresse, mais pour tout te dire, j'avais déjà modifié ton chargeur/enregistreur de map, car il va hyper vite avec cette méthode :
- moins de 3 secondes pour charger 1500 objets (genre plantes, arbres...) et 600 sols (donc avec alpha) !! c'est excellentissime Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 12:50

Ah ok, je croyais que tu ne l'utilisais pas en regardant tes scripts.
En passant, les 3 secondes prennent en compte le chargement des sprites externes ou pas ? Si elles ne les prennent pas en compte, il y a quelque chose qui cloche, c'est trop long...

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 14:07

bibi675 a écrit:
Ah ok, je croyais que tu ne l'utilisais pas en regardant tes scripts.
En fait, jusqu'à maintenant, je ne l'utilisais pas, mais je pense que je vais le modifier pour pouvoir l'utiliser Smile.

Citation :
En passant, les 3 secondes prennent en compte le chargement des sprites externes ou pas ? Si elles ne les prennent pas en compte, il y a quelque chose qui cloche, c'est trop long...
oui, c'est tout compris, mais en même temps, il n'y a pas énormément de sprite externes (10, soit environ 600ko).

Tiens, une question, au passage Smile :
- comment on fait pour avoir ce genre de code ?
Code:

typ = choose(1,2,3,4,5,6,7,8,9);
sol = bibliothek.sol[typ];

En gros, je veux que si typ vaut 1, ça donne sol = bibliothek.sol[1];
si typ vaut 2 > sol = bibliothek.sol[2];

sans devoir mettre :
Code:

if typ =1 { sol = bibliothek.sol[1];}
else if if typ =2 { sol = bibliothek.sol[2];}
...

Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 14:42

Code:
sol = bibliothek.sol[ceil(random(9))];
Je pense que ça marche. Smile

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 14:48

bibi675 a écrit:
Code:
sol = bibliothek.sol[ceil(random(9))];
Je pense que ça marche. Smile
oui,ça marche , merci Smile.
En fait, je voudrais aussi pouvoir remplacer ce qu'il y a entre [] par n'importe quel variable.
C'est possible ? Very Happy

Edit : pour le temps de chargement, ce sont les sprite_set_alpha_from_sprite qui prennent beaucoup de temps, car lorsque je charge des png, je passe 5 secondes de chargement (pour 500 sols en alpha) à 2 secondes.
Quel dommage, car je pourrais utiliser des png pour mes sols, mais du coup, je vais en avoir beaucoup beaucoup plus que si j'utilise la technique d'un jpg+l'apha en gif Sad
Revenir en haut Aller en bas
http://blendman.blogspot.com/
bibi675
Utilisateur confirmé: Rang *****
bibi675


Messages : 2456
Localisation : Oise
Projet Actuel : Jeu par navigateur original

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 15:41

blendman a écrit:
En fait, je voudrais aussi pouvoir remplacer ce qu'il y a entre [] par n'importe quel variable.
C'est possible ? Very Happy
Bien sûr ! clinoeuil

blendman a écrit:
Edit : pour le temps de chargement, ce sont les sprite_set_alpha_from_sprite qui prennent beaucoup de temps, car lorsque je charge des png, je passe 5 secondes de chargement (pour 500 sols en alpha) à 2 secondes.
C'est 500 chargement d'images externes + sprite_set_alpha_from_sprite ou seulement quelques chargements + alpha et création de 500 instances d'objets sol ?

_________________
charger le sprite d'un autre objet 1005394
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet EmptySam 24 Avr 2010 - 15:47

bibi675 a écrit:
blendman a écrit:
En fait, je voudrais aussi pouvoir remplacer ce qu'il y a entre [] par n'importe quel variable.
C'est possible ? Very Happy
Bien sûr ! clinoeuil
éh béh, on fait comment ? Very Happy

par exemple, pour faire ça :
Code:

typ = 2
sol = bibliothek.sol[typ];
ça donne :
Code:

sol = bibliothek.sol[2];

Comment je peux faire ça ? Very Happy

blendman a écrit:
Edit : pour le temps de chargement, ce sont les sprite_set_alpha_from_sprite qui prennent beaucoup de temps, car lorsque je charge des png, je passe 5 secondes de chargement (pour 500 sols en alpha) à 2 secondes.
C'est 500 chargement d'images externes + sprite_set_alpha_from_sprite ou seulement quelques chargements + alpha et création de 500 instances d'objets sol ?[/quote]quelques chargements+alpha (environ 10 sprites externes, soit environ 1Mo) et créations de 500 instances d'objets sols
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Contenu sponsorisé





charger le sprite d'un autre objet Empty
MessageSujet: Re: charger le sprite d'un autre objet   charger le sprite d'un autre objet Empty

Revenir en haut Aller en bas
 
charger le sprite d'un autre objet
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [C#] Acceder à une variable/fontion d'un objet depuis un autre objet
» Charger une sprite
» Positionner un objet par rapport à un autre objet en rotation.
» Appeler, dans un objet, une var d'un autre objet [résolu]
» Charger un sprite à partir d'un fichier exterieur à GM6

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: