AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-20%
Le deal à ne pas rater :
Pack Gigabyte Ecran PC Gamer 27″ LED M27Q (rev2.0) + Radeon RX 6950 ...
749 € 939 €
Voir le deal

 

 Optimisation génération de terrain (style terraria)

Aller en bas 
4 participants
AuteurMessage
Wgr18
Plutôt bien
Wgr18


Messages : 44
Localisation : Alsace

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMar 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;
     
}

Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMar 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);
}

_________________
Optimisation génération de terrain (style terraria) Runningpotato1Optimisation génération de terrain (style terraria) TvF6GED Optimisation génération de terrain (style terraria) MdetltS
Revenir en haut Aller en bas
Wgr18
Plutôt bien
Wgr18


Messages : 44
Localisation : Alsace

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMar 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.

Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMar 23 Avr 2013 - 21:31

Il suffit d'activer les instances un peu avant la bordure de la view pour ça clinoeuil

_________________
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
Wgr18
Plutôt bien
Wgr18


Messages : 44
Localisation : Alsace

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMar 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).
Revenir en haut Aller en bas
Invité
Invité




Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMar 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
Revenir en haut Aller en bas
Wgr18
Plutôt bien
Wgr18


Messages : 44
Localisation : Alsace

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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?

Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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)...

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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)

_________________
Optimisation génération de terrain (style terraria) Runningpotato1Optimisation génération de terrain (style terraria) TvF6GED Optimisation génération de terrain (style terraria) MdetltS
Revenir en haut Aller en bas
Wgr18
Plutôt bien
Wgr18


Messages : 44
Localisation : Alsace

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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 :/

_________________
Optimisation génération de terrain (style terraria) Runningpotato1Optimisation génération de terrain (style terraria) TvF6GED Optimisation génération de terrain (style terraria) MdetltS
Revenir en haut Aller en bas
Wgr18
Plutôt bien
Wgr18


Messages : 44
Localisation : Alsace

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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?
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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 gnii

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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'...

_________________
Optimisation génération de terrain (style terraria) Runningpotato1Optimisation génération de terrain (style terraria) TvF6GED Optimisation génération de terrain (style terraria) MdetltS
Revenir en haut Aller en bas
Invité
Invité




Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 24 Avr 2013 - 21:56

https://cbna.forumactif.com/t11449-structure-en-chunk-a-la-minecraft

t'as de la chance , m@d_doc a fait un excellent exemple de générateur de terrain, en plus c'est assez bien optimisé Smile
Revenir en haut Aller en bas
Wgr18
Plutôt bien
Wgr18


Messages : 44
Localisation : Alsace

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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 !
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) EmptyMer 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 mrgreen2 (et si en plus tu combine ca à Win8, j'en parle même pas... awesome )

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Contenu sponsorisé





Optimisation génération de terrain (style terraria) Empty
MessageSujet: Re: Optimisation génération de terrain (style terraria)   Optimisation génération de terrain (style terraria) Empty

Revenir en haut Aller en bas
 
Optimisation génération de terrain (style terraria)
Revenir en haut 
Page 1 sur 1

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: