Question technique sur grabsprite()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Question technique sur grabsprite()

Message par Huitbit »

Bonjour et joyeuses Pâques !

J'ai voulu améliorer un code que j'avais fait dans un petit tutoriel pour débutants (c'est pour cela qu'il n' y a pas de structures, ...etc).

Par rapport au code de base, il y a un grabsprite, un zoom et une rotation en plus.

Je m'attendais à ce que l'UC souffre un peu.
Au final, calme plat, nada, nothing, ras...(moins de 10% en ressources CPU) ! 8O

Questions :

Grabsprite() n'a pas l'air très gourmand en ressources
Quelqu'un peut-il me le confirmer ?
Si c'est le cas, c'est une excellente nouvelle ! Moi, je l'adopte :P !

On parle peu de cette fonction, y a-t-il une alternative plus efficace ?


Image à enregistrer dans le même dossier que le code
Image

Code : Tout sélectionner

;auteur Huitbit
; test fonction grabsprite()
;PureBasic 4.30 (Windows - x86)

#largeur_fenetre=400
#hauteur_fenetre=400
#largeur_ecran=400
#hauteur_ecran=400
Enumeration
  #sprite_decor
  #sprite_lupin
  #sprite_grab
  #sprite_grab_3D
EndEnumeration

InitSprite()
InitSprite3D()
OpenWindow(0,0,0,#largeur_fenetre,#hauteur_fenetre,"JEUDI 6H59",#PB_Window_ScreenCentered|#PB_Window_SystemMenu  )
OpenWindowedScreen(WindowID(0),0,0,#largeur_ecran,#hauteur_ecran,1,0,0)

;on crée un sprite décor
CreateSprite(#sprite_decor,#largeur_ecran,#hauteur_ecran)
StartDrawing(SpriteOutput(#sprite_decor))
Box(0,0,#largeur_ecran,#hauteur_ecran*0.5,RGB(0,136,255))
For i=180 To 0 Step -20
  Box(0,#hauteur_ecran*0.5+i,#largeur_ecran,20,RGB(0,255-i,0))
Next i
StopDrawing()

;on charge le sprite lupin 
UsePNGImageDecoder()
LoadSprite(#sprite_lupin,"lupin.png",#PB_Sprite_Texture)

;-BOUCLE PRINCIPALE
Repeat
  
  ;gestion de l'affichage
  FlipBuffers()
  
  DisplaySprite(#sprite_decor,0,0)
  
  If  ElapsedMilliseconds()-date_affichage>50
    date_affichage=ElapsedMilliseconds()
    ClipSprite(#sprite_lupin,numero_image*33,0,33,59)
    numero_image=numero_image+1
    If numero_image>5
      numero_image=0
    EndIf
  EndIf 
  
  DisplaySprite(#sprite_lupin,184,141)
  
  ;-saisie de l'écran
  GrabSprite(#sprite_grab,0,0,#largeur_ecran,#hauteur_ecran,#PB_Sprite_Texture)
  CreateSprite3D(#sprite_grab_3D,#sprite_grab)
  Start3D()
  Sprite3DQuality(#PB_Sprite3D_BilinearFiltering)
  ZoomSprite3D(#sprite_grab_3D,#largeur_ecran*1.41,#hauteur_ecran*1.41)
  angle=angle+1
  If angle>360
    angle=0
  EndIf
  RotateSprite3D(#sprite_grab_3D,angle,0)
  DisplaySprite3D(#sprite_grab_3D,-#largeur_ecran*0.41*0.5,-#largeur_ecran*0.41*0.5)
  Stop3D()
  
  Repeat
    Event = WindowEvent()      
    If  Event = #PB_Event_CloseWindow
      End 
    EndIf
  Until Event = 0
  
  Delay(1)
  
ForEver
Hasta la vista !
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: Question technique sur grabsprite()

Message par beauregard »

Huitbit a écrit :Grabsprite() n'a pas l'air très gourmand en ressources
Quelqu'un peut-il me le confirmer ?
je confirme 10 % moi aussi sur mon vieux fossile numérique, joli la rotation :) , avec un écran bien plus grand que le jeu assault( 224*288 de mémoire)
une vidéo:http://www.youtube.com/watch?v=vrG9ZRrSrT8
c'est le jeu sur lequel j'ai le plus tripé de ma vie( jeu incompris, donc beaucoup de crédits et surtout tout l'écran en rotation + zoom( 1988)).
Et dans le coeur des belles...
leur yeux et leurs gambettes...
ah, edgar de la cambriole, et zut j'ai oublié les paroles du générique...
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message par Huitbit »

Surprenant !

Je n'avais jamais essayé avant car je pensais que ça demandait énormément au processeur !

En fait, j'avais essayé ce jeu :
http://www.caiman.us/scripts/fw/f3305.html
Lenteur+processeur à fond+ventilos

et ce jeu(là part contre ça bouge bien :P )
http://www.caiman.us/scripts/fw/f1950.html

J'aime pas quand une machine est en surrégime :x !
C'est comme les ampoules, il y a une tension nominale, on peut aller au-dessus mais c'est pas fait pour ça(ce n'est que mon avis bien sûr !)

Dans le code, j'ai rajouté un zoom de racine de 2 (1,4142....) pour ne pas voir le sprite 2D dans les coins. Une opération de plus, sans compter les multiplications !
Tout ça pour dire que l'idée d'optimisation ne m'a même pas frôlé le cortex :lol: .Et pourtant, ça tourne (tiens, j'ai déjà entendu ça quelque part :lol: :lol: !)

Comment faisait-on avant ?????

Hasta la vista !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Huitbit a écrit ::lol: .Et pourtant, ça tourne (tiens, j'ai déjà entendu ça quelque part :lol: :lol: !)

Hasta la vista !
blasphémateur !! :twisted:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Sympa tout ça! Le jeu de beauregard me rend un peu malade, mais il a l'air très agréable à jouer, j'aurais bien aimé le connaitre :)
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

djes a écrit :Sympa tout ça! Le jeu de beauregard me rend un peu malade, mais il a l'air très agréable à jouer, j'aurais bien aimé le connaitre :)
impossible de retrouver les réelles sensations aujourd'hui, avec nos bêtes écrans lcd et joypad. :cry:
Non, il faut la borne avec son écran vertical cathodique, donc bien lumineux + une fluidité aux petits oignons, miam, deux joyeux joysticks très ergonomique... et un niveau de difficulté bien réglé( contrairement à la plupart des jeux d'arcade).

il s'agit même du premier jeu d'action où l'on peut straffer( marcher en crabe), les concepteurs de ce jeu et de cette borne ont mis tout leur coeur, cela transparait à chaque pixel ! :D

http://www.arcadetreasure.com/newassault/pics.htm

si j'étais pas résonnable... :
http://cgi.ebay.com/ws/eBayISAPI.dll?Vi ... otohosting
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message par Huitbit »

@Dobro
:lol: :lol:

Un peu de sérieux :lol: ...il reste un mystère à éclaircir:
Comment faisait-on avant ?????
Juste par curiosité, est-ce avec DrawingBuffer(), DrawingBufferPixelFormat() et DrawingBufferPitch() que grabsprite() travaille ?

Avec ce grabsprite(), on pourrait faire un fondu d'écran en quelques lignes, donner le mal de mer au joueur, faire trembler la terre, plier l'écran, faire une loupe sur une zone de combat dans un rts...etc :P ça donne pas mal de possibilités sans aucune complication du code :P
En poussant un peu les calculs, gérer le scrolling pour un jeu de voiture "top view" !

A propos de Assault, le scrolling est un peu violent, les concepteurs auraient dû laisser(ont-ils eu le choix :roll: ) une petite marge de rotation au char avant de faire tourner le décor (comme les scrollings classiques où le décor bouge lorsqu'on se rapproche du bord de l'écran)


Hasta la vista !
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Huitbit> D'accord avec toi pour la rotation ;)
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Huitbit a écrit : A propos de Assault, le scrolling est un peu violent, les concepteurs auraient dû laisser(ont-ils eu le choix :roll: ) une petite marge de rotation au char avant de faire tourner le décor (comme les scrollings classiques où le décor bouge lorsqu'on se rapproche du bord de l'écran)
mais c'est comme un fps, comme quand tu regarde une pièce autour de toi. Dans half life, s'il fallait amener les mains de gordon freeman à gauche de l'écran, afin qu'il daigne effectuer une rotation dans le sens inverse d'une aiguille d'une montre( et inversement), le résultat de la chose serai très bizarre ! :lol:

et avec l'habitude, on aimerai que le char futuriste* soit encore plus véloce...

* qui trouverai sa place dans le manga cobra space adventure, dans l'episode arme suprême, où cobra prend les commandes de son char perso, dessiner d'une façon un peu trop traditionnelle( manque d'inspiration sur ce point précis de cet immense oeuvre).
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message par Huitbit »

Ben ouais, mais là on risque la crise d'epilepsie :lol: :lol:
En plus dans la vraie vie, on tourne les yeux avant de tourner la tête sauf quand il y a urgence !

Hasta la vista !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Hors sujet

Message par Fig »

HS: Ca vient de quel langue "straffer"? , danøis ? Et littéralement ça signifie quoi ? :idea: :?:


Maitre Capelovici si tu es parmi nous...

PS: hum et tant qu'on y est, "Dobro" c'est du bulgare ?
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: Hors sujet

Message par beauregard »

Fig a écrit :HS
Dobro est un bel instrument de musique et straffer çà vient des fps comme doom ou killzone2
Huitbit a écrit :Ben ouais, mais là on risque la crise d'epilepsie :lol: :lol:
En plus dans la vraie vie, on tourne les yeux avant de tourner la tête sauf quand il y a urgence !
le seul sentiment de malaise que j'ai eu de ma vie de gamer c'est avec UT, un fps vraiment trop rapide, et au bout d'une heure je fatigue. Pour assault, quand tu vie l'action( que tu joue), c'est une chose, alors que si tu observe simplement une vidéo de mauvaise qualité...
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Répondre