En ce momentGenshin ImpactValhallaBreath of the wildAnimal CrossingGTA 5Red dead 2
Liste des sujets
Texture dynamique
_Toastation_
Niveau 9
17 avril 2014 à 20:15:02
Bonjour Avant de commencer je précise que je travaille avec LibGDX en Java. Je suis en train de faire un prototype de jeu "tile-based". Voilà le problème, le jeu est donc composé de blocs qui forme des structures ( http://puu.sh/8cx06.png ), et j'ai besoin que ces structures puissent pivoter, cependant je dessine les tiles un par un donc quand je pivote la structure (j'applique une rotation sur chaque bloc de la structure) il y a un décalage ( http://puu.sh/8cx1B.png ). J'ai pensé à utiliser un frame buffer object pour chaque structure mais vu qu'elles sont dynamiques (i.e je peux y ajouter des blocs) cela me ferait modifier la taille du fbo à chaque fois qu'on ajoute ou retire un bloc, et les fbo sont déjà assez onéreux de base. Avez-vous une idée d'un moyen, assez performant, pour que je puisse récupérer la texture d'une structure (de plusieurs textures quoi) et puis appliquer des transformations dessus ? Merci de votre aide
Arkwolf
Niveau 30
17 avril 2014 à 20:40:07
J'aurais quelques idées
dire que chaque tile étend Actor. Ajouter ces tiles à un Group (scene2D.Group), et effectuer une rotation sur le group entier. Pas sûr à 100% que ça marche mais c'est ce que j'aurais testé dans un premier temps, généralement ça marche bien ces trucs
déplacer manuellement chaque tile pour que ça se retrouve à la bonne position une fois la rotation effectuée
faire une rotation de la caméra avant de dire au batch de dessiner les trucs, puis refaire une rotation pour que le reste soit dessiné normalement (si t'as pas besoin d'avoir la position des tiles pour les collisions c'est ce que j'aurai fait parce que c'est super rapide et efficace )
utiliser des Sprites, et se débrouiller pour qu'ils aient le même point d'origine. Comme ça normalement quand tu feras une rotation tous se tourneront à partir du même point, mais il faut trouver le même point (l'origine de la rotation est relative à chaque sprite du coup ça peut être chiant)
utiliser un Pixmap pour tout mettre sur la même texture et faire une rotation sur cette texture, mais bon ouais c'est niveau performance je pense pas que ce soit correct
c'est tout ce que je vois là
_Toastation_
Niveau 9
17 avril 2014 à 20:45:34
J'avais déjà pensé au pixmap mais ça me faisait de considérables chutes de fps. Appliquer le changement de positions, pourquoi psa, faut que je vois si ça va pas trop être complexe Pour l'instant je vais tester ta première solution, j'ai encore jamais testé tout ce qui est dans scene2D, c'est une bonne occasion pour commencer Merci d'avoir pris le temps de me répondre en tout cas
Arkwolf
Niveau 30
17 avril 2014 à 20:54:42
Pour calculer la position manuellement ça paraît simple si t'utilise des Vector2, tu as des méthodes toute faites pour les rotations
_Toastation_
Niveau 9
18 avril 2014 à 17:54:50
Hey c'est vachement cool en fait scene2D, j'aurais du aller voir ça plus tôt
Arkwolf
Niveau 30
18 avril 2014 à 18:09:59
Ouais, en tout cas pour les menus / GUI c'est le top du top Pour le reste perso je l'utilise pas
shared_ptr
Niveau 4
18 avril 2014 à 18:16:31
je ne sais pas comment fonctionne java et libgdx mais avec SFML (C++) on peut créer des objets abstraits transformables et drawables, tout ce qu'on attache à ses objets subissent les memes transformations.
_Toastation_
Niveau 9
18 avril 2014 à 18:33:15
Merci shared_ptr pour le conseil. Je fais un prototype pour l'instant en java, si mon idée rend bien, je la développerais en C++ + SFML.
_Toastation_
Niveau 9
18 avril 2014 à 22:40:53
Bon ça marche avec scene2D, par contre, là aussi j'ai des grosses chutes de FPS. Je vais donc passer à la bonne vieille trigo Vous n'auriez pas, par hasard, une idée de comment je pourrais repositionner chaque bloc (déjà pivoté) en fonction de ce point ? http://puu.sh/8e2b0.png
[-Shana-]
Niveau 10
18 avril 2014 à 22:43:54
Je te plains, c'est typiquement le genre de truc qui me prend la tête pendant des aprèm. Mais bon, en cours je vais généralement voir mon prof de maths et il voit ça avec moi (Vu qu'il est ultra sympa ) .
Bref, bonne chance ...
[-Shana-]
Niveau 10
18 avril 2014 à 22:44:30
+ Prend profit des chutes de FPS, fais de ton jeu un jeu au tour par tour ...
_Toastation_
Niveau 9
18 avril 2014 à 23:25:26
Avec le gameplay actuel, le tour par tour est impossible J'ai des idées de comment je pourrais m'y prendre mais ce serait assez long/lourd à faire... Je suis sur qu'il y a un moyen tout bête de faire ça en plus.
Arkwolf
Niveau 30
18 avril 2014 à 23:36:31
Bin utilise les Vector2 comme j'avais dit
Tu prend un point de le référence, tu le soustrais à chaque position et tu calcule l'angle, y'a tout dans les vector2, no prise de tête
par contre ça m'étonne que les perf avec scene2d te posent problème, t'as pas fait un truc de travers ?
_Toastation_
Niveau 9
18 avril 2014 à 23:43:54
Nope, je ne pense pas. Un stage, des group qui représentent les structures, et des actors qui sont les blocs. Je fais un renderChild pour chaque Group et c'est tout
_Toastation_
Niveau 9
19 avril 2014 à 16:19:01
Ah oui j'avais pas vu Ark Un truc du genre : pos.sub(structCenterPos).setAngle(angle);