[jeu] chargement des sprites

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

[jeu] chargement des sprites

Message par blendman »

salut

Je me suis posé une question sur le chargement des sprites dans mon jeu 3arks.

A l'heure actuelle, je ne charge que les sprites que j'utilise sur la map sur laquelle je suis.
- je charge donc les sprites que je réutiliserai (personnage et interface..)
- je charge les sprites ensuite spécifiques à la map sur laquelle je suis, lorsque je change de map.

Mais voilà, comme le jeu est online, multi-joueurs , on va avoir des peuples (personnages) différents à jouer.
J'ai fait un calcul rapide pour voir combien ça prendrait en ram :
(9 peuples * 8 directions * 8 images d'animation)+(7 types d'équipement à afficher*100 variétés d'équipement par type * 9*8*8) = + de 2Go

donc, évidemment, je ne peux pas tout charger à l'ouverture du jeu.
Mais comme je ne sais pas quel est le joueur est son équipement, autant, avant d'entrer ingame, on connait les joueurs présents, mais une fois qu'on y est, dois-je chargé lorsqu'un nouveau arriver la map ses sprites, puis l'afficher ?

Ou comment puis-je m'y prendre d'après vous pour ce type d'affichage ?

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

Re: [jeu] chargement des sprites

Message par G-Rom »

je suppose que tu ne vas pas tout afficher en même temps.
dans ce cas , dès lors que tu sais que tu vas afficher tel personnage avec tel équipements , tu le charges dans un thread ( pour ne pas bloqué le jeu )
une fois chargé ( le thread rend un flag à true par exemple ) , tu affiches le personnage.
dès lors que tu ne l'utilise plus , tu libères la ressource ( toujours dans un thread )
global FlagAffichage = #FALSE

Procedure ThreadChargement(RessourceID.i)
;Charge la ressource
;code...
FlagAffichage = #TRUE
endprocedure

Procedure ThreadDechargement(RessourceID.i)
;Libère la ressource
;code...
FlagAffichage = #FALSE
endprocedure


..code..
if FlagAffichage = #TRUE
...Afichage de la ressource
endif
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [jeu] chargement des sprites

Message par blendman »

G-Rom a écrit :je suppose que tu ne vas pas tout afficher en même temps.
dans ce cas , dès lors que tu sais que tu vas afficher tel personnage avec tel équipements , tu le charges dans un thread ( pour ne pas bloqué le jeu )
une fois chargé ( le thread rend un flag à true par exemple ) , tu affiches le personnage.
dès lors que tu ne l'utilise plus , tu libères la ressource ( toujours dans un thread )
global FlagAffichage = #FALSE

Procedure ThreadChargement(RessourceID.i)
;Charge la ressource
;code...
FlagAffichage = #TRUE
endprocedure

Procedure ThreadDechargement(RessourceID.i)
;Libère la ressource
;code...
FlagAffichage = #FALSE
endprocedure


..code..
if FlagAffichage = #TRUE
...Afichage de la ressource
endif
je comprends l'idée. Merci ;).

Mais si j'ai 50 à100 personnages sur la map, je dois créé 100 thread ou je n'en utilise qu'un ?
Dans ce dernier cas dois-je créé une map de flag pour gérer l'affichage (ou quelque chose comme ça) ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [jeu] chargement des sprites

Message par G-Rom »

dans un seul thread.
map SpriteFileToLoad.a()

SpriteFileToLoad("C:\MonSprite.bmp") = #true
SpriteFileToLoad("C:\MonSprite2.bmp") = #false
un coup de Foreach sur ta map dans un thread , et tu charges que les entré qui sont à #true
Fabrique toi un gestionnaire de ressource indépendant de ton jeu.

@+
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: [jeu] chargement des sprites

Message par graph100 »

Si j'ai bien compris le fonctionnement de ton jeu, tu as une map sur laquelle tu te déplaces.
Mais la map peux être grande, alors tu ne vois pas tout dessus.
En utilisant l'idée de G-Rom, avec un ou plusieurs thread de gestion des ressources, tu peux peut-être ne charger que les sprites autour de l'écran affiché par le joueurs, avec une marge.

En gros tu charges les sprites susceptibles d'être affiché dans pas longtemps. Et pareil pour les personnages. Quand ils sont trop loin de ton perso, tu ne les charges pas. Et dès qu'il arrivent près de ton espace d'affichage, paf, tu prépare les sprites dans un thread. A toi de trouver la marge à garder pour ne jamais avoir de perso invisible sur l'écran ^^
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [jeu] chargement des sprites

Message par blendman »

graph100 a écrit :Si j'ai bien compris le fonctionnement de ton jeu, tu as une map sur laquelle tu te déplaces.
Mais la map peux être grande, alors tu ne vois pas tout dessus.
En utilisant l'idée de G-Rom, avec un ou plusieurs thread de gestion des ressources, tu peux peut-être ne charger que les sprites autour de l'écran affiché par le joueurs, avec une marge.

En gros tu charges les sprites susceptibles d'être affiché dans pas longtemps. Et pareil pour les personnages. Quand ils sont trop loin de ton perso, tu ne les charges pas. Et dès qu'il arrivent près de ton espace d'affichage, paf, tu prépare les sprites dans un thread. A toi de trouver la marge à garder pour ne jamais avoir de perso invisible sur l'écran ^^
oui, c'est ça,mais c'est aussi un jeu en ligne, donc des joueurs peuvent arriver sur la map à tout moment, ou sortir de la map, et moi, en tant que joueur, je peux changer de map, etc..

Merci G-rom, je pensais utiliser une map() aussi car c'est assez rapide ;).
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [jeu] chargement des sprites

Message par Backup »

il me semble qu'il te faut sauver les coordonées, et le type de Sprite
sur l'ordi du client ... :)

de sorte que lorsque celui ci se connecte au serveur, il upload en meme temps
les coordonées sur la map, le type de sprite, les points,etc ...

comme ça le serveur, n'a pas a gerer quoque ce soit
il a le pseudo X qui se connecte
ce pseudo etait en coordonées x,y
il avait X point de vie
il etait un Gnome vert

a cette connexion , le serveur sait qu'il doit afficher X,Y point de la carte autour de la coordonnée
du client... et qu'il doit lui attribuer x point de vie , et l'image d'un gnome Vert ... :)


en general les Jeux on-line fonctionne comme ça ,
la preuve que j'en ai , c'est d'avoir fait des Cheats pour "Warrock"
qui fonctionnaient, en changeant les valeurs de la Ram de mon pc
qui du coup etaient transmises par le reseau , et hop tu met ton perso en lévitation
a 2000 metres d'altitude ... :lol:
et le serveur, simplet, pour le coup , ne cherche pas a comprendre .. il s'execute :)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [jeu] chargement des sprites

Message par Ar-S »

Laissez les coord/stat etc coté client, c'est (hélas) condamner son jeu d'avance à se faire polluer de cheater.
Autant en solo je me fou que les gens trichent, mais pour un jeu en multi, cette méthode est à mon avis à proscrire.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [jeu] chargement des sprites

Message par G-Rom »

c'est clair, c'est a proscrire, si tu sort un jeu multi, crois moi que je vais éplucher les failles :mrgreen:
le client n'est là que pour l'affichage.Le jeu , c'est le serveur, d'ailleurs le client ne connais pas les règles du jeu.
Si tu appuis sur une touche pour bouger , le client ne fait qu'envoyer au serveur l'état de la touche appuyé , et c'est lui
, et uniquement lui qui te fait bougé le sprite , et non pas le clavier ;).
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [jeu] chargement des sprites

Message par Backup »

c'est pourtant comme ça que sont fait les 3/4 des jeux par reseau :wink:

le Serveur est plus léger , le boulot est laissé a la charge des clients ..
le but est de crypter au maximum les infos qui transit.. c'est finalement pas trop compliqué :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [jeu] chargement des sprites

Message par G-Rom »

Heu , les 3/4 , t'abuse à peu quand même... Warrock est une bouse, c'est pas une référence en la matière :mrgreen:
En tout cas , si tu veut un truc "sécure" , le client ne décide rien , c'est lui qui est léger , le serveur , plus lourd. ;)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: [jeu] chargement des sprites

Message par graph100 »

G-Rom a écrit :En tout cas , si tu veut un truc "sécure" , le client ne décide rien , c'est lui qui est léger , le serveur , plus lourd. ;)
Si tu veux mon avis, c'est plus compliqué que cela ;)
Par exemple pour wow, (bien qu'un jeu 3d), il y a une sorte d'interpolation entre les déplacements du clients et la transmission au serveur. La preuve en est lors de lag, ou de déconnexion : le perso peut continuer à se déplacer, ce qui permet de ne pas freeze sans arret. Par contre tout ce qui affecte les autres joueurs, comme les sorts, passe par une vérif du serveur.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [jeu] chargement des sprites

Message par G-Rom »

Oui , c'est le principe que j'ai dis.
- Le client appuis sur la touche avancer
- Le client transmet qu'il à appuyer sur la touche au serveur
- Le serveur dis au client qu'il est en train de bouger
- Le client avance

Sans rentré dans les détails , il y a effectivement une interpolation entre les données reçue afin d'évité des mouvement brusques et une impression de saccade permanente. mais le sujet n'est pas là.
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: [jeu] chargement des sprites

Message par Fred »

J'appuie ce qui est dit plus haut: jamais d'intelligence dans un client, c'est facile de décompiler un client et de le modifier sans que le serveur puisse etre au courant.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [jeu] chargement des sprites

Message par blendman »

On va effectivement faire comme ça : tout mettre du coté server, le client ne fera qu'envoyer des clic de souris, des touches de clavier, et affichera ce qu'il recevra du server (les variables genre statistiques, les mobs, déplacements des autre joueurs, etc..).

Après, le pathfinding se fera peut être du coté client car ce n'est pas très gênant si c'est modifié de ce coté-là, ce n'est que du déplacement de personnage ( de toute façon, on y réfléchit).
Répondre