Page 3 sur 6

Publié : sam. 29/sept./2007 16:25
par Backup
Mytic a écrit :Tu scannes la couleur avant l’affichage du sprite !
Comme ça le Point te renverra la couleur du Fond ?
:?
oui , bien sur !! :)

pour illustrer ce suget j'avais fait une procedure il y a pas mal de temps
regarde , je viens de la mettre en V4.10

http://www.purebasic.fr/french/viewtopi ... rcollision

Publié : sam. 29/sept./2007 16:30
par Mytic
Dobro a écrit :
Mytic a écrit :Tu scannes la couleur avant l’affichage du sprite !
Comme ça le Point te renverra la couleur du Fond ?
:?
oui , bien sur !! :)

pour illustrer ce suget j'avais fait une procedure il y a pas mal de temps
regarde , je viens de la mettre en V4.10

http://www.purebasic.fr/french/viewtopi ... rcollision
Pratique ta super_collision(), Tu devrais l’utilisé, et l’adapter avec un tableau, comme ça tu n’auras plus besoin d’utiliser le Point() :)

Publié : sam. 29/sept./2007 16:32
par Chris
Y a pas comme un bug?

Image

Publié : sam. 29/sept./2007 16:36
par Backup
Chris a écrit :Y a pas comme un bug?

Image
pas sur mon code, parcequ'avec le miens , impossible de remplir :lol:

Publié : sam. 29/sept./2007 16:38
par Mytic
Chris a écrit :Y a pas comme un bug?

Image
Pour ce cas il faut rajouter la pression !! Pas facile à intégrer.
Mais je vais essayer de trouver une solution !
:?
tu utilises le moteur N°3 ?

Publié : sam. 29/sept./2007 16:47
par Chris
Mytic a écrit :
Chris a écrit :Y a pas comme un bug?

Image
Pour ce cas il faut rajouter la pression !! Pas facile à intégrer.
Mais je vais essayer de trouver une solution !
:?
tu utilises le moteur N°3 ?
J'utilise pas de moteur. Je pédale. :)

Publié : sam. 29/sept./2007 16:48
par Mytic
Je devrai changer le liquide par des billes métalliques !
Comme ça la pression sera absorbée par le frottement.
:lol:

Publié : sam. 29/sept./2007 16:56
par Backup
Mytic a écrit :Je devrai changer le liquide par des billes métalliques !
Comme ça la pression sera absorbée par le frottement.
:lol:
tiens ça me fais penser a une connerie que j'avais pondu :lol:

tu veux donner du poids a tes sprites ?? :D

regarde comment on fait :

:lol: :lol:



; connerie codé par Dobro

#dobro =1
#Police =1
#Sprite =1
#Window =1



Structure sprite
  x.l
  Y.l
  sensx.l
  sensy.l
EndStructure
Dim sprite.sprite(1)


; ***********************************
Resultat = InitSprite ()
FontID = LoadFont ( #Police , "arial" , 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_ ( #SM_CXSCREEN ): ;=largeur de l'ecran
EcranY = GetSystemMetrics_ ( #SM_CYSCREEN ): ;=hauteur de l'ecran
   WindowID = OpenWindow ( #Window , 0, 0,320, 200, "hello" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
  Result = OpenWindowedScreen ( WindowID ( #Window ) ,0,0, 320, 200, 1, 0,0)
  
   ; creation d'un Sprite
   CreateSprite ( #Sprite , 64, 64)
   StartDrawing ( SpriteOutput ( #Sprite ) ) ; on dessine dedans
   Circle (32, 32, 32 , RGB ($FF,$FF,$0))
   StopDrawing ()
  
  
  Resultat = InitMouse ()
  sprite(1)\x=160
  sprite(1)\Y=100
  sprite(1)\sensx=2
  sprite(1)\sensy=2
  
   Repeat
     While WindowEvent () : Wend
     ExamineMouse ()
     WindowEvent ()
     Delay (2)
    
     If MouseButton (2)
       End
     EndIf
    
    sprite( #Sprite )\x=sprite( #Sprite )\x+sprite(1)\sensx
    sprite( #Sprite )\Y=sprite( #Sprite )\Y+sprite( #Sprite )\sensy
     If sprite( #Sprite )\x<0
      sprite( #Sprite )\sensx=-sprite( #Sprite )\sensx
      xwin = WindowX ( #Window )
      ywin = WindowY ( #Window )
       ResizeWindow ( #Window ,xwin-20,ywin, #PB_Ignore , #PB_Ignore )
       Beep_ (100,50)
     EndIf
     If sprite(1)\x>320-64
      sprite( #Sprite )\sensx=-sprite( #Sprite )\sensx
      xwin = WindowX ( #Window )
      ywin = WindowY ( #Window )
       ResizeWindow ( #Window ,xwin+20,ywin, #PB_Ignore , #PB_Ignore )
       Beep_ (100,50)
     EndIf
     If sprite( #Sprite )\Y>200-64
      sprite( #Sprite )\sensy=-sprite( #Sprite )\sensy
      xwin = WindowX ( #Window )
      ywin = WindowY ( #Window )
       ResizeWindow ( #Window ,xwin,ywin+20, #PB_Ignore , #PB_Ignore )
       Beep_ (80,50)
     EndIf
     If sprite( #Sprite )\Y<0
      sprite( #Sprite )\sensy=-sprite( #Sprite )\sensy
      xwin = WindowX ( #Window )
      ywin = WindowY ( #Window )
       ResizeWindow ( #Window , xwin,ywin-20, #PB_Ignore , #PB_Ignore )
       Beep_ (80,50)
     EndIf
    
     DisplaySprite ( #Sprite , sprite( #Sprite )\x, sprite( #Sprite )\Y)
    
    
     FlipBuffers (): ; affiche l'ecran
     ClearScreen ( RGB (0, 0, 0)) : ;efface l'ecran
    
   Until Event= #PB_Event_CloseWindow

Publié : sam. 29/sept./2007 17:06
par Mytic
@Dobro

Sympa le Code (je m’attendais à autre chose) :lol:

Publié : dim. 30/sept./2007 9:19
par Backup
bon vu les nombreux bug rencontre avec la procedure rapide_point()

j'ai décider de ne garder que la procedure simplifié au mode 32 bit
Ajout du mode 16 bit par mytic !:D


teste sur le listing coloré que j'avais poste ici :
http://www.purebasic.fr/french/viewtopi ... 9&start=15

rapide_point() et rapide_plot() s''appel toujours entre stardrawing() et stopdrawing())



Procedure rapide_Point(x,Y)
   Select DrawingBufferPixelFormat ()
     Case #PB_PixelFormat_16Bits : PF=2
      color = PeekW ( DrawingBuffer () + (x * PF) + DrawingBufferPitch ()* ( Y ) )
     Case #PB_PixelFormat_32Bits_RGB : PF=4
      color= PeekL ( DrawingBuffer () + (x * PF) + DrawingBufferPitch ()* ( Y ) )
     Case #PB_PixelFormat_32Bits_BGR : PF=4
      color= PeekL ( DrawingBuffer () + (x * PF) + DrawingBufferPitch ()* ( Y ) )
      Rouge= Red (color)
      Vert= Green (color)
      Bleu= Blue (color)
      color= RGB (Bleu,Vert,Rouge)
   EndSelect
   ProcedureReturn color
EndProcedure


Procedure rapide_Plot(x,Y,color)
   Select DrawingBufferPixelFormat ()
     Case #PB_PixelFormat_16Bits : PF=2
      Rouge= Red (color)
      Vert= Green (color)
      Bleu= Blue (color)
      color= RGB (Bleu,Vert,Rouge)
      color=color>>2
       PokeW ( DrawingBuffer () + (x * PF) + DrawingBufferPitch ()* ( Y ) , color )
     Case #PB_PixelFormat_32Bits_RGB : PF=4:t=0
       PokeL ( DrawingBuffer () + (x * PF) + DrawingBufferPitch ()* ( Y ) ,color )
     Case #PB_PixelFormat_32Bits_BGR : PF=4:t=1
      Rouge= Red (color)
      Vert= Green (color)
      Bleu= Blue (color)
      color= RGB (Bleu,Vert,Rouge)
       PokeL ( DrawingBuffer () + (x * PF) + DrawingBufferPitch ()* ( Y ) ,color )
   EndSelect
EndProcedure

Publié : dim. 30/sept./2007 11:06
par Backup
ok ! Merci Comtois, je viens de comprendre mon erreur !! :D

j'ai donc remis ma procedure a jour , (comme avant mais en ne gardant que le 32 bit ! :) )


@Patrick88 : ça devrai marcher maintenant , l'exemple coloré !! :D

ps ; je me suis permis de nettoyer le post, pour eviter l'embrouille lors des recherches futur )

Publié : dim. 30/sept./2007 12:05
par Mytic
@Dobro
Avec ton nouveau rapide_plot() ça marche plus chez moi ?!
Y’a plus de collision !!

:?

Publié : dim. 30/sept./2007 12:09
par Mytic
@Dobro
Essai ce rapide_Plot():

Code : Tout sélectionner

Procedure rapide_Point(x,Y)
Select DrawingBufferPixelFormat()
Case #PB_PixelFormat_8Bits : PF=1:t=0
Case #PB_PixelFormat_15Bits : PF=2:t=0
Case #PB_PixelFormat_16Bits : PF=2:t=0
Case #PB_PixelFormat_24Bits_RGB : PF=3:t=0
Case #PB_PixelFormat_24Bits_BGR : PF=3:t=1
Case #PB_PixelFormat_32Bits_RGB : PF=4:t=0
Case #PB_PixelFormat_32Bits_BGR : PF=4:t=1
EndSelect
Select PF
Case 1 :color= PeekB(DrawingBuffer() + (x * PF) +DrawingBufferPitch()* ( Y ) )
Case 2 :color= PeekW(DrawingBuffer() + (x * PF) +DrawingBufferPitch()* ( Y ) )
Case 3 :
;--------
;C’est plus délicat, il faut faire 3 peekB pour le Rouge le Vert et le Bleu,
;puis les rassemblés avec un RGB()
;--------
Case 4 :color= PeekL(DrawingBuffer() + (x * PF) +DrawingBufferPitch()* ( Y ) )
EndSelect

If t=1
Rouge=Red(color)
Vert=Green(color)
Bleu=Blue(color)
color=RGB(Bleu,Vert,Rouge)
EndIf
ProcedureReturn color
EndProcedure 

Publié : dim. 30/sept./2007 12:12
par Backup
Mytic a écrit :@Dobro
Avec ton nouveau rapide_plot() ça marche plus chez moi ?!
Y’a plus de collision !!

:?
tu veux dire rapide point() :D

oui je sais, j'ai eu une conversation avec Comtois qui m'a explique pourquoi !! :)

du coup je suis revenu a l'ancienne version, simplifié au 32 Bit :D
(je sais plus d'ailleurs si ce code etait de toi ou de Cpl-Bator ??!! ) :)
et j'ai dans la foulée remodifié mon code :D

Publié : dim. 30/sept./2007 12:12
par Mytic
Ah j’ai trouvé, ça marchait pas parce que ma carte graphique était configurer pour 16 bits (Bizarre j’utilise d’habitude que le 32) :oops: