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?

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

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

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

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?

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.

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.

tiens ça me fais penser a une connerie que j'avais pondu
tu veux donner du poids a tes sprites ??
regarde comment on fait :
; 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)

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 !!
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é !!
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()
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

(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

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)
