Displaytranslucidesprite

Programmation avancée de jeux en PureBasic
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Displaytranslucidesprite

Message par garzul »

:D 8O 8O Rahhhh je met sa dans mon code mais apparemment sa me ralentie ma ligne qui tourne je voudrais savoir i quelq'un a un moyen d'y remedier si oui comment ? J'ai oublier le code ^^ tenez ?

Code : Tout sélectionner


;Procedure du dessin
  Procedure Ligne(x.f,y.f,anx.f,any.f)


    Protected x1.f,y2.f,s1.f,d1.f

      Coord\x = x1  + x * Sin(any)
      Coord\y = y2  - x * Cos(any)
      
      ; * Cos(anx)
  EndProcedure


;initialisation des cmposant
    If InitSprite() = 0 Or InitKeyboard() = 0
      End
    EndIf
;création screen
OpenScreen(1024,768,32,"Démos")


AngleX.f = 0
AngleY.f = 0
AngleZ.f = 0

  FontID = LoadFont(0, "tahoma", 8, #PB_Font_HighQuality)

SetFrameRate(60) 

;Création des fichier . pak
;- .PAK
CreatePack("Demos.pak")
AddPackFile("Texte1.bmp",9) 
ClosePack()
OpenPack("Demos.pak")
CatchSprite(1,NextPackFile())
ClosePack()


;Texte
Procedure Texte()
DisplayTranslucideSprite(1, 250, 250, 255)
intense + 1
If intense = 255
inse - 1
EndIf
EndProcedure

;BOUCLE
Repeat

  ClearScreen(0, 0, 0);A enlever sa fait un jolie effet :)

  AngleX + 0.01
  AngleY + 0.09
  AngleZ + 0.09
  
  StartDrawing(ScreenOutput())
    DrawingFont(FontID)
      
      ;Tracer de la ligne 1
      Ligne(200,0,angleX,AngleY)
        Line(250,250,coord\x,coord\y,RGB($F7,$EF,$08))
        
          ;Plot( 250 + coord\x,250 + coord\y,RGB($1B,$3E,$E4)) ;Normalement le point qui devrait faire un cercle
          ;tracer de la ligne 2
         Ligne(0,200,angleX,AngleY)
        Line(250,250,coord\x,coord\y,RGB($28,$18,$D7))       
 
  StopDrawing()

texte()
  FlipBuffers()

  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Pour que sa marche créé une image .
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Code : Tout sélectionner

 Coord\x = x1  + x * Sin(any)
      Coord\y = y2  - x * Cos(any) 


ALERTE !!!
this variable doesn't have a 'structure'

met ton code en entier ça ira mieu pour t'aider !! :? :)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D DSL dobrro Tien regarde j'ai fait sa mais ya toujour un probléme au niveau de la ligne qui tourne .

Code : Tout sélectionner

;Coder par garzul le 20 aout a 4 heure 31
;Variable de la démos 
jeuxtime = 300
affichagetexte1 = 0
affichagetexte2 = 1
affichagescene1 = 1
;Structure
Structure Ligne
  x.f
  y.f
EndStructure

 Global coord.Ligne,intense,affichagetexte2,affichagetexte1


;Procedure du dessin
  Procedure Ligne(x.f,y.f,anx.f,any.f)


    Protected x1.f,y2.f,s1.f,d1.f

      Coord\x = x1  + x * Sin(any)
      Coord\y = y2  - x * Cos(any)
      
      ; * Cos(anx)
  EndProcedure


;initialisation des cmposant
    If InitSprite() = 0 Or InitKeyboard() = 0
      End
    EndIf
;création screen
OpenScreen(1024,768,32,"Démos")


AngleX.f = 0
AngleY.f = 0
AngleZ.f = 0

  FontID = LoadFont(0, "tahoma", 8, #PB_Font_HighQuality)

SetFrameRate(60) 

;Création des fichier . pak
;- .PAK
CreatePack("Demos.pak")
AddPackFile("Texte1.bmp",9) 
AddPackFile("Texte2.bmp",9) 
ClosePack()
OpenPack("Demos.pak")
CatchSprite(1,NextPackFile())
CatchSprite(2,NextPackFile())
ClosePack()


;Texte

Procedure Texte()
If affichagetexte1 = 0
affich1 = DisplayTranslucideSprite(1,360 , 360, intense)
EndIf
  If affichagetexte2 = 0
    affich = DisplayTranslucideSprite(2,360 , 360, intense)
  EndIf
EndProcedure


;BOUCLE
intense = 0
Repeat

  ClearScreen(0, 0, 0);A enlever sa fait un jolie effet :)
  
  ;Effet de l'intensite 
 
intense + 20
 
  If intense = 260
  EndIf

;Effet de disparition et d'affichage des texte
jeuxtime = jeuxtime - 10

  If jeuxtime < 0 
    intense - 40
    affichagetexte2 = 0
    affichagetexte1 = 1
  EndIf

  If affichagetexte2 = 0 And intense = 0
    affichagetexte2 = 1
    affichagetexte1 = 1
  EndIf

; fin de l'effet
  ;   passage a la scene 1
If affichagetexte2 = 1 And affichagetexte1 = 1
affichagescene1 = 0
EndIf

    AngleX + 0.01
    AngleY + 0.09
    AngleZ + 0.09
  
  
  If affichagescene1 = 0
  StartDrawing(ScreenOutput())
    DrawingFont(FontID)
      
      ;Tracer de la ligne 1
      Ligne(200,0,angleX,AngleY)
        Line(250,250,coord\x,coord\y,RGB($F7,$EF,$08))
        
          ;Plot( 250 + coord\x,250 + coord\y,RGB($1B,$3E,$E4)) ;Normalement le point qui devrait faire un cercle
          ;tracer de la ligne 2
         Ligne(0,200,angleX,AngleY)
        Line(250,250,coord\x,coord\y,RGB($28,$18,$D7))       
 
  StopDrawing()
  EndIf 

texte()
  FlipBuffers()

  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je peut pas t'aider je sais pas ce que tu fait avec ça

Code : Tout sélectionner

; CreatePack("Demos.pak")
; AddPackFile("Texte1.bmp",9)
; AddPackFile("Texte2.bmp",9)
; ClosePack()
; OpenPack("Demos.pak")
; CatchSprite(1,NextPackFile())
; CatchSprite(2,NextPackFile())
; ClosePack()
si j'active ça j'ai une erreur ligne 52 !!
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D C'est normal dobro tien je t'ai mis la source et les deux image tu les decompresse et zous tu me degage la poussiere qui fait planter lol :D non tien je t'ai mis la source et les deux image c'est pour sa que sa plantais :) http://consolpcgame.ifrance.com/consolp ... bro%20.rar
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon ok !!

et tu veux quoi exactement ? :)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D Bah que la ligne ne rame plus quelle sit aussi fluide qu'avant (je suis pas chiant non :D ) héhé
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D Mechant dobro tien prend sa lol Image et sa Image oula je vais me faire engueuler Image Lol je rigole n'empeche c'est marrant ce site ou ya plein de smyley ACCLAMEZ MOI Image LOL :D si vous en voulez d'autre allez sur ce site http://membres.lycos.fr/bluesmilies/ Bon alors pour mon code c'est simple je ne veut plus que sa rame au niveau de la ligne tout en laissant le displaytranslucidesprite mais a mon avis c'est impossible en tout cas si vous avez une idéés aidez moi ^^ Image @++ Image :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

il semblerai qu'il exiqte un bug avec la fonction

Code : Tout sélectionner

StartSpecialFX() 
        affich = DisplayTranslucideSprite(2,360 , 360, intense) 
        StopSpecialFX() 

qui ne serai pas du a toi mais a Purebasic !!

en principe StartSpecialFX() est sensé accelerer l'affichage de
DisplayTranslucideSprite

or ça fige tout !!! tres curieux !! 8O

dans le code de garzul
il affiche une ligne niquel tant que l'on utilise pas DisplayTranslucideSprite
si l'on utilise DisplayTranslucideSprite
l'affichage d'une simple ligne ralentit mortel !!

je pense a un gros bug du pure !!
j'aimerai bien avoir l'avis des pros la dessus !! 8O
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Garzul essai avec les sprite 3D :D


l'equivalent de DisplayTranslucideSprite(#Sprite, x, y, Intensité)


c'est DisplaySprite3D(#Sprite3D, x, y, Transparence)
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D Dobro je sais j'ai essayer en c++ et sa fait pareil ? Bizare et comment je peux faire pour le mettre en sprite 3d ?
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D excuse dobro l'ecran avait effacer un peu ton message mais bon regarde en c++ sa fait pareil bizarre j'ai essayer de creer une image qui rebondi en c++ avec de la transarence et sa fait pareil sa doit etres soit l'opengl mais c'est pas pure basic ? :?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tien j'ai passé ton code en version sprite 3D

Code : Tout sélectionner

;Coder par garzul le 20 aout a 4 heure 31 
;Variable de la démos 
jeuxtime = 300 
affichagetexte1 = 0 
affichagetexte2 = 1 
affichagescene1 = 1 
;Structure 
Structure Ligne 
  x.f 
  y.f 
EndStructure 

 Global coord.Ligne,intense,affichagetexte2,affichagetexte1 


;Procedure du dessin 
  Procedure Ligne(x.f,y.f,anx.f,any.f) 


    Protected x1.f,y2.f,s1.f,d1.f 
    
    coord\x = x1  + x * Sin(any*2*3.1415926/50) 
    coord\y = y2  - x * Cos(any*2*3.1415926/50)
    
    
    ; par Dobro
; effet lazer
;     coord\x = x1  + x * Sin(any*2*3.1415926/50) 
;     coord\y = y2  - x * Cos(any) 
; effet roue qui tourne
;     coord\x = x1  + x * Sin(any*2*3.1415926/3.12) 
;     coord\y = y2  - x * Cos(any*2*3.1415926/3.12) 
      
      ; * Cos(anx) 
  EndProcedure 


;initialisation des cmposant 
If InitSprite() = 0 Or InitKeyboard() = 0  Or InitSprite3D() =0
    
      End 
    EndIf 
;création screen 
OpenScreen(1024,768,32,"Démos") 


AngleX.f = 0 
AngleY.f = 0 
AngleZ.f = 0 

  FontID = LoadFont(0, "tahoma", 8, #PB_Font_HighQuality) 

SetFrameRate(60) 

;Création des fichier . pak 
; ;- .PAK 
; CreatePack("Demos.pak") 
; AddPackFile("Texte1.bmp",9) 
; AddPackFile("Texte2.bmp",9) 
; ClosePack() 
; OpenPack("Demos.pak") 
; CatchSprite(1,NextPackFile()) 
; CatchSprite(2,NextPackFile()) 
; ClosePack() 

LoadSprite(1, "Texte1.bmp" ) 
LoadSprite(2, "Texte2.bmp" ) 

Resultat = LoadSprite(1, "Texte1.bmp" , #PB_Sprite_Texture) 
Resultat = LoadSprite(2, "Texte2.bmp" ,#PB_Sprite_Texture) 
Resultat = CreateSprite3D(1, 1)
Resultat = CreateSprite3D(2, 2)
;Texte 

Procedure Texte() 
    If affichagetexte1 = 0   
        Resultat = Start3D() 
        DisplaySprite3D(1, 360, 360, intense)
        Stop3D() 
    EndIf 
    If affichagetexte2 = 0   
        Resultat = Start3D() 
        DisplaySprite3D(2, 360, 360, intense) 
        Stop3D() 
    EndIf 
EndProcedure 


;BOUCLE 
intense = 0 
Repeat 

  ClearScreen(0, 0, 0);A enlever sa fait un jolie effet :) 
  
  ;Effet de l'intensite 
  
intense + 20 
  
  If intense = 260 
  EndIf 

;Effet de disparition et d'affichage des texte 
jeuxtime = jeuxtime - 10 

  If jeuxtime < 0 
    intense - 40 
    affichagetexte2 = 0 
    affichagetexte1 = 1 
  EndIf 

  If affichagetexte2 = 0 And intense = 0 
    affichagetexte2 = 1 
    affichagetexte1 = 1 
  EndIf 

; fin de l'effet 
  ;   passage a la scene 1 
If affichagetexte2 = 1 And affichagetexte1 = 1 
affichagescene1 = 0 
EndIf 

    AngleX + 1
    AngleY + 1
    AngleZ + 1 
    
;     AngleX + 10
;     AngleY + 10
;     AngleZ + 2 
    
    
  If affichagescene1 = 0 
  StartDrawing(ScreenOutput()) 
    DrawingFont(FontID) 
      
      ;Tracer de la ligne 1 
      Ligne(200,0,AngleX,AngleY) 
        Line(250,250,coord\x,coord\y,RGB($F7,$EF,$08)) 
        
          ;Plot( 250 + coord\x,250 + coord\y,RGB($1B,$3E,$E4)) ;Normalement le point qui devrait faire un cercle 
          ;tracer de la ligne 2 
         Ligne(0,200,AngleX,AngleY) 
        Line(250,250,coord\x,coord\y,RGB($28,$18,$D7))        
  
  StopDrawing() 
  EndIf 

  Texte() 

  FlipBuffers() 

  ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Sinon, tu peux simplement essayer de modifier le code au niveau du chargement du sprite.

Code : Tout sélectionner

OpenPack("Demos.pak") 
CatchSprite(1,NextPackFile(),#PB_Sprite_Memory) 
CatchSprite(2,NextPackFile(), #PB_Sprite_Memory) 
ClosePack()
Tu ajoutes #PB_Sprite_Memory pour charger les sprites en mémoire PC au lieu de la mémoire vidéo. Chez moi, ça fonctionne.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

aaarrrg !! j'y ai pas pensé !!
je test !! :)





..... ouaaaa ça marche Garzul !!

ecoute le grand maitre Chris :D
Dernière modification par Backup le ven. 20/août/2004 19:44, modifié 1 fois.
Répondre