3Arks - Jeu 2D isométrique (RPG, aventure, en ligne)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par blendman »

salut

Voici le 1er screenshot de mes essais pour mon jeu "3arks", avec purebasic 4.51.

Pour le moment, voici ce que j'affiche :
- un background tiled (une image qui se répète pour le fond, quoi :)
- le personnage (sprite3D)
- son ombre (sprite3D
- un 1er test pour un sort (sprite3D + blendmode)

Le 1er screenshot :
(Dobro : tu peux mettre le lien de ton image entre les balises [ img] , ça permet de la voir dans le forum)
Image

Bon, je sais, c'est vide, et c'est tout, mais j'ai un peu galéré à comprendre comment afficher un png transparent avec canal alpha, et ça ne fait que 2 ou3 jours que j'ai commencé la programmation avec purebasic (je n'ai pas fait vraiment de programmation avant, à part le gml de game maker). Je suppose que le seul moyen d'afficher un png transparent avec canal alpha en niveau de gris est de passer par un sprite3D ?

Le problème, c'est que je vais devoir afficher dans mon jeu environ 500 à 700 sprites (au minimum) pour le décor + environ 50 à 100 sprites pour les personnages, par map.
Une map faisant environ 4000*3000, et bien entendu, je n'afficherai que ce qui est présent à l'écran.
ça devrait donc me faire afficher environ 50-70 sprite3D à l'écran.

voiloutch.

ma question : ça ne risque pas de poser problème niveau performance ou il n'y aucun soucis ?
Dernière modification par blendman le ven. 25/févr./2011 8:43, modifié 3 fois.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par Warkering »

Je t'aime! :D

Sinon, pour les performances, ça dépends de comment tu utilise toutes les transformation. Mais ne t'attends peut-être pas à ce que ça tourne sous un Pentium MX! :wink:
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par Huitbit »

Je vois que ça avance bien :P !

Pour le nombre de sprites, il faudrait demander aux spécialistes, mais je crois que tu as de la marge.

Je revisité mon pathfinding(en mode console :mrgreen: ).
La version avec les listes chaînées n'avait pas de problèmes, pour celle avec le tri par tas, j'ai trouvé le bug(un GROS bug : MOI, j'avais zappé un des remaniements du tas).

Image

Je vais mettre un peu d'ordre dans le code et je posterai avec quelques explications, ça fera une version de plus !

Hasta la vista !
Elevé au MSX !
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par jbernard13 »

TRop fort blendman

le specialiste du jeu2d c'est comtois qui à l'epoque avez fait un tuto + editeur de niveau .
Jbernard13
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par Cool Dji »

Salut Blendman,

500 à 700 sprites, ça passe à l'aise :D
Dans Mad Fire, ya un dual scrolling sachant que chaque scroll doit être composé (de mémoire) d'environ 500 tuiles de 32*32...
et en dessous, ya des sprites qui font des étoiles + les sprites des méchant, des tirs...

Comme tu ne peux pas compiler avec la version démo, voici un zip avec l'exécutable :
http://xdji.free.fr/Telechargement/MadFire-2009.zip

Mais les sources sont accessibles sur le forum
http://www.purebasic.fr/french/viewtopi ... t=mad+fire

En tous les cas, bravo pour ton début et je suis fan de ton style graphique !
Only PureBasic makes it possible
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par djes »

blendman> Bienvenue sur le forum :)
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par stombretrooper »

Alors là, j'ai qu'une chose à dire : bravo ! J'aurais pas crus que tu arrives à faire une screenshot de ce genre en si peu de temps !
http://www.purebasicstreet.com/ - Site dédié à purebasic.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par blendman »

Salut

Merci à tous pour vos commentaires.

Voici deux nouveaux screenshots de mes avancées :

http://blendman.free.fr/dev/pb/3arks_purebasic_02.jpg

Image

Les nouveaux ajouts :
- ajouts d'arbres (avec leur ombres)
- ajouts de sols (pour les chemins, etc..) : toujours affichés au dessus du background (le sol vert), mais en dessous du reste.

Bon, j'ai un petit soucis d'affichage de certains arbres, je ne sais pas pourquoi.

les arbres et sols sont générés de manière aléatoire (position, et image). De plus, maintenant, les centres des objets ne sont plus en (0,0), mais ils sont positionnés en fonction du sprite.
Évidemment, j'ai revu une grosse partie du code pour que tout cela soit plus ou moins automatique (structure décor, sol, personnage, tableaux pour les décors et image décors, ainsi que pour les sols, etc..).

Pour le moment, je ne gère pas encore le depth (le fait qu'un arbre devant un autre devrait être devant).
A ce propos, j'aurai une question :
- comment dois-je procéder pour le "depth" (ou Z-order) : je pense que je dois faire un "tri" en fonction du y de chaque "objet", mais je ne sais pas du tout comment on fait ça :) (tri par pas ? liste chainée ?).
Donc, si vous avez des informations là-dessus, cela m'intéresse ;).
Warkering a écrit :Je t'aime!
lol. Et pourquoi au fait ? parce que tu aimes les jeux en 3D/2D iso ?

Huitbit a écrit :Pour le nombre de sprites, il faudrait demander aux spécialistes, mais je crois que tu as de la marge.

Je revisité mon pathfinding(en mode console :mrgreen: ).
ça a l'air intéressant :). Si tu le postes, je te l'emprunterai peut être pour le mettre dans mon jeu ;).

jbernard13 a écrit :TRop fort blendman
le specialiste du jeu2d c'est comtois qui à l'epoque avez fait un tuto + editeur de niveau .
oui, j'ai commencé à regardé le tutoriel sur games-creator. Je pense qu'il va bien me servir :).
Cool Dji a écrit :500 à 700 sprites, ça passe à l'aise :D
C'est cool ça, même des png assez grands (500*300) avec canal alpha (en niveau de gris) ? :)
Dans Mad Fire, ya un dual scrolling sachant que chaque scroll doit être composé (de mémoire) d'environ 500 tuiles de 32*32...
et en dessous, ya des sprites qui font des étoiles + les sprites des méchant, des tirs...

