Page 3 sur 4
Re: Le mystère insondable des FONTES
Publié : lun. 01/juin/2020 14:09
par drfloyd
Ar-S a écrit :@zorro => 4 => vas te faire cuire le c....code
Blague à part, je rejoints Zorro pour le coup des résolutions. Franchement 640x480 oublie. J'aime bien les jeux oldschool mais sur mon écran en QHD (2560 × 1440) je vais pleurer du sang.
Pour un jeu sans animation, scrolling etc, le canvas peut être intéressant.
Sinon Openscreen parait un peu logique..
En tout cas je viens de découvrir que le soucis de lag des souris à haut dpi disparait UNIQUEMENT avec le flag #PB_Screen_NoSynchronization
Autant que tu le saches drfloyd, si tu as une souris gamer avec dpi réglables, tu aurais des saccades en openscreen.
Et ben mes cadets, là c'est là fêtes. Des années que ce soucis me cassait les noix et me rebutait pour faire du jeu fullscreen.
merci pour ce TIP !
Re: Le mystère insondable des FONTES
Publié : lun. 01/juin/2020 16:32
par vurvur
Encore une autre piste qui pourrait t'intéresser si tu veux simuler de la basse résolution et du pixellisé sur les écrans modernes: le rescaling
Comme dans ce remake d'un vieux Mario:
https://www.purebasic.fr/french/viewtop ... =2&t=17979
La routine de rescaling:
Code : Tout sélectionner
offscreen = GrabSprite(#PB_Any,8,0,128,128)
ClearScreen(0)
factor.d = 128 / dh ;; note: dh = DesktopHeight(0)
size.l = 128/factor
ZoomSprite(offscreen,size,size)
DisplayTransparentSprite(offscreen,(dw/2) - (size/2),(dh/2) - (size/2))
ZoomSprite(offscreen,#PB_Default,#PB_Default)
FlipBuffers()
En gros l'
écran entier du jeu est un petit sprite 128x128, que tu agrandis ensuite aux dimensions de l'écran.
Pas mal de remakes de jeux retros sur PC utilisent cette approche (par exemple, Cave Story)
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 10:41
par drfloyd
ah, c'est p'etre ca qu'il me faut !
J'ai pas encore bien compris,
Ok l'ecran est un sprite zoomé de 128x128 (quelque soit la définition du bureau)...
tu balances tes drawimage et plot/line à quel moment ?
Je vais essayer d'etudier le code du Mario qui semble dispo
Merci
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 14:12
par case
tu peux dessiner sur un sprite en utilisant
startdrawing(spriteoutput(#sprite))
; -- ici tu dessine tout ce qu'il y a a afficher
stopdrawing()
ou #sprite correspond bien sur a un sprite existant servant "d'écran" pour les operations 2D.
a noter que cela t’empêche d'utiliser des sprites car tu ne peux pas afficher de sprite dans un sprite
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 14:20
par Zorro
case a écrit :a noter que cela t’empêche d'utiliser des sprites car tu ne peux pas afficher de sprite dans un sprite
et il me semble qu'on pouvais le faire dans le temps .... non ?
ps pour moi la 3.81 etait la meilleurs version de Purebasic
retrouvé !! c'ets bien dans la version 3.81 qu'on pouvais dessiner un sprite dans un sprite !!
grace a UseBuffer()
UseBuffer(#Sprite)
Description
Change la surface de rendu par defaut (l'ecran) par le #Sprite. Ainsi, toutes les commandes du type DisplaySprite(), DisplayTransparentSprite() etc.. seront appliquées sur le #Sprite. Pour revenir en mode normal (surface écran), il suffit de passer la valeur '-1' comme #Sprite.
je suis pas sur que Purebasic evolue .... dans le bon sens

Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 14:45
par falsam
UseBuffer() fonctionnait uniquement avec DirectX7
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 15:24
par vurvur
drfloyd a écrit :ah, c'est p'etre ca qu'il me faut !
J'ai pas encore bien compris,
Ok l'ecran est un sprite zoomé de 128x128 (quelque soit la définition du bureau)...
tu balances tes drawimage et plot/line à quel moment ?
Je vais essayer d'etudier le code du Mario qui semble dispo
Merci
Tu balances simplement tout juste avant le rescaling:
[EDIT] code actualisé dans post plus bas
Et je préfère aussi toujours utiliser OpenWindowedScreen plutot que OpenScreen.
A mon sens c'est la solution la plus simple et qui évite les soucis liés aux changements de résolution.
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 16:03
par drfloyd
Bon, en 320x200 j'ai reussi un truc. Ca donne une image nickel sans alliasing (les pixels paraissent du coup ENORMES)
Sauf que, cette solution fait ramer terriblement le jeu (je le sens dans le défilement de la route... bordel ca prend cher !)
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 16:24
par vurvur
drfloyd a écrit :Bon, en 320x200 j'ai reussi un truc. Ca donne une image nickel sans alliasing (les pixels paraissent du coup ENORMES)
Sauf que, cette solution fait ramer terriblement le jeu (je le sens dans le défilement de la route... bordel ca prend cher !)
Tu peux poster un code (simplifié si possible) qui présente le problème?
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 18:00
par drfloyd
bah j'ai pas de probleme, j'ai juste integré ton bout de code, adapté au 320x200
Ca ne devrait pas faire ramer le jeu ?
Re: Le mystère insondable des FONTES
Publié : mer. 03/juin/2020 21:40
par vurvur
Tu veux dire quoi exactement? Affichage saccadé ? Baisse de FPS ? Les commandes ne répondent plus? Tout ça à la fois?
A priori non, ça ne doit pas "ramer"...
Pour être plus précis, tu peux voir dans le task manager le % d'utilisation du CPU avec mon code, et sans?
Dernière chose, assure-toi de mettre un ClearScreen(0) en début de boucle aussi (je l'avais oublié dans mon exemple - corrigé maintenant)
Re: Le mystère insondable des FONTES
Publié : jeu. 04/juin/2020 8:12
par vurvur
Nouvelle version du code exemple (avec animation, FPS élevé, CPU bas, quelques bugs corrigés):
Code : Tout sélectionner
InitSprite() : InitKeyboard() : InitMouse() : InitSound() : ExamineDesktops()
GameWidth = 320
GameHeight = 200
dw = DesktopWidth(0)
dh = DesktopHeight(0)
deltatime.d = 0
OpenWindowedScreen(OpenWindow(0,0,0,dw,dh,"RESCALING 101", #PB_Window_Maximize | #PB_Window_BorderLess),0,0,dw,dh,1,0,0)
CreateSprite(1,8,8)
StartDrawing(SpriteOutput(1))
DrawingMode( #PB_2DDrawing_Outlined)
box(0,0,8,8, #WHITE)
StopDrawing()
While #True
ClearScreen(0) ;;; tu balances tout ici
for a = 1 to 200
DisplaySprite(1,random(40)*8,random(25)*8)
next
;;; rescaling start
offscreen = GrabSprite(#PB_Any,0,0,GameWidth,GameHeight)
ClearScreen(0)
factor.d = GameHeight / dh
sizeH.l = GameHeight / factor
sizeW.l = GameWidth / factor
ZoomSprite(offscreen,sizeW,sizeH)
DisplayTransparentSprite(offscreen,(dw/2) - (sizeW/2),(dh/2) - (sizeH/2))
FreeSprite(offscreen)
;;; rescaling end
FlipBuffers()
e = WindowEvent() : delay(16) ;;; delay important!
ExamineKeyboard(): if KeyboardReleased(#PB_Key_Escape) : end : endif
Wend
Re: Le mystère insondable des FONTES
Publié : jeu. 04/juin/2020 9:15
par Ar-S
Ce code utilise 13 puis 25% du GPU alors que j'ai une GTX 1080.. Pour du 320x200 upscale je ne vois pas trop la performance.
Re: Le mystère insondable des FONTES
Publié : jeu. 04/juin/2020 9:39
par vurvur
Ar-S a écrit :Ce code utilise 13 puis 25% du GPU alors que j'ai une GTX 1080.. Pour du 320x200 upscale je ne vois pas trop la performance.
En CPU je suis plus bas que ça. Je parle du processeur graphique. Affiche le GPU dans ton task manager.
Re: Le mystère insondable des FONTES
Publié : jeu. 04/juin/2020 10:11
par falsam
Windows 10 - Intel I7-7700 HQ (2.80 Ghz) - Graphique GF GTX 1050
J'ai crée l'exécutable. Utilisation CPU 2.3% - GPU 13%