Processus à 99%

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Processus à 99%

Message par flaith »

Bonsoir à tous,

j'ai fait un petit programme tiré d'un prg qui a été fait sous C/SDL et Blitz.
Quand je le lance il me prend 99% du process 8O, ca fait un peu beaucoup, y-a-t'il un moyen de diminuer le temps process ??

programme complet ici : http://flaith.free.fr/_div_/shadow.zip

D'avance merci :)

(NB: je commence juste à me mettre au graphisme sous Pure)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Inverse le WaitWindowEvent par un WindowEvent ou l'inverse (je sais plus) !
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Progi1984 a écrit :Inverse le WaitWindowEvent par un WindowEvent ou l'inverse (je sais plus) !
Merci mais je peux pas l'inverser j'en ai pas mis :wink:

d'ailleurs voici le code pb (MAJ du 24/03/2006 à 22:22):

Code : Tout sélectionner

; ***********************
; * Shadow of the Blitz *
; ***********************
;
; C/SDL & Blitz version : 
;         http://www.glop.org/software/sotb
;
; PureBasic version : Flaith 23/03/06
; http://flaith.free.fr

#WIDTH = 320
#HEIGHT = 200
#SPEED_FACTOR = 0.5
#TICK_INTERVAL = 20

Enumeration
	#herbe0
	#herbe1
	#herbe2
	#herbe3
	#herbe4

	#nuages0
	#nuages1
	#nuages2
	#nuages3
	#nuages4

	#barriere
	#montagnes
	#lune
EndEnumeration

Enumeration
  #Window_Main_Form
  #Sky
EndEnumeration

; **********************************************

Declare CreateSky()
Declare DrawSky()
Declare DrawPlane(surface, time, scale.f, y)
Declare TimeLeft()

;-Initialise l'environnement nécessaire au fonctionnement des sprites et pour ouvrir un écran.
InitSprite()

;-Initialise l'environnement propre à la gestion du clavier.
InitKeyboard()

