coucou
je tes fais le detail sur discord mais en voila un résumé ici
j'ai testé et regardé directement dans 2 version dispo sur 2 version, la premier est basé sur une grande image qui est affiché directement, tous les ver et les animation sont sous forme de sprite, il y a une parti qui tourne pour faire le background avec de la 3D mais qui n'a aucun effect et qui est juste pour faire jolie, se qui est aussi le cas pour le 2eme jeu testé meme si j'ai passé plus de temps a le reverse
donc le 2eme jeu est un peu plus particulier car c'est en faite un mix, il y a un carte en 2D qui peu etre édité et qui une fois qu'elle passe dans un algo bien lourd qui tourne en background dans l'editeur, on peu voir la carte mise a jours mais l'effect de profondeur est pas instantanément mise a jours, on peu voir que un mesh 3D est realisé depuis la carte 2D, et quant on regarde bien, l'algo essais de lissé la carte
donc je te conseil de passé sur une image qui pour chaque pixel est donné pour une taille connu, tu peu partir de une zone de 16 par 16 est equal a la taille d'un personnage, en tous cas c'est se que j'ai constaté en terme de valeur récurent dans les 2 jeu
le 2eme jeu a juste prise l'envie d'ajouté de la profondeur sur une image 2D pour avoir un effect plutot cool et de faire croire qu'on marche bien sur un sol qui se prendre les valeur de couleur/pixel de l'image, se qui va demandé a ton code vectoriel un travaille de
TITAN qu'il va pleuré et que sa sera bien plus simple d'affiché une image sur ta surface et d'utilisé les fonction vectoriel pour les tire balistique et les effect visuel uniquement, mais je ne te conseille pas de faire le rendu de la carte car j'ai vue les algo et tu va deja en bavé pour faire tout la physique, plus rapide de testé si une position est le sol ou pas que de prendre des element vectoriel qui vons te demandé un travaille de fou pour que au final le rendu a la tout fin sois sous forme d'image traitré par le GPU qui sera plus rapide pour lui que le CPU qui va passé plus de 75% de sont temps a donné les instruction au GPU et le GPU qui sera vraiment sous utilisé pour qu'il attent se qui arrive de ton code, je connais des jeu qui on voulu avoir beaucoup de chose fais en vectoriel, pour des element statique sans modification, sa passe, mais le probleme c'est qu'il utilise le vectoriel de façon abusif et au final des que un truc doit etre modifier, tous est a refaire, equivalent aun redraw extreme de absolument TOUS, alors qu'avec une image, tu fais que édité la region voulu et le reste ne bouge pas, donc mise a jours minimal, aucun contenu modifier qui est strictement le meme, temps de traitrement et vitesse, minimal, facilité de mise en place, fonction commun
donc fais un mix, le sais que les fonction vectoriel de purebasic peuvent affiché une image, et ensuit tu vien placé tes element comme les prop et objet et personnage fais en vectoriel si tu le veux, donc un mix propre
la parti physique est traitré dans un thread et la modification de l'image est faite si il y a des truc a faire se qui fais qu'elle sera prise en compte par la parti principal qui affiche le visuel, une image a affiché, des ligne vectoriel pour faire jolie et tu utilise un peu le GPU et tu maximise la stabilité et la regularité d'execution indépendament du visuel final
voila une petit section de code pour te donné un ordre d'idée de comment tu peu faire pour que ta physique et l'édition de la carte sois autonome
Code : Tout sélectionner
Global *PHYSIQUE_MAP_and_DIRECT__RAW_DRAWING_BUFFER=0
Global REQUEST_SOFT_CLOSE.q=0
Procedure MOTEUR_2(ID)
Static *temp_buffer,HDC.q:*temp_buffer=AllocateMemory($100)
HDC=StartDrawing(ImageOutput(ID)):If HDC=0:ProcedureReturn -1:EndIf
GetObject_(ImageID(a),$100,*temp_buffer)
*PHYSIQUE_MAP_and_DIRECT__RAW_DRAWING_BUFFER=PeekQ(*temp_buffer+24)
;variable HDC disponible pour fonction windows si besoin,
;variable du buffer direct de l'image pour manipulation special depuis tout position du code
;variable REQUEST_SOFT_CLOSE pour stoppé le thread au propre, le HDC est invalide une fois stoppé, seul *PHYSIQUE_MAP_and_DIRECT__RAW_DRAWING_BUFFER reste quant que l'image n'a pas etais free de façon explicitit
Repeat
If FUNCTION_OR_GLOBAL_VARIABLE_HERE;autorise l'execution a intervale regulier
;fais ton traitrement ici de la physique ici et l'editition de l'image, libre a toi de faire comme tu veux pour faire passé les element entre le gameplay et les input
Else:Delay(10)
EndIf
Until REQUEST_SOFT_CLOSE<>0
StopDrawing()
EndProcedure
; creation de la map avant le lancé le thread sur l'image, l'ID de l'image doit est le meme dans l'argument de createimage et du createthread
MAP_ID=0
CreateImage(MAP_ID,2048,2048,32,$ff000000)
;assure toi d'avoir l'option multithread activé sur ton purebasic de base et pour tes future code, sa ne lui fera aucun mal et sera profitable dans tous les cas
GLOBAL_SYSTEME_M_2=CreateThread(@MOTEUR_2(),MAP_ID)
;..... ton code principal pour le rendu, il va juste affiché les element visuel et les autre element comme les menu et autre qui ne sont pas la carte et qui ne sont pas la physique
;dans ton rendu, utilise l'equivalent vectoriel si tu veux vraiment ou autre si besoin
DrawAlphaImage(ImageID(MAP_ID),0,0)
;le faite d'affiché une image qui est en traitrement par un autre thread n'a pas d'effect surtout pour ton cas, on veux voir direct le resulta avec le moins de latence possible et une reactivité la plus bref possible
le code est en sois fonctionnelle mais il ne tien que a toi d'adapté et dans faire se que tu veux
tu est sur la piste que je te propose, libre a toi de faire autrement ou de trouvé autre chose,
profite car j'ai entendu dire que des personne français voulais privatisé les ligne de code et la programmation dans le monde avec un amendement sur le systeme d'heure dété et hiver et des 2 joure ferier qui saut, c'est faux en faite, mais sa pourrai le devenir, faut pas le dire a qui que se sois XD
amuse toi bien sinon
