Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
Sujet: Loading script Lun 12 Juil 2010 - 2:55
Bonsoir à tous (bonjour ? lol ) J'ai programmé ce petit script pour les novices principalement, afin de faciliter l'utilisation des ressources externes. Ce code affiche une barre de chargement entièrement paramétrable durant le chargement des ressources.
Le code a écrit:
/* loading_script argument0 : true pour lancer le chargement (doit être lancé dans un draw pour ajouter un code à éxécuter : loading_script('sprite_add(...)'); A la fin du chargement, passe à la room suivante */
if !variable_local_exists('_loadlist') then _loadlist=ds_list_create();
//Définition des variables de couleur, etc if !variable_local_exists('_case_color') { _case_color=make_color_rgb(255,255,255); //couleur de la barre _bg_color=make_color_rgb(128,128,128); //couleur de fond de la barre, false pour le bg de la room _border_color=make_color_rgb(255,255,255); //couleur de la bordure, false pour ne pas la dessiner _load_width=200; //largeur de la barre, en pixels et > 0 _load_height=32; //hauteur de la barre, en pixels et > 0 _load_x=room_width/2-_load_width/2; //position x de la barre _load_y=room_height/2-_load_height/2; //position y de la barre _text_color=make_color_rgb(0,0,0); //couleur du texte _text_value='Chargement...'; //texte à afficher, mettez false pour ne pas l'afficher _text_align=fa_center; //alignement du texte : fa_left, fa_right, fa_center _text_x=_load_x+_load_width/2; //position x du texte _text_y=_load_y+_load_height/2-string_height(_text_value)/2; //Si vous êtes sous gm5, décommentez les lignes suivantes //_text_font='arial'; //_text_size='20'; _font_name=false; //nom de la police, false pour celle par défaut/celle actuellement utilisée } screen_refresh(); if is_real(argument0) { if !variable_local_exists('_wait') then _wait=1 else { _current_pos=0; repeat ds_list_size(_loadlist) { _total_percent=_current_pos/ds_list_size(_loadlist); execute_string(ds_list_find_value(_loadlist,_current_pos)); if variable_local_exists('_text_font') && _border_color then brush_color=_border_color; if !variable_local_exists('_text_font') && _border_color then execute_string('draw_set_color(_border_color)'); if _border_color { draw_line(_load_x,_load_y,_load_x,_load_y+_load_height); draw_line(_load_x,_load_y+_load_height,_load_x+_load_width,_load_y+_load_height); draw_line(_load_x+_load_width,_load_y+_load_height,_load_x+_load_width,_load_y); draw_line(_load_x,_load_y,_load_x+_load_width,_load_y); } if variable_local_exists('_text_font') && _bg_color {brush_color=_bg_color; execute_string('draw_rectangle(_load_x+1,_load_y+1,_load_x+_load_width-1,_load_y+_load_height-1)')} if !variable_local_exists('_text_font') && _bg_color {execute_string('draw_set_color(_bg_color)'); execute_string('draw_rectangle(_load_x+1,_load_y+1,_load_x+_load_width,_load_y+_load_height,0)')} if variable_local_exists('_text_font') then brush_color=_case_color else execute_string('draw_set_color(_case_color)'); if variable_local_exists('_text_font') then execute_string('draw_rectangle(_load_x+1,_load_y+1,_load_x+((_load_width-2)*_total_percent),_load_y+_load_height-1)') else execute_string('draw_rectangle(_load_x+1,_load_y+1,_load_x+((_load_width)*_total_percent-2),_load_y+_load_height,0)'); if variable_local_exists('_text_font') then font_align=_text_align else execute_string('draw_set_halign(_text_align)'); if _font_name != false thenif variable_local_exists('_text_font') then font_name=_text_font else execute_string('draw_set_font(_font_name)'); if variable_local_exists('_text_font') then font_color=_text_color else execute_string('draw_set_color(_text_color)'); if variable_local_exists('_text_font') then font_size=_text_size; if is_string(_text_value) then draw_text(_text_x,_text_y,_text_value); screen_refresh(); _current_pos+=1; } //Changez la ligne de dessous par une autre action à éxécuter une fois le chargement fini room_goto_next(); }} else { ds_list_add(_loadlist,argument0); }
Voilà, j'ai fait ça d'une traite et il est tard donc il y a peut-être quelques erreurs à corriger. C'est le bordel et c'est pas opti, mais j'avais besoin de la compatibilité avec gm 5.3 :nah: donc n'hésitez pas à commenter/corriger/etc.
En fait quand le jeu démarre il charge les sprites, background, sounds, etc que tu as mis dans ton gm6, et si y'en a beaucoup ça met énormément de temps. C'est au programmeur de l'optimiser en externalisant ses sprites, backgrounds, etc et de les charger durant le jeu car 1/ c'est plus rapide 2/ ça permet d'afficher le menu rapidement et de charger ensuite (comme les jeux pros) 3/ de ne charger que ce qui est nécessaire au niveau, et non pas tout le jeu d'un coup.
Mais c'est bien ton script, comme tu le dit, ca faéit comme les jeux pros et ca moins ****** que de tout charger d'un coup, par contre les jeux pros ont des fichier compilés eux...
_case_color=make_color_rgb(255,255,255); //couleur de la barre _bg_color=make_color_rgb(128,128,128); //couleur de fond de la barre, false pour le bg de la room _border_color=make_color_rgb(255,255,255); //couleur de la bordure, false pour ne pas la dessiner _load_width=200; //largeur de la barre, en pixels et > 0 _load_height=32; //hauteur de la barre, en pixels et > 0 _load_x=room_width/2-_load_width/2; //position x de la barre _load_y=room_height/2-_load_height/2; //position y de la barre
Messages : 6213 Localisation : Sur la Lune Projet Actuel : Projet HELLO/TOPAZE22 Mario Bros World
Sujet: Re: Loading script Mer 14 Juil 2010 - 11:29
Sauf que sous GM8, le chargement d'un .gmk, même obèse comme le miens, se fait très rapidement.
Si vos musiques et vos backgrounds (sauf les tuilables), sont en ressources externes, vous aurez beau avoir plein de bruitages, et plusieurs milliers de sprites, le chargement sera instantanée. Hormis la première barre de chargement (celle quand on lance l'exe), qui, de toute façon, est déjà automatique sous GM.
Bref, ce que je veux dire c'est que ton système est une bonne idée, mais vraiment, comme même mon projet n'a pas de temps de chargement hormis celui de quand on lance l'exe, je ne vois pas quand est ce que cela pourrait être utile, même un minimum. Mes rooms, même les ultra chargés se lancent en moins d'une demi seconde, et mon PC n'est pas une flèche.
Surtout que vos sprites et compagnie, c'est quasi jamais du HD, que tu "ultra faible résolution" donc au moins 10x plus rapide à charger que les miens.
GM gère déjà très très bien le chargement automatique tout seul, pourquoi se compliquer la vie à vouloir le contrôler sois même ?
Excellent programme, bravo à Mass pour sa réalisation, mais jamais utile. ou dites moi quand est ce que je me trompe, je suis ouvert, même si j'y crois vraiment pas. (et les perfs, sous GM, ça me connait)
_________________ Topique pour le Projet Hello Mario en préparation. Sorti du topique lorsque la première démo sera disponible.
Sujet: Re: Loading script Mer 14 Juil 2010 - 11:35
Dans un jeu en 3D ou tu importe un format non reconnu par GM (import maison quoi) c'est toujours très long. Deja un exemple de son utilité. Ensuite ce que tu dit topaze c'est parce que t'as l'ordi qui va avec, moi les chargements sont pas instantanés.... Dommage d'ailleur
_________________
Chlorodatafile Utilisateur confirmé: Rang *****
Messages : 2929 Localisation : Belfort Projet Actuel : Paralights
Sujet: Re: Loading script Mer 14 Juil 2010 - 11:40
j'approuve ce que dit onilink_, on a pas forcement l'ordi pour te telle chargement, moi, je sais que tes jeux mario, en général, j'attends au moins 1 minute pour qu'il charge complètement sur mon vielle ordi :/
Sujet: Re: Loading script Mer 14 Juil 2010 - 11:42
@ Topaze : Dans mon vieux shmup, j'avais fait une barre de chargement, parce que le chargement n'était absolument pas instantané (pas très long non plus, environ 5 secondes pour tout charger je crois), donc ce n'est pas du tout inutile. Ca sert en particulier comme l'a dit gosc pour les vieux ordis, pour savoir combien il reste à charger
Messages : 6213 Localisation : Sur la Lune Projet Actuel : Projet HELLO/TOPAZE22 Mario Bros World
Sujet: Re: Loading script Mer 14 Juil 2010 - 12:30
Ha, ba heu, bon, ba tet bien XD Ensuite, le jeu n'ira pas plus vite, c'est juste des temps de chargements, donc aux programmeurs de voir si ils veulent complexifier et dépenser du temps pour faire gagner 5s aux joueurs. Perso, je passe plusieurs années à faire un jeu gratuit, donc je pense que les joueurs peuvent tolérer quelques secondes de chargements pour vos jeux, ensuite, c'est vous qui voyez ^^
En tout cas, je reconnais la qualité du boulo fournis par Mass !
_________________ Topique pour le Projet Hello Mario en préparation. Sorti du topique lorsque la première démo sera disponible.
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
Sujet: Re: Loading script Mer 14 Juil 2010 - 14:53
Ben c'est surtout utile dans le sens où tu peux choisir quoi charger avec précision, plutôt que de charger tout le jeu, si par exemple t'a le choix entre trois mondes différents, etc, ça permet de charger uniquement ce monde plutôt que les trois en laissant poireauter l'utilisateur devant son pc deux minutes au lancement.