;-Ouvre un nouvel écran avec les caractéristiques Largeur, Hauteur et Profondeur.
Resultat = MessageRequester("Shadow Of The Blitz","Full Screen ?",#PB_MessageRequester_YesNo)
If Resultat = 6     
  FullScreen=1
Else           
  FullScreen=0
EndIf

If Fullscreen
  OpenScreen(320,200,16,"Shadow Of The Blitz")
Else
  OpenWindow(#Window_Main_Form, 20, 50, #WIDTH, #HEIGHT, "Shadow Of The Blitz")
  OpenWindowedScreen(WindowID(#Window_Main_Form), 0, 0, #WIDTH, #HEIGHT, 0, 0, 0)
  SmartWindowRefresh(0, 1)
EndIf

;-Charge en mémoire les sprites
LoadSprite(#herbe0,"gfx/herbe0.bmp");
LoadSprite(#herbe1,"gfx/herbe1.bmp");
LoadSprite(#herbe2,"gfx/herbe2.bmp");
LoadSprite(#herbe3,"gfx/herbe3.bmp");
LoadSprite(#herbe4,"gfx/herbe4.bmp");

LoadSprite(#nuages0,"gfx/nuages0.bmp");
TransparentSpriteColor(#nuages0, RGB(255,0,255))
LoadSprite(#nuages1,"gfx/nuages1.bmp");
TransparentSpriteColor(#nuages1, RGB(255,0,255))
LoadSprite(#nuages2,"gfx/nuages2.bmp");
TransparentSpriteColor(#nuages2, RGB(255,0,255))
LoadSprite(#nuages3,"gfx/nuages3.bmp");
TransparentSpriteColor(#nuages3, RGB(255,0,255))
LoadSprite(#nuages4,"gfx/nuages4.bmp");
TransparentSpriteColor(#nuages4, RGB(255,0,255))

LoadSprite(#barriere,"gfx/barriere.bmp");
TransparentSpriteColor(#barriere, RGB(255,0,255))
LoadSprite(#montagnes,"gfx/montagnes.bmp");
TransparentSpriteColor(#montagnes, RGB(255,0,255))
LoadSprite(#lune,"gfx/lune.bmp");
TransparentSpriteColor(#lune, RGB(255,0,255))

;-Créé le fond
CreateSky()

;-boucle
exitkey = 0
iScroll = 0

Repeat
		DrawSky()
		;ClearScreen(RGB($0D, $0D, $30))

		DisplayTransparentSprite(#lune, 184, 16)

		DrawPlane( #montagnes, iScroll, 1, 97)
		DrawPlane( #herbe0, iScroll,   2, 170)
		DrawPlane( #herbe1, iScroll,   3, 172)
		DrawPlane( #herbe2, iScroll,   4, 175)
		DrawPlane( #herbe3, iScroll,   5, 182)
		DrawPlane( #herbe4, iScroll,   6, 189)
		DrawPlane( #barriere, iScroll, 7, 179)

		DrawPlane( #nuages0, iScroll,   2, 0)
		DrawPlane( #nuages1, iScroll,   1, 22)
		DrawPlane( #nuages2, iScroll, 1/2, 63)
		DrawPlane( #nuages3, iScroll, 1/3, 82)
		DrawPlane( #nuages4, iScroll, 1/4, 91)

		FlipBuffers()

		; pour faire en sorte que le process ne soit pas trop utilisé
		; on met un delay (plus le nombre est grand moins on utilise de process)
		;Delay(20)         ; 20 est un bon compromis
		Delay(TimeLeft())

		iScroll+1
		
		;// events
    EventID = WindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        If WindowID=#Window_Main_Form
          exitkey=1
        EndIf
    EndSelect
    
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape)
      exitkey=1
    EndIf
Until exitkey = 1

End

;-Création du ciel
Procedure CreateSky()
If CreateImage(#Sky,#WIDTH,#HEIGHT)
  StartDrawing(ImageOutput(#Sky))
  	x = 0
  	w = #WIDTH
  	y = 0
  	h = 76
  	Box(x,y,w,h,RGB(99, 113, 132))
  	y + h
  	h = 27
  	Box(x,y,w,h,RGB(115, 113, 132))
  	y + h
  	h = 14
  	Box(x,y,w,h,RGB(132, 113, 132))
  	y + h
  	h = 10
  	Box(x,y,w,h,RGB(148, 113, 132))
  	y + h
  	h = 8
	  Box(x,y,w,h,RGB(165, 113, 132))
  	y + h
	  h = 7
	  Box(x,y,w,h,RGB(181, 113, 132))
	  y + h
	  h = 6
	  Box(x,y,w,h,RGB(198, 113, 132))
	  y + h
	  h = 6
	  Box(x,y,w,h,RGB(214, 113, 132))
	  y + h
	  h = 4
	  Box(x,y,w,h,RGB(231, 113, 132))
	  y + h
	  h = 6
	  Box(x,y,w,h,RGB(247, 113, 132))
  StopDrawing()
Else
  MessageRequester("Error","Cannot create image")
EndIf
EndProcedure

;-Affichage du ciel
Procedure DrawSky()
  StartDrawing(ScreenOutput())
    DrawImage(ImageID(#Sky), 0, 0)
  StopDrawing()
EndProcedure

;-Affichage d'un sprite
Procedure DrawPlane(surface, time, scale.f, y)
	offset.l

  tmp = (time * scale * #SPEED_FACTOR)
	offset = tmp % #WIDTH

	DisplayTransparentSprite( surface, offset - #WIDTH, y )
	DisplayTransparentSprite( surface, offset, y )
EndProcedure

Procedure.l TimeLeft()
	next_time = 0
	now = 0

	now = ElapsedMilliseconds()
	If next_time <= now
    next_time = now + #TICK_INTERVAL
		;ProcedureReturn(0)
	EndIf
	ProcedureReturn(next_time - now)
EndProcedure
nb2: C'est pas trés fluide
Dernière modification par flaith le ven. 24/mars/2006 22:21, modifié 2 fois.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

tente un delay de 1ms dans ta boucle
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

ImageImageImage
cool merci Droopy, de 99% je passe à 39%
next level (si possible) passer à 19% comme la version C ...
encore merci :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

flaith a écrit :ImageImageImage
cool merci Droopy, de 99% je passe à 39%
next level (si possible) passer à 19% comme la version C ...
encore merci :D
ben tu augmente le delay c'est tout bete :D

plus tu augmente ton delay ,plus du rends du temps au system
mais plus tu ralenti ton prg , c'est a toi de jauger ! :D
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Dobro a écrit : ben tu augmente le delay c'est tout bete :D

plus tu augmente ton delay ,plus du rends du temps au system
mais plus tu ralenti ton prg , c'est a toi de jauger ! :D
:D merci beaucoup m'sieur Dobro, avec un delay(20) j'arrive à 1% 8O

Encore merci à tous :wink:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Mais plus tes Delay sont longs, moins ton programme est performant et réactif.
Donc faut trouver le juste milieu... :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

lionel_om a écrit :Mais plus tes Delay sont longs, moins ton programme est performant et réactif.
Donc faut trouver le juste milieu... :wink:
oui c'est bien ce que je lui est dit plus haut !! :lol:
plus tu augmente ton delay ,plus du rends du temps au system
mais plus tu ralenti ton prg , c'est a toi de jauger !
:lol:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Il devient gâteux c'est tout :lol:
(comme ca je suis pas le seul)

Dri :P
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Bah oué je vieilli, ms c parece que j'avais pas tout lu ta réponse Dobro... dsl :oops:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

n'empêche, merci à tous quand même :D les gars, vous êtes des bons !!!
comtois
Messages : 5191
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

quand tu auras fini ta version , tu pourras comparer avec celle ci
http://purebasic.fr/english/viewtopic.php?t=19767

ou celle ci

http://www.purebasic.fr/english/viewtopic.php?t=14664

Je n'ai pas regardé les codes, je ne sais pas s'ils sont identiques ou non , le résultat oui :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

merci pour l'info Comtois, je m'étais juste "amusé" à faire la version PB de celle trouvé sur ce site http://www.glop.org/software/sotb
Mais, grace à toi, je vois que d'autre personne l'on déjà fait !!! :wink:

n'empêche que par rapport à la version C/SDL c'est pas aussi fluide ! Qu'est-ce qui manque pour que cela soit aussi fluide ??
Répondre