AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-21%
Le deal à ne pas rater :
LEGO® Icons 10329 Les Plantes Miniatures, Collection Botanique
39.59 € 49.99 €
Voir le deal

 

 Optimisation d'un remake du jeu 'Son of blagger'

Aller en bas 
AuteurMessage
egofree
Nouveau



Messages : 4

Optimisation d'un remake du jeu 'Son of blagger' Empty
MessageSujet: Optimisation d'un remake du jeu 'Son of blagger'   Optimisation d'un remake du jeu 'Son of blagger' EmptySam 28 Sep 2013 - 18:27

Bonjour,

J'ai fait avec game maker un remake du jeu de plates-formes 'Son of blagger' qui est sorti en 1984 sur le Commodore 64. C'est la première fois que j'essaie de programmer un jeu.

Voici une copie d'écran du jeu original :
Optimisation d'un remake du jeu 'Son of blagger' Ecran_11

et du remake :
Optimisation d'un remake du jeu 'Son of blagger' Ecran_10

J'aimerais partager avec vous les optimisations que j'ai réussi à implémenter sur ce jeu, et notamment les fonctions 'instance_activate_region' et 'instance_deactivate_region' que j'ai utilisé. Comme j'ai passé pas mal de temps à faire fonctionner correctement ces fonctions, j'espère que cela permettra de gagner du temps à ceux qui voudraient les utiliser dans un contexte similaire.
Le 'problème' avec ce jeux est que les niveaux sont imbriqués les uns dans les autres et qu'il n'y a qu'une seule 'room' pour tous les niveaux. Cela signifie que par défaut les objets de tous les niveaux sont actifs en même temps. (un peu moins de 8000 objets). Avec la dernière version de Game Maker et un ordinateur nouveau et puissant cela ne pose pas trop de problèmes, mais c'est loin d'être optimal pour des ordinateurs plus anciens.
Dans ce cas, les tutoriaux sur game maker conseille d'utiliser quand c'est possible des tuiles pour le décor au lieu d'objets. Mais le problème est que le joueur peut interagir avec une grand partie du décor,ce qui signifie qu'on est obligé dans ce cas d'utiliser des objets. Cela ne règle donc pas le problème (excepté pour le décor qui se trouve à l'extérieur du mur principal, on peut utiliser des tuiles dans ce cas).
D'abord j'ai pu réduire le nombre d'objets en utilisant des objets plus grands. Comme le jeu original utilisait des caractères ASCII de grandeur 8 pixels sur 8, j'ai pu souvent remplacé deux caractères par un seul objet. Cela a permis de réduire de moitié le nombre d’objets actifs.

Ensuite j'ai essayé les fonctions activate et deactivate region,comme c'est conseillé dans le manuel :

Code:
instance_deactivate_region(view_xview[0], view_yview[0], view_wview[0], view_hview[0], false, true);
instance_activate_region(view_xview[0], view_yview[0], view_wview[0], view_hview[0], true);
Cela permet de rendre actif seulement les objets qui sont visibles à l'écran. Mais le problème est qu'il y a beaucoup d'objets dans le décor qui sont animés (échelles, tapis roulants, plates-formes mouvantes,etc). Cela implique que lorsque le joueur bouge et provoque un défilement de l'écran, les objets animés ne sont plus synchronisés entre eux, car lorsque objet est réactivé son animation l'est aussi.
J'ai trouvé la solution en utilisant pour chaque objet animé la fonction suivante :

Code:
with(objet)
{
    image_index = objet.image_index;
}
Cela règle le problème de synchronisation pour le décor. Mais il reste le problème des ennemis. Ceux-ci peuvent sortir de l'écran et revenir. Avec les méthodes activate et deactivate regions, le mouvement des monstres est aussi désynchronisé. Finalement j'ai laissé cette méthode, et j'ai utilisé à la place un tableau qui contient pour chaque niveau des rectangles, qui définissent les zones visibles et actives :

Code:
active_region[1,LEFT_COORDINATE] = 546;
active_region[1,TOP_COORDINATE] = 96;
active_region[1,WIDTH] = 1246;
active_region[1,HEIGHT] = 556;

active_region[2,LEFT_COORDINATE] = 802;
active_region[2,TOP_COORDINATE] = 288;
active_region[2,WIDTH] = 990;
active_region[2,HEIGHT] = 604;

.....
Ensuite lors du début de chaque niveau, je désactive tout, et j'active les régions nécessaires :

Code:
var number_of_regions = array_length_2d(active_region,level) / 4;

for (i = 0 ; i <= number_of_regions - 1 ; i += 1)
   instance_activate_region(active_region[level,LEFT_COORDINATE + i*4], active_region[level,TOP_COORDINATE + i*4] , active_region[level,WIDTH + i*4] , active_region[level,HEIGHT + i*4], true);
Avec méthode, seul quelques centaines d'objets sont actifs.
Revenir en haut Aller en bas
 
Optimisation d'un remake du jeu 'Son of blagger'
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Son of Blagger - remake
» FF7 Remake sur PS3 ?
» remake de batman cpc - jeu en 3D iso
» BrD Remake sur GameBoy
» Optimisation de mon .gmk

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