Page 1 sur 1

FlipBuffer qui fait clignoter [Résolu]

Publié : ven. 12/nov./2010 19:27
par SPH
Salut,

je desespere de PB.

Le flipbuffer permet d'echanger les ecrans sans que les sprites clignotent. Mais je voulais faire des scenes animé a la another world avec des polygons et la, ca clignote !!!!
Il me semble qu'il existait avant des options dans flipbuffer mais plus maintenant.

Dois je saborder mon ordi (et par la meme occasion PB) ??? :|

Creez quelques polygons de quelques cotés et vous verrez comment ca clignote en haut !!!!

EDIT : corrigé

Souris pour creer des polygons
ENTRER pour enregistrer le polygon courant

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Another earth
; SPH(2010)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

InitSprite() 
InitKeyboard() 
InitMouse()

#dw=1024
#dh=768
#dc=32

If OpenScreen(#dw,#dh,#dc,"Another Earth")=0
MessageRequester("Erreur", "Screen Open ("+Str(#dw)+","+Str(#dh)+",32) : impossible à ouvrir", 0) : End
EndIf

nb=256
key=1
mode=2

Dim bank.w(9000000)
nb_total_polygon=0
ici_bank=0
bank(ici_bank)=nb_total_polygon : ici_bank+1


Dim ps.Point(nb-1) ; Array of 5 POINT structures
Dim ps2.Point(nb-1) ; Array of 5 POINT structures
; For p=0 To nb-1
;   ps(p)\x=Random(1024)
;   ps(p)\y=Random(768)
; Next p
cmb=0

CreateSprite(0,#dw,#dh)
color=RGB(255,255,255)

Repeat
  
  DisplaySprite(0,0,0)

;;;;; tracage
ExamineMouse() 
mx=MouseX()
my=MouseY()
Mb_Right=MouseButton(#PB_MouseButton_Right)
Mb_Left=MouseButton(#PB_MouseButton_Left)

If Mb_left
   ps(cmb)\x=mx
   ps(cmb)\y=my
   cmb+1
   If cmb>245
     Beep_(800,50)
   EndIf
  Repeat
  ExamineMouse() 
  Mb_Left=MouseButton(#PB_MouseButton_Left)
  Until Mb_Left=0
EndIf

If Mb_Right
  cmb-1
  If cmb<0
    cmb=0
  EndIf
  Repeat
  ExamineMouse() 
  Mb_Right=MouseButton(#PB_MouseButton_Right)
  Until Mb_Right=0
EndIf



ExamineKeyboard() 

If KeyboardPushed(#PB_Key_Space)
  mode+1
  mode%3
ExamineKeyboard() 
While KeyboardPushed(#PB_Key_Space)
ExamineKeyboard() 
Wend
EndIf


If mode=2
;   For i=0 To ici_bank+4
;     Debug bank(i)
;   Next
;   End
  la=1  
For i=1 To bank(0)
  u=bank(la)
  ; Dim ps2.Point(nb-1) ; Array of 5 POINT structures
  la+1
  If bank(la)<>-1
    Debug "bank<>-1":End
  EndIf
  la+1
  rvb=RGB(bank(la),bank(la+1),bank(la+2))
  la+3
  For p=0 To u
   ps2(p)\x=bank(la):la+1
   ps2(p)\y=bank(la):la+1
 Next p
hDC=StartDrawing(ScreenOutput())
Box(0,0,0,0,rvb) ; Would be nice to have a Cls() facility !!!
SetWindowOrgEx_(hDC,00,00,#Null) ; Move origin downwards
Polygon_(hDC,@ps2(0),u+1)
StopDrawing() 
Next
EndIf



If KeyboardPushed(#PB_Key_Return) Or KeyboardPushed(#PB_Key_PadEnter)
  bank(ici_bank) =cmb-1 : ici_bank+1
  bank(ici_bank) =-1 : ici_bank+1
  bank(ici_bank) =Red(color) : ici_bank+1
  bank(ici_bank) =Green(color) : ici_bank+1
  bank(ici_bank) =Blue(color) : ici_bank+1
  For i=0 To cmb-1
    bank(ici_bank) = ps(i)\x : ici_bank+1
    bank(ici_bank) = ps(i)\y : ici_bank+1
  Next
  bank(0)+1
  
;DisplaySprite(0,0,0)

hDC=StartDrawing(ScreenOutput())
Box(0,0,0,0,color) ; Would be nice to have a Cls() facility !!!
SetWindowOrgEx_(hDC,00,00,#Null) ; Move origin downwards
Polygon_(hDC,@ps(0),cmb)
StopDrawing() 
;GrabSprite(0,0,0,#dw,#dh)
cmb=0
;Delay(500)
ExamineKeyboard() 
While KeyboardPushed(#PB_Key_Return) Or KeyboardPushed(#PB_Key_PadEnter)
ExamineKeyboard() 
Wend
key+1
EndIf

;ClearScreen(0)
;temps = ElapsedMilliseconds()

; Define drawing area
hDC=StartDrawing(ScreenOutput())
Box(0,0,0,0,color) ; Would be nice to have a Cls() facility !!!
If mode>0
SetWindowOrgEx_(hDC,00,00,#Null) ; Move origin downwards
Polygon_(hDC,@ps(0),cmb)
EndIf
LineXY(mx,0,mx,#dh,RGB(255,0,0))
LineXY(0,my,#dw,my,RGB(255,0,0))
Plot(mx,my,RGB(0,255,0))
StopDrawing() 
;temps = ElapsedMilliseconds()-temps
;Debug temps
;End
LoadFont(1, "Arial", 8) 
StartDrawing(ScreenOutput()) 
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(1)) 
DrawText(0,0," Polyg. : "+Str(key)+" - Point : "+Str(cmb)+" ", RGB(255,255,255))
DrawText(0,15," Mode : "+Str(mode)+" ", RGB(255,255,255))
StopDrawing() 



FlipBuffers() 
;Delay(4)

ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
;;;;;;;;;;;;;;;

Re: FlipBuffer qui fait clignoter

Publié : ven. 12/nov./2010 20:02
par djes
Pas de souci ici. Beaucoup de cartes graphiques récentes sont très lentes en 2D, peut-être que ça vient de là...

Re: FlipBuffer qui fait clignoter

Publié : ven. 12/nov./2010 21:30
par Backup
j'ai voulu tester et des le depart j'ai du faire ces modifications GRRRR !

Code : Tout sélectionner

;************ ça , ça commence a etre lourding ,!!! **************
; il existe des fonction bordel , utilisez les !! 
; dw=1024
; dh=768
; dc=32
; remarque peut etre excessive, mais franchement , je preche dans le vide ;o)
; *********************************************************

ExamineDesktops()
dw=DesktopWidth(0)
dh=DesktopHeight(0)
dc=DesktopDepth(0)

bon quoiqu'il en soit aucun problemes sur mon petit NC10
avec sa petite résolution de 1024 X 600 ;) :lol:

Re: FlipBuffer qui fait clignoter

Publié : ven. 12/nov./2010 22:06
par SPH
Dobro a écrit :j'ai voulu tester et des le depart j'ai du faire ces modifications GRRRR !

Code : Tout sélectionner

;************ ça , ça commence a etre lourding ,!!! **************
; il existe des fonction bordel , utilisez les !! 
; dw=1024
; dh=768
; dc=32
; remarque peut etre execive, mais franchement , je preche dans le vide ;o)
; *********************************************************

ExamineDesktops()
dw=DesktopWidth(0)
dh=DesktopHeight(0)
dc=DesktopDepth(0)

bon quoiqu'il en soit aucun problemes sur mon petit NC10
avec sa petite résolution de 1024 X 600 ;) :lol:
Ce sera en 1024*768
quand je dessine un polygonen haut, il syntille vite

Re: FlipBuffer qui fait clignoter

Publié : ven. 12/nov./2010 22:26
par Backup
SPH a écrit : Ce sera en 1024*768
oui , mais ce que tu ne comprends pas c'est
que sur les Netbooks , la résolution 1024X768 refusera de marcher !!
ton ecran ne s'ouvre pas, et affiche une erreur dans le debugger
et un gros plantage sans debugger !!

apres tu fais comme tu veux ,
mais les Netbook représentent un groupe d'utilisateur non négligeable

les fonctions Desktops() servent a connaitre la résolution utilisé par l'utilisateur
ou alors utilise un code pour lister les résolutions possible :)
pour forcer la résolution la plus adapté

Re: FlipBuffer qui fait clignoter

Publié : ven. 12/nov./2010 23:15
par Huitbit
Salut l'artiste 3D,

Aucun problème alors que ma carte graphique est en carton (ati radeon xpress200) :lol:

Bonne continuation

Re: FlipBuffer qui fait clignoter

Publié : ven. 12/nov./2010 23:20
par case
heuuu sisi il y a un problème


essayez de créer beaucoup de polygones enfin quand je dis beaucoup ...

(appuyez sur entré pour en dessiner un nouveau)

les mouvements de la souris deviennent saccadés très rapidement.

Re: FlipBuffer qui fait clignoter

Publié : sam. 13/nov./2010 2:37
par Huitbit
Effectivement, tout va bien jusqu'au moment où... on appuie sur [Entrée]. :?

Bizarre !

Hasta la vista !

P.S :
Ca ne règle rien (et je vais peut-être dire une bêtise car j'ai juste survolé le code :roll: ) mais...
... il y a beaucoup d' ExamineKeyboard() non ? (si on ne laisse que le premier, ça marche quand même).
Idem pour ExamineMouse(), il y en a beaucoup!

Re: FlipBuffer qui fait clignoter

Publié : sam. 13/nov./2010 9:39
par SPH
Effectivement il y a un truc bizzare : le polygon en cours ne clignote pas alors que ceux deja dessiné, si.
Je vais faire le moteur de rendu a part et tester...

EDIT : que je suis bete !!! Ca y est, c'est corrigé !! Je ne mettais pas mon sprite representant l'image d'un dessin animé au debut !! Maintenant, ca maaaarche !!!!! Excusez moi d'avoir pesté contre PB (pardon fred)

Re: FlipBuffer qui fait clignoter [Résolu]

Publié : sam. 13/nov./2010 13:37
par Huitbit
Bon, ben...
C'est pour quand alors "Another Earth" ? :mrgreen:

Hasta la vista

PS : tu as regardé pour les "Examine" ?

Re: FlipBuffer qui fait clignoter [Résolu]

Publié : sam. 13/nov./2010 15:06
par SPH
Huitbit a écrit :Bon, ben...
C'est pour quand alors "Another Earth" ? :mrgreen:

Hasta la vista

PS : tu as regardé pour les "Examine" ?
Another earth, tu le sais peut etre mais le jeu another world finissait en disant que la suite serait another earth... :mrgreen:

Pour les "Examine", qué sa ko ?? Tu es sur que tu t'adresses a la bonne personne la ??

PS : j'ai fais le moteur de rendu, bien que ce soit un grand mot. Maintenant, il me suffit de dessiner une scene mais je manque de support (j'ai bien matté dans les dessins animés mais je ne trouve guere de trucs a faire)

Re: FlipBuffer qui fait clignoter [Résolu]

Publié : sam. 13/nov./2010 17:44
par Huitbit
SPH a écrit : Pour les "Examine", qué sa ko ?? Tu es sur que tu t'adresses a la bonne personne la ??

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Another earth
; SPH(2010)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

InitSprite() 
InitKeyboard() 
InitMouse()

..........

ExamineMouse() 
.......................

  ExamineMouse() 
................;
  ExamineMouse() 
...........


ExamineKeyboard() 

If KeyboardPushed(#PB_Key_Space)

ExamineKeyboard() 
While KeyboardPushed(#PB_Key_Space)
ExamineKeyboard() 
......

ExamineKeyboard() 
While KeyboardPushed(#PB_Key_Return) Or KeyboardPushed(#PB_Key_PadEnter)
ExamineKeyboard() 
.......

FlipBuffers() 


ExamineKeyboard()

End
;;;;;;;;;;;;;;;

C'est bien toi qui a écrit ça :mrgreen:

:lol: :lol: :lol:

Je ne remets pas en question ton code, je signale juste que c'est la première fois que je vois autant d'ExamineKeyboard().

Hasta la vista !

Re: FlipBuffer qui fait clignoter [Résolu]

Publié : sam. 13/nov./2010 18:45
par SPH
C'est la facon que j'ai trouvé pour eviter que la touche pressée soit comptabilisé plusieurs fois.

Re: FlipBuffer qui fait clignoter

Publié : sam. 13/nov./2010 19:18
par SPH
Dobro a écrit :j'ai voulu tester et des le depart j'ai du faire ces modifications GRRRR !

;************ ça , ça commence a etre lourding ,!!! **************
; il existe des fonction bordel , utilisez les !!
; dw=1024
; dh=768
; dc=32
; remarque peut etre excessive, mais franchement , je preche dans le vide ;o)
; *********************************************************
Tu ne preches pas dans le vide.
MAIS comme ca va parler de polygons de taille non changeable, il fait bien que je definisse a l'avance un et un seul format d'ecran; et le plus universel possible. D'ou mon 1024*768 (tout le monde a cette resolution)

Re: FlipBuffer qui fait clignoter

Publié : sam. 13/nov./2010 20:38
par Backup
SPH a écrit : D'ou mon 1024*768 (tout le monde a cette resolution)
je comprends, ta démarche
et non tout le monde ne l'a pas.. 90% des netbook ont

640x400
800x600
1024x600 !!

c'est tout ;)

remarque que il n'y as que la hauteur qui change

peut etre une petite formule magique pour centrer par rapport a cette valeur qui peut etre
768 ou 600


comme ceci par exemple
cette procédure renvoi la bonne coordonnée,
suivant si la résolution verticale est de 768 ou 600



Declare.l calcul_y(y)

y=768
Debug "la resolution : " + str (y)
Debug "pour un netbook : " + str (calcul_y(y)) ; renverra 600



y=10
Debug "la resolution : " + str (y)
Debug "pour un netbook : " + str (calcul_y(y)) ; renvoi 8 pour mon netbook : o)




Procedure.l calcul_y(y)
         ; by Dobro
         ; renvoie une valeur correcte pour une resolution de 600 en y
        
         examinedesktops ()
        y_res= desktopheight (0)
         Select y_res
                 Case 600 ; pour la resolution des netbook
                         ProcedureReturn y/1.28
                 Case 768 ; pour ceux qui ont cette res comme d'hab
                         ProcedureReturn y
         EndSelect
        
EndProcedure


tu peux compléter cette procédure pour toute les résolutions existantes !

comme ça tu sera juste sur tout les écrans !!

toi tu continu de programmer en 1024X768
et tu utilise cette procédure pour que ton dessin s'adapte au moniteurs et résolutions
que les gens ont choisis

le principe c'est de trouver le bon rapport
le fameux "1.28"
c'est simplement 768 / 600< ma résolution vertical

mais tu peux faire pareil pour les X et ainsi couvrir toute les résolutions :)

tu divise ton 1024 par les résolutions X que tu veux
pareil avec les Y

et tu applique comme je l'ai fait dans cette procédure

de cette façon , toi tu continu de coder en 1024X768
mais un mec qui aurai une autre résolution, ben ton dessin
s'afficherait aux bonnes coordonnées proportionnels :)

et comme on ne touche pas au 1024x768, ben ça va coller :)