| Destruction de terrain | |
|
|
Auteur | Message |
---|
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Destruction de terrain Mer 5 Oct 2011 - 11:04 | |
| Terrain Destructor Bon, suite à la demande de Mobi, voilà un exemple de à quoi une destruction de terrain peux ressembler. TéléchargementLes scripts : Allez, j'explique : terrain_create() : Cette fonction "créer" le terrain. Pas besoin d'argument, tout est automatique. Retourne 0 si le terrain existe déjà. terrain_destroy() : Détruit le terrain. Si le terrain n'existe pas/plus, retourne 0. Cette fonction est importante, car chaque 'terrain' est une surface, prenant de la mémoire. terrain_blow(x,y,r): Fonction principale, elle fait un trou dans le terrain, centré en x,y et de rayon R. terrain_retrieve(): Encore une fonction importante : Faire un trou dans un terrain ne l'affichage pas directement. Le sprite de l'objet contenant le terrain n'est rafraichit que quand on appelle cette commande! C'est une opération couteuse en performance, alors on essaye de réduire son utilisation. Le mieux c'est de la placer dans le end step, comme ça, c'est rafraichi une fois par step et pas à CHAQUE explosion. Elle change automatiquement le sprite_index de l'instance contenant le terrain, mais retourne aussi l'id du sprite utilisé. A chaque appel de cette fonction, l'ancien sprite (si différent du sprite 'de base', inclu dans gm) est détruit. terrain_check(): Cette fonction permet de savoir si il le terrain est encore visible ou entièrement détruit. Ca permet de détruire le terrain si il n'existe plus du tout et qu'on en a plus besoin. terrain_draw() : Affiche tout bêtement la surface. Est normalement inutile. Il y a encore deux paires de fonctions : terrain_blow_begin() / terrain_blow_end() : La première retourne 'true' si le terrain existe bien. Tout code draw entre les deux fera le trou correspondant à la forme. Marche avec draw_point, draw_circle, draw_rect, etc... mais PAS AVEC draw_sprite() ! Une fois de plus, ça ne rafraichit pas le sprite, il faut utiliser terrain_retrieve() pour ça. terrain_add_begin() / terrain_add_end(): La première retourne 'true' si le terrain existe bien. Tout code d'affichage entre les deux 'rajoute de la matière' sur le terrain. Tout marche normalement (shapes, primitives, sprite...) Bon, ça fait pas mal de truc et c'est pas forcément très clair vu comme ça. De toute façon, il y a un exemple dans le download, et voilà 'en gros' comment faire marcher le truc. - Créer un objet 'monTerrain' -Dans le create : - Code:
-
terrain_create() -Dans l'event destroy : - Code:
-
terrain_destroy() -Dans l'event global mouse left pressed : - Code:
-
terrain_blow(mouse_x - x , mouse_y - y, 16); terrain_retrieve(); Et voilà, en placant cet objet dans une room, on peux cliquer pour faire des trous dedans. Bien sur, faut lui assigner un sprite au début, hein. Téléchargement_________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 12:31 | |
| Sympa, mais y a toujours le même problème. Faut toujours détruire et recréer un sprite |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 13:12 | |
| tant qu'on utilise le système de collision de gm, oui. Mais ça reste une solution assez acceptable : on peux utiliser le système de collision de GM (relativement rapide et facile à utiliser), et mine de rien, ça tourne relativement bien. _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 13:18 | |
| Pas sur les ordinosaures :p
Mais de toute façon le genre de jeu style worms faut même pas penser a le faire sous GM quoi. Je dit pas qu'on peut pas en faire, mais ce serais beaucoup plus rapide/satisfaisant/concluant de passer a un autre langage.
Sinon le système de surfaceTexture * surfaceBlanche + tableauCollisions donne de bons résultats, mais c'est pas a la porté du nouveau venu quoi. |
|
| |
Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 13:32 | |
| - Citation :
- de passer a un autre langage
J'y travail, j'y travail !!! Merci quand même, c'est super sympa de ta part _________________ |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 13:50 | |
| Alors (pour donner une idée, c'est pas pour prouver que SI, c'est rapide, je sais que c'est pas forcément le top), voilà les résultats que j'obtient sur mon ordi portable (dell precision m4300 d'il y a 5 ans) Dans une room avec un seul terrain... de 800x600 (donc travail sur une surface de cette taille + génération de sprites de 800x600)
sprite size : 800x600 room_speed : 60
En faisant des trous à chaque step, et en rafraichissant le sprite à différentes fréquences : 57 fps : refresh tous les 10 steps (brefs, on a l'impression que ça lag) 53 fps : refresh tous les 5 steps 45fps : refresh tous les 2 steps (complètement fluide à la vue) 31 fps : refresh à CHAQUE step.
Pour des jeux de type worms, c'est suffisant, surtout si on fait un truc avec une résolution proche de l'original... un terrain de 800x600 est déjà relativement grand, et surtout, on a pas à faire un refresh à chaque step, juste le temps d'une explosion.
Bref, ça devrait passer :p _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 14:44 | |
| Et avec une espèce de quad tree ça doit bien booster les perfs. D'ailleurs c'est même une obligation je pense de découper ton terrain en plusieurs bouts, histoire de pas recharger un énorme sprite alors que tu peut juste en recharger 2 ou 3 petits bouts.
Mais bon 600*800 c'est pas terrible. Perso je fait mes tests dans des salles de 3200 * 960, et avec le système dont je te parle je tourne vers 130 fps avec refresh chaque step :p Le seul hic c'est que les collisions sont via un array, et un array de 3200 * 960 ça fait lourd si on utilise pas d'op binaires pour compresser. |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 14:58 | |
| bref, dans GM on peux oublier :p _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 16:05 | |
| Oui je pense !!! Mais je l'utilise juste pour une maquette le temps de m'améliorer en c++ _________________ |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 16:07 | |
| non non, mon truc passe très bien pour du gm, je parlait de la méthode avec un énoooorme array... GM arrive pas à gérer des trucs comme ça :p _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 16:14 | |
| aaa ok Mon truc est encore valable, c'est une maquette ^^' Elle viendra surement (si je la fini bien) dans la list des projets : nom de code --> Worms360 _________________ |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 16:33 | |
| - M@d_Doc a écrit:
- bref, dans GM on peux oublier :p
N'en soit pas si sur :p Jvais faire des tests et si ça marche hohoho |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 16:34 | |
| essaye déjà de faire un array/data structure de cette taille :p _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 17:31 | |
| Jviens de faire un array de bool de 6400*4800, et il prend vers les 7Mo au lieu de 700 si c’était un tableau de doubles de GM. Tout ça semble prometteur, surtout que j'ai pas encore optimisé ('fin a cause de certains problèmes liés a GM).
Reste a voir si la vitesse de lecture/écriture est abordable.
Dernière édition par onilink_ le Mer 5 Oct 2011 - 17:57, édité 1 fois |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 17:33 | |
| un array de bool.... dans GM ?!? tu veux dire un byte par valeur? _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 17:38 | |
| Yep un bit par valeur. ps: byte = octet en anglais, a ne pas confondre avec bit Edit : par contre je crois avoir dit une connerie, cpas possible que ça fasse que 2Mo un tableau de cette taille.... GM me joue des tours, ça doit être parce que je le laisse initialiser les valeurs tout seul. Edit2: Yep c'est ça, et en principe un tableau de bits de 6400*4800 ça prend 3Mo (vers les 7Mo sous GM), et un tableau 64000*48000 au moins 3Go... |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 18:14 | |
| non non, je parlais bien de BYTE, je pensais (pour pas paumer de place, voir même vachement économiser de la mémoire) que tu mets un nombre entre 0 et 255 dans chaque 'case' de ton array, et que tu choisis toi même quel bit tu veux lire dans le byte. D'ailleurs, vu que de tout façon gm stocke tout dans des doubles, tu pourrais mettre vachement plus dans une seule valeur, pour la même mémoire utilisée. Faut juste trouver un compromis entre la mémoire utilisée et le temps que met le processeur à faire toutes les opérations binaires :p _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 18:22 | |
| Yep voila c'est ce que je fait :p Mais autant en C par exemple c'est tranquille a faire, autant avec GM c'est vraiment la marde ._.
En fait GM c'est vraiment super quand tu veux faire des challenges xD |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 18:23 | |
| ouaip, d'ailleurs dans le même genre, vu que j'ai aussi déjà travaillé sur les array, pour palier à la limite de taille des ds_list/ds_grid, j'avais commencé à faire un système automatique qui swappe entre différents tableaux, et c'était pas beau à voir ^^ _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 18:27 | |
| |
|
| |
Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: Destruction de terrain Mer 5 Oct 2011 - 19:12 | |
| Ça à l'air très complexe !!!! _________________ |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Destruction de terrain Lun 10 Oct 2011 - 15:05 | |
| J'ai un peu bidouillé le truc, l'exemple dispo sur la première page montre un exemple de comment ça marche avec plein de petites cases, plutôt qu'un seul gros terrain. _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Destruction de terrain Lun 10 Oct 2011 - 15:24 | |
| Pourquoi pas faire une DLL qui exploite un vector<vector<bool>> ? Comme ça, un octet par valeur et c'est peut être plus rapide Ensuite suffit de faire deux coordonnées x&y attachés à une grille, et on test par rapport à l'array de booléens Après pour dessiner je verrais bien un blend-mode sur un masque noir&blanc, mais je sais pas si GM va trop aimer :/ _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Destruction de terrain Lun 10 Oct 2011 - 15:42 | |
| Déjà je vais t'apprendre un truc Termite, c'est que les vector c'est pas mal plus lent que les array normaux (demande a -Coco- quand on avais fait nos tests pour un minecraft like), donc pour ce genre de dll faut préférer l'allocation a la mano. Ensuite un autre truc, selon les système le type bool ne prend pas qu'un octet, donc il vaux mieux préférer les char. Puis si on a qu'un seul bit a stocker vaux mieux créer un système avec op binaires pour gagner 8x plus de place :p
Pis dernier truc, j'ai déjà essayé, et au final le résultat est vraiment mauvais :/ Bref faire un worms like sous GM vaux mieux ne pas trop y penser. |
|
| |
Contenu sponsorisé
| Sujet: Re: Destruction de terrain | |
| |
|
| |
| Destruction de terrain | |
|