| Optimisation génération de terrain (style terraria) | |
|
|
Auteur | Message |
---|
Wgr18 Plutôt bien
Messages : 44 Localisation : Alsace
| Sujet: Optimisation génération de terrain (style terraria) Mar 23 Avr 2013 - 18:02 | |
| Bonjour à tous! Je me suis remis a game maker depuis peu. J'ai décidé de créer un jeu 2D. En gros j'essaie de reproduire la génération d'une map de terraria Le principe du code est le suivant : Une première zone de 640*640 est créé (les zones sont composés de 5 blocs de 32*32 différents et de petites cavernes). Ensuite avec une double boucle la première opération est répétée jusqu'a la fin de la map (comme dans un tableau a deux dimensions). La génération de la map se passe sans probleme mais lors de l'affichage avec une view si j'ai plus de 20 zones, le programme lag horriblement et plante dans la plupart des cas. Le code est bordélique (beaucoup trop de boucle) et je pense qu'on peut le réduire de moitié mais je ne trouve pas de solutions. Je voudrais savoir ce que je peux faire pour l'optimiser. merci d'avance Ci-dessous le code de la génération d'une zone : - Code:
-
global.nb = 0;
while ( global.nb < 10) { i = 16; j = 16; k = 0; s = 0; a = 0; if (ceil(random(2)) == true) { k = 160 ; } else { k = 180 ; } while ( i <=640) { while ( j<=640 ) { if ( i < 120 ) { instance_create(j+(640*global.nb),i+1280,terre); } else if (i <= k) { if (ceil(random(2)) == true) { instance_create(j+(640*global.nb),i+1280,terre); } else { instance_create(j+(640*global.nb),i+1280,pierre); } } else if (i > k) { instance_create(j+(640*global.nb),i+1280,pierre); } j +=32; } j = 16; i += 32; }
while(s<2) { blocx = (round(random_range(0,20))*32)-16; blocy = (round(random_range(5,15))*32)-16; debut = blocx;
taillel = round(random_range(1,3));
while(taillel > 0) { taillec = round(random_range(1,3)); while(taillec > 0) { instance_create(blocx+(640*global.nb),blocy+1280,fer); blocx+= 32; taillec -=1; } blocx = debut; blocy += 32; taillel -=1; } if (ceil(random(2)) == true){ blocx = (round(random_range(0,20))*32)-16; blocy = (round(random_range(7,15))*32)-16; debut = blocx;
taillel = round(random_range(1,3));
while(taillel > 0) { taillec = round(random_range(1,3)); while(taillec > 0) { instance_create(blocx+(640*global.nb),blocy+1280,aluminium); blocx+= 32; taillec -=1; } blocx = debut; blocy += 32; taillel -=1; } } if (ceil(random(2)) == true){ blocx = (round(random_range(0,20))*32)-16; blocy = (round(random_range(10,15))*32)-16; debut = blocx;
taillel = round(random_range(1,3));
while(taillel > 0) { taillec = round(random_range(1,3)); while(taillec > 0) { instance_create(blocx+(640*global.nb),blocy+1280,orm); blocx+= 32; taillec -=1; } blocx = debut; blocy += 32; taillel -=1; }
} s += 1; } while (a<4) { posx = (round(random_range(0,15))*32)-16; posy = (round(random_range(5,15))*32)-16; debut = posx;
taillel = round(random_range(3,6));
while(taillel > 0) { taillec = round(random_range(2,6))+1; while(taillec > 0) { instance_create(posx+(640*global.nb),posy+1280,suppresseur); posx+= 32; taillec -=1; } posx = debut; posy += 32; taillel -=1; } a += 1; } global.nb += 1; }
|
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Optimisation génération de terrain (style terraria) Mar 23 Avr 2013 - 18:28 | |
| GM a beaucoup de mal quand y a beaucoup d'instances a traiter, et c'est normal dans un sens, pour ce genre de système on utilise normalement une matrice (et pas d'instances). Par contre sous GM c'est assez ****** a faire. Du coup tu peut tenter une opti en désactivant les instances en dehors de la view: - Code:
-
{ instance_activate_all(); instance_deactivate_region(view_xview[0],view_yview[0], view_wview[0],view_hview[0],false,true); }
|
|
| |
Wgr18 Plutôt bien
Messages : 44 Localisation : Alsace
| Sujet: Re: Optimisation génération de terrain (style terraria) Mar 23 Avr 2013 - 21:12 | |
| merci ça marche c'est exactement ce qu'il me fallait. Par contre est-ce qu'il y aurai moyen d'éviter le "rafraichissement" des blocs? Les blocs sont plus lent a s'afficher que la view donc il y a des zones de vides sur les bords.
|
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: Optimisation génération de terrain (style terraria) Mar 23 Avr 2013 - 21:31 | |
| Il suffit d'activer les instances un peu avant la bordure de la view pour ça |
|
| |
Wgr18 Plutôt bien
Messages : 44 Localisation : Alsace
| Sujet: Re: Optimisation génération de terrain (style terraria) Mar 23 Avr 2013 - 21:42 | |
| D'accord pour le principe mais j'arrive pas a le regler (j'ai encore un peu de mal avec le gml). |
|
| |
Invité Invité
| Sujet: Re: Optimisation génération de terrain (style terraria) Mar 23 Avr 2013 - 21:52 | |
| je suppose que tu pourra faire un truc du genre : - Citation :
- instance_deactivate_region(view_xview[0]+blockSize,view_yview[0]+blockSize,
view_wview[0]-blockSize,view_hview[0]-blockSize,false,true); où blockSize représente la taille de ton bloc |
|
| |
Wgr18 Plutôt bien
Messages : 44 Localisation : Alsace
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 15:17 | |
| La solution de désactiver les instances hors de la view a ammené un autre problème. Il faut que les instances restent actives même lorsqu'elles sont hors de la view (par exemple des mobs, pnj ...).
Il faudrait donc que j'utilise des matrices?
|
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 16:21 | |
| Ia instance_deactivate_object qui permet de désactiver certains objets, donc tu vérifie pour chaque objet si il est dans la view et si c'est ni un pnj ni un mob, et en fonction de ca tu le desactive ou non ( avec self en argument)... |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 16:41 | |
| Ou plus simple tu fait un instance_activate_object(oPNJ) après instance_deactivate_region.
Pour le coup des matrices laisse tomber sur GM a moins que tu soit vraiment calé x)
|
|
| |
Wgr18 Plutôt bien
Messages : 44 Localisation : Alsace
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 18:18 | |
| D'accord, je vais faire comme ça. Et j'avais prévu une modification de blocs (style foreuse automatique qui reste active même quand le joueur n'est pas là). Je vais regler ce problème avec une variable timer qui effectuera les opérations sur les blocs quand la view repasse dessus. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 20:20 | |
| En tout cas te fait pas trop de faux espoirs pour faire un terraria like un tant soit peu complexe sous GM, il est vraiment pas adapté pour ce genre de jeux :/
|
|
| |
Wgr18 Plutôt bien
Messages : 44 Localisation : Alsace
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 20:32 | |
| je m'en doute mais c'est bête j'avais enfin trouvé une idée de jeu qui n'a été fait nul part... En c-sharp ça pourrait le faire?
|
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 20:52 | |
| Bah comme tout langage de programmation 'évolué', oui, ca peut le faire, mais après, tout dépend de toi : en as tu les capacités ? Je connais pas ton niveau avec GM, mais si t'as du mal avec, bah c'est mal barré :/ Donc si je peux te donner un conseil, c'est de t'entrainer, et de pas commencer par un gros projet comme celui-là.... Vaut mieux un jeu qui révolutionnera pas le genre bien foutu qu'un jeu révolutionnaire injouable |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 21:38 | |
| Bah terraria a été fait en C# donc ouai devrais pas y avoir de soucis :b En fait je vois pas vraiment de langage ou tu seras autant bloqué que GM dès qu'il faut gérer un peu de 'gros objets'... |
|
| |
Invité Invité
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 21:56 | |
| |
|
| |
Wgr18 Plutôt bien
Messages : 44 Localisation : Alsace
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 21:59 | |
| J'ai parlé du c# car on apprend à s'en servir en cours ^^ . Ce que je trouve bien sur GM c'est qu'on a pas a se soucier d'importer les images, les sons ...
edit : J'avais pas vu ton post sachem. Je vais regarder ça de plus près. Merci ! |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Optimisation génération de terrain (style terraria) Mer 24 Avr 2013 - 22:52 | |
| - onilink_ a écrit:
- Bah terraria a été fait en C# donc ouai devrais pas y avoir de soucis :b
En fait je vois pas vraiment de langage ou tu seras autant bloqué que GM dès qu'il faut gérer un peu de 'gros objets'... Javascript (et si en plus tu combine ca à Win8, j'en parle même pas... ) |
|
| |
Contenu sponsorisé
| Sujet: Re: Optimisation génération de terrain (style terraria) | |
| |
|
| |
| Optimisation génération de terrain (style terraria) | |
|