AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Destruction de terrain

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Destruction de terrain   Mer 5 Oct 2011 - 9:04

Terrain Destructor


Bon, suite à la demande de Mobi, voilà un exemple de à quoi une destruction de terrain peux ressembler.

Téléchargement

Les 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
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 10:31

Sympa, mais y a toujours le même problème. Faut toujours détruire et recréer un sprite Sad

_________________
                 
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 11: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
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 11: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.

_________________
                 
Revenir en haut Aller en bas
Mobi
Utilisateur confirmé: Rang ****
avatar

Messages : 1256
Localisation : Dijon

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 11: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 gnii gnii gnii

_________________
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 11: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
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 12: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.

_________________
                 
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 12:58

bref, dans GM on peux oublier :p

_________________
Tous les icones de gm utilisables sur le cbna ICI
Revenir en haut Aller en bas
http://www.lecbna.org
Mobi
Utilisateur confirmé: Rang ****
avatar

Messages : 1256
Localisation : Dijon

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 14:05

Oui je pense !!!
Mais je l'utilise juste pour une maquette le temps de m'améliorer en c++ awesome

_________________
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 14: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
Revenir en haut Aller en bas
http://www.lecbna.org
Mobi
Utilisateur confirmé: Rang ****
avatar

Messages : 1256
Localisation : Dijon

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 14: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

_________________
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 14: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 awesome

_________________
                 
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 14:34

essaye déjà de faire un array/data structure de cette taille :p

_________________
Tous les icones de gm utilisables sur le cbna ICI
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 15: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 - 15:57, édité 1 fois
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 15:33

un array de bool.... dans GM ?!?
tu veux dire un byte par valeur?

_________________
Tous les icones de gm utilisables sur le cbna ICI
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 15: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.... crossa
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...

_________________
                 
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 16: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
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 16: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

_________________
                 
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 16: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
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 16:27

Ohoh j'imagine x)

_________________
                 
Revenir en haut Aller en bas
Mobi
Utilisateur confirmé: Rang ****
avatar

Messages : 1256
Localisation : Dijon

MessageSujet: Re: Destruction de terrain   Mer 5 Oct 2011 - 17:12

Ça à l'air très complexe !!!! guns

_________________
Revenir en haut Aller en bas
M@d_Doc
Modérateur
avatar

Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

MessageSujet: Re: Destruction de terrain   Lun 10 Oct 2011 - 13: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
Revenir en haut Aller en bas
http://www.lecbna.org
Termite
Utilisateur confirmé: Rang ****
avatar

Messages : 1005
Localisation : Dans ta charpente !
Projet Actuel : RayEngine 5.0

MessageSujet: Re: Destruction de terrain   Lun 10 Oct 2011 - 13: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 lampe_b

Ensuite suffit de faire deux coordonnées x&y attachés à une grille, et on test par rapport à l'array de booléens Very Happy

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.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Destruction de terrain   Lun 10 Oct 2011 - 13: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.

_________________
                 
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Destruction de terrain   

Revenir en haut Aller en bas
 
Destruction de terrain
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Help ! Poussette reversible, pliage compacte, tout terrain !
» Service d'Enlèvement & Destruction d'Engins Explosifs: SEDEE
» choisir une poussette tout terrain
» Quel terrain pour quel jeu
» Gâteau terrain de foot

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