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 :mrgreen:
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 :lol:



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 :roll:

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%