Comme tu ne peux pas compiler avec la version démo, voici un zip avec l'exécutable :
http://xdji.free.fr/Telechargement/MadFire-2009.zip

Mais les sources sont accessibles sur le forum
http://www.purebasic.fr/french/viewtopi ... t=mad+fire
Ah oui, il est très chouette ton jeu dis donc ! C'est toi qui a fait les sprites ?
En tout cas, c'est vraiment sympa comme jeu.
En tous les cas, bravo pour ton début et je suis fan de ton style graphique !
Merci :)
djes a écrit : Bienvenue sur le forum
Merci.
stombretrooper a écrit : Alors là, j'ai qu'une chose à dire : bravo ! J'aurais pas crus que tu arrives à faire une screenshot de ce genre en si peu de temps !
coucou copain.

Il faut dire que Purebasic est un langage vraiment cool, pas trop difficile à comprendre (pour les bases en tout cas) ;).
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par Backup »

............
Dernière modification par Backup le sam. 01/oct./2011 10:43, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par djes »

Pour ton problème de de z-order, les tableaux et les listes chainées ont des fonctions de tri relativement rapides. Dans ton cas, il faut trier sur l'Y du pied de l'arbre. Polux avait fait un éditeur de niveau il y a quelques temps qui prenait tout ça en charge.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par blendman »

yop

Bon, je viens de terminer un premier essai de scrolling et c'est super ! Purebasic est vraiment un langage performant c'est impressionnant (beaucoup plus que la SDL avec du c/c++ en ce qui me concerne).
Le scrolling est super fluide, sans ramer, et cela avec énormément de sprites créés (et pas des petits sprites). Vraiment, je suis pour le moment très content du résultat (et encore, je n'ai rien optimisé) :).

Je me posais la question concernant mon scrolling : est-ce que c'est très faile ou je me suis trompé ? voici ce que j'ai fait :
- j'utilise 2 variables (global) de type scroll_x et scroll_y, et lorsque j'appuie sur la touche du haut, j'augmente scroll_x de 2 par exemple.
Et tous mes sprites sauf le joueur ont leur x = position_x - scroll_x
(c'est un exemple).
Le scrolling c'est aussi simple que ça , c'est à dire bouger tous les sprites en même temps, ou faut-il bouger une caméra virtuelle et si oui, comment faire ça ? :).
Dobro a écrit :tiens voici un code qui affiche 1000 sprite 3D touche ESC pour quitter
Merci pour ton exemple :). J'ai fait un essai sur ma scène avec plus de 1000 sprites (arbres+ sol) et effectivement, les performances sont très bonnes :).

djes a écrit :Pour ton problème de de z-order, les tableaux et les listes chainées ont des fonctions de tri relativement rapides. Dans ton cas, il faut trier sur l'Y du pied de l'arbre. Polux avait fait un éditeur de niveau il y a quelques temps qui prenait tout ça en charge.
oui, c'est ça que je cherche. Mais comment faire un tri avec un tableau ou avec une liste chainée (pour le moment, j'utilise des tableaux pour mes sprites) ?
dois-je une seule structure pour tous les sprites (décor, sols, personnage, etc..) et un seul tableau ?
Quelles sont les fonctions pour trier ensuite ce tableau en fonction du y des sprites ?

Merci des informations :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par djes »

A ta place je traiterais différemment sol et objets ayant une hauteur. Pour ces derniers je ferais une liste structurée avec une structure qui contiendrait le point chaud de chaque objet que je placerais selon mes besoins avec un petit éditeur (par exemple pour mettre le point chaud d'un perso au niveau de ses pieds). Pour l'affichage, je ferais un tri avec SortStructuredList() sur le Y du point chaud. Il faudrait pas mal jongler avec les coordonnées, mais si tout est bien défini au départ, pas de souci.

Dommage que Polux ne soit pas là, il pourrait bien t'aider. :)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par blendman »

djes a écrit :A ta place je traiterais différemment sol et objets ayant une hauteur.
Je comprends. J'ai donc créer une structure decor_st pour tous les objets ayant une hauteur et j'ai ajouté des paramètres que je souhaitai pour certains "objets" avec extends,au sein d'autres structures (personnages, ennemis, etc..).
Pour ces derniers (objets ayant une hauteur) je ferais une liste structurée avec une structure qui contiendrait le point chaud de chaque objet que je placerais selon mes besoins avec un petit éditeur (par exemple pour mettre le point chaud d'un perso au niveau de ses pieds).

Pour le moment, j'ai créée plusieurs structures et tableau. Par exemple, pour les éléments du décor (arbres, plantes, rochers, mais aussi personnages, etc etc...) :

Code : Tout sélectionner

Structure decor_st
  decor_x.w
  decor_y.w
  decor_newposition_x.w
  decor_newposition_y.w
  decor_centre_x.u
  decor_centre_y.u 
  decor_imageID.u
EndStructure
le tableau de cette structure (500 arbres + 1 personnage) :

Code : Tout sélectionner

Global Dim tableau_decor.decor_st(501) 
Je définis le point chaud (hotspot) de la manière suivante :
dans un autre fichier "centre.pb", je définis chaque centre de chaque sprite à la main (je connais déjà leur "hotspot" (ou centre)), par exemple :

Code : Tout sélectionner

tableau_decor(0)\decor_centre_x = 104
tableau_decor(0)\decor_centre_y = 256
Enfin, je définis la nouvelle "position" du sprite (ou son offset) ainsi :

Code : Tout sélectionner

For i=0 to nombre_d_arbre
tableau_decor(i)\decor_newposition_x = tableau_decor(i)\decor_x - tableau_decor(u)\decor_centre_x
tableau_decor(i)\decor_newposition_y = tableau_decor(i)\decor_y - tableau_decor(u)\decor_centre_y
Next i


Pour l'affichage, je ferais un tri avec SortStructuredList() sur le Y du point chaud. Il faudrait pas mal jongler avec les coordonnées, mais si tout est bien défini au départ, pas de souci.
j'ai essayé avec ça :

Code : Tout sélectionner

SortStructuredArray(tableau_decor(), #PB_Sort_Ascending, OffsetOf(decor_st\decor_newposition_y), #PB_Sort_Long)
mais je n'arrive pas à faire en sorte qu'un arbre devant soit affiché devant, ils sont affiché par ordre de création.

Que dois-je faire ensuite, après avoir mis ce code, pour que les objets soit trier selon leur y et afficher à la suite, selon leur y ?

Merci :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par G-Rom »

- comment dois-je procéder pour le "depth" (ou Z-order) : je pense que je dois faire un "tri" en fonction du y de chaque "objet", mais je ne sais pas du tout comment on fait ça :) (tri par pas ? liste chainée ?).
Donc, si vous avez des informations là-dessus, cela m'intéresse
Par couche de hauteur.

Tu as un "moteur" isométrique , chaque tuiles fait admettons 64x32 pixels.
et en admettant que ton arbre fasse 128 pixels de haut. il faudra le découpé pour que ton moteur gère bien l'affichage. , ici la tuile du moteur fait 32 pixels de haut.

Tu découpes donc ton arbre en 4 (128/32) , le découpage le plus haut représente le sommet de ton arbre
le plus bas , la base.

Ton moteur dois pouvoir afficher les couches "d'altitude" , le sol , niveaux supérieurs intermédiaire , ciel.
chaque couche peut être représenté par un tableau :
dim Sol( 128,128)
ou
#LAYER_BASE = 1
#LAYER_CEQUETUVEUT = 2

dim couche(NbNiveau,128,128)

couche(#LAYER_BASE , 10 , 10 ) = herbe
au niveau du rendu , tu rends en premier la couche la plus base , à la plus haute , plus de problème de rendu pr le depth.
étant calé dans l'optimisation de l'affichage d'une carte 2D , je suis enclin à te filé un coup de paluche.

ps: Bienvenu sur le forum.

@+
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Jeu 2D isométrique (RPG, aventure, en ligne)

Message par blendman »

G-Rom a écrit :
- comment dois-je procéder pour le "depth" (ou Z-order) : je pense que je dois faire un "tri" en fonction du y de chaque "objet", mais je ne sais pas du tout comment on fait ça :) (tri par pas ? liste chainée ?).
Donc, si vous avez des informations là-dessus, cela m'intéresse
Par couche de hauteur.

Tu as un "moteur" isométrique , chaque tuiles fait admettons 64x32 pixels.
et en admettant que ton arbre fasse 128 pixels de haut. il faudra le découpé pour que ton moteur gère bien l'affichage. , ici la tuile du moteur fait 32 pixels de haut.

Tu découpes donc ton arbre en 4 (128/32) , le découpage le plus haut représente le sommet de ton arbre
le plus bas , la base.

Ton moteur dois pouvoir afficher les couches "d'altitude" , le sol , niveaux supérieurs intermédiaire , ciel.
chaque couche peut être représenté par un tableau :
dim Sol( 128,128)
ou
#LAYER_BASE = 1
#LAYER_CEQUETUVEUT = 2

dim couche(NbNiveau,128,128)

couche(#LAYER_BASE , 10 , 10 ) = herbe
au niveau du rendu , tu rends en premier la couche la plus base , à la plus haute , plus de problème de rendu pr le depth.
étant calé dans l'optimisation de l'affichage d'une carte 2D , je suis enclin à te filé un coup de paluche.

ps: Bienvenu sur le forum.

@+
salut. Merci pour ta réponse et pour ton aide.

je comprends le principe, mais en fait, le moteur que je réalise n'est pas vraiment un moteur isométrique :) (oui, je sais, le titre est trompeur).
J'utilise juste des images dont le rendu est isométrique, mais c'est tout. Le moteur est un simple moteur 2D tout bête avec des sprites.
Je n'utiliserai pas de tuiles (pour le moment), mais uniquement des sprites.
Oui, je sais ce n'est pas forcément le mieux, mais c'est ainsi que je souhaite faire pour le moment ;).

Donc, ce système de tuiles, bien que très intéressants, ne marche pas en ce qui me concerne.

Mes arbres (sprite entiers) étant créés de manière aléatoire, après cette création, je fais un tri et affiche ainsi mes sprites de décors:

Code : Tout sélectionner


SortStructuredArray(tableau_decor(), #PB_Sort_Ascending, OffsetOf(decor_st\decor_newposition_y), #PB_Sort_Long)
  For i=0 To nombre_d_arbre 
     DisplaySprite3D(#shado, (tableau_decor(i)\decor_x-tableau_shadow(1)\shadow_centre_x) + scroll_x,(tableau_decor(i)\decor_y-tableau_shadow(1)\shadow_centre_y)  + scroll_y)
   DisplaySprite3D(tableau_decor(i)\decor_imageID, (tableau_decor(i)\decor_newposition_x) + scroll_x,(tableau_decor(i)\decor_newposition_y) + scroll_y)
Next i
Mais lorsque je les affiche, ils ne s'affichent pas (ou ne se réactualisent pas) selon leur y.

C'est cela que je cherche à faire ;).
Dernière modification par blendman le sam. 26/févr./2011 15:36, modifié 1 fois.
Répondre