Page 1 sur 2

Probleme lancement de mon jeux

Publié : ven. 10/sept./2010 12:12
par Akra Laya
Bonjour à tous,

alors voila je rencontre un leger soucis voici le code :

Code : Tout sélectionner

Structure s_Resolution
	largeur.i
	hauteur.i
	profondeur.i
	TDR.i
	fullscreen.i
EndStructure

#Fenetre = 0
#config = 0

Global Choix.s
Global ecran.s_Resolution
Global NewList ListEcran.s()


Procedure GetResolution()
	
	If ExamineScreenModes()
		While NextScreenMode()
			ecran\largeur = ScreenModeWidth()
			ecran\hauteur = ScreenModeHeight()
			ecran\profondeur = ScreenModeDepth()
			ecran\TDR = ScreenModeRefreshRate()
			choix.s = Str(ecran\largeur)+"*"+Str(ecran\hauteur)+"*"+Str(ecran\profondeur)+"*"+Str(ecran\TDR)
			AddGadgetItem(4,0,choix)
			AddElement(ListEcran())
			ListEcran() = Choix
		Wend
	EndIf
	
EndProcedure

Procedure SaveRes()
	
	CreateFile(#config,"Config.cfg")
	config.s = choix+"*"+Str(ecran\fullscreen)
	;config.s = Str(ecran\largeur)+"*"+Str(ecran\hauteur)+"*"+Str(ecran\profondeur)+"*"+Str(ecran\TDR)+"*"+Str(ecran\fullscreen)
	WriteString(#config,config)
	CloseFile(#config)
	
EndProcedure

Procedure RecupRes()
	
	If ReadFile(#config,"Config.cfg")
		While Eof(#config) = 0
			resolution.s =ReadString(#config)
		Wend
		
		ecran\largeur = Val(StringField(resolution,1,"*"))
		ecran\hauteur = Val(StringField(resolution,2,"*"))
		ecran\profondeur = Val(StringField(resolution,3,"*"))
		ecran\TDR = Val(StringField(resolution,4,"*"))
		ecran\fullscreen = Val(StringField(resolution,5,"*"))
		If ecran\fullscreen = 1
			SetGadgetState(6,#PB_Checkbox_Checked)
		ElseIf ecran\fullscreen = 0
			SetGadgetState(6,#PB_Checkbox_Unchecked)
		EndIf
		
	Else 
		ExamineDesktops()
		ecran\largeur = DesktopWidth(0)
		ecran\hauteur = DesktopHeight(0)
		ecran\profondeur = DesktopDepth(0)
		ecran\TDR = DesktopFrequency(0)
		ecran\fullscreen = 0
	EndIf

EndProcedure

Procedure RecupBonneRes()
	compte.i = ListSize(ListEcran())-1
	;Debug compte.i
	
	ForEach ListEcran()
		largeur.i = Val(StringField(ListEcran(),1,"*"))
		hauteur.i = Val(StringField(ListEcran(),2,"*"))
		profondeur.i = Val(StringField(ListEcran(),3,"*"))
		TDR.i = Val(StringField(ListEcran(),4,"*"))
		fullscreen.i = Val(StringField(ListEcran(),5,"*"))
		
		If ecran\largeur = largeur And ecran\hauteur = hauteur And ecran\profondeur = profondeur And ecran\TDR = TDR
			SetGadgetState(4,compte)
		EndIf
		compte = compte -1
	Next
	
EndProcedure

Procedure Appliquer()
	
	HideGadget(0,0)
	HideGadget(1,0)
	HideGadget(2,0)
	
	HideGadget(4,1)
	HideGadget(5,1)
	HideGadget(6,1)
		
	SaveRes()
EndProcedure

Procedure Option()
	
	HideGadget(0,1)
	HideGadget(1,1)
	HideGadget(2,1)
	
	HideGadget(4,0)
	HideGadget(5,0)
	HideGadget(6,0)
	
EndProcedure
	
Procedure.b MenuGame()
	
		
	If OpenWindow(#Fenetre,10,0,400,300,"Choix de la résolution :",#PB_Window_ScreenCentered)
			
		ButtonGadget(0,150,25,100,25,"Jouer")
		ButtonGadget(1,150,125,100,25,"Option")
		ButtonGadget(2,150,225,100,25,"Quitter")
		
		ComboBoxGadget(4,25,10,200,25)
		ButtonGadget(5,75,70,100,25,"Appliquer")
		CheckBoxGadget(6,90,40,70,25,"Fullscreen")
	
		HideGadget(4,1)
		HideGadget(5,1)
		HideGadget(6,1)
			
		GetResolution()
		RecupRes()
		RecupBonneRes()
			
		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_Gadget
					Select EventGadget()
						Case 0
							ProcedureReturn 1
							Break
						Case 1
							Option()
							
						Case 2
							CloseWindow(0)
							End
							
						Case 5
							choix = GetGadgetText(4)
							ecran\largeur = Val(StringField(choix,1,"*"))
							ecran\hauteur = Val(StringField(choix,2,"*"))
							ecran\profondeur = Val(StringField(choix,3,"*"))
							ecran\TDR = Val(StringField(choix,4,"*"))
							If ecran\largeur <> 0
								If GetGadgetState(6) = #PB_Checkbox_Checked
									ecran\fullscreen = 1
								ElseIf GetGadgetState(6) = #PB_Checkbox_Unchecked
									ecran\fullscreen = 0
								EndIf
								Appliquer()
							Else
								MessageRequester("Veuillez choisir une résolution :","Vous n'avez pas sélectionné de résolution veuillez en sélectionner une.",#PB_MessageRequester_Ok)
							EndIf
							
					EndSelect
		
				Case #PB_Event_CloseWindow
					Select EventWindow()
						Case #Fenetre
							CloseWindow(#Fenetre)
							End
					EndSelect
			EndSelect
		ForEver
	EndIf

	
EndProcedure

Procedure OpenEcran()
	If ecran\fullscreen = 1
		OpenScreen(ecran\largeur,ecran\hauteur,ecran\profondeur,"Essai 1", #PB_Screen_WaitSynchronization,ecran\TDR)
		
	ElseIf ecran\fullscreen = 0
		OpenWindow(1,0,0,ecran\largeur,ecran\hauteur,"Essai 1",#PB_Window_ScreenCentered)
		OpenWindowedScreen(WindowID(1),0,0,ecran\largeur,ecran\hauteur,1,0,0,#PB_Screen_WaitSynchronization)
	EndIf
	MouseLocate(ecran\largeur/2,ecran\hauteur/2)

EndProcedure


Procedure DemoMenuGame()

	If InitEngine3D()
		
		InitSprite()
		InitMouse()
		InitKeyboard()
		
		Add3DArchive("Data\Model3D", #PB_3DArchive_FileSystem)
		Add3DArchive("Data\Texture", #PB_3DArchive_FileSystem)

		#ApartMesh = 0
		#ApartTex = 0
		
		a.b = 1
		
		While a
			If MenuGame()
				
				OpenEcran()
				CloseWindow(#Fenetre)
				
				Add3DArchive("Data\Model3D", #PB_3DArchive_FileSystem)
				Add3DArchive("Data\Texture", #PB_3DArchive_FileSystem)				
				
				progress.f = 0
				
				OpenWindow(2,10,10,200,30,"Chargement en cours ...",#PB_Window_ScreenCentered|#PB_Window_Tool)
				ProgressBarGadget(7,10,10,180,10,0,400,#PB_ProgressBar_Smooth)
					
				SetGadgetState(7,progress)

				c.i = 0
				For a = 0 To 20
					For b = 0 To 20
						If LoadMesh(0,"robot.mesh")
							LoadTexture(0,"r2skin.jpg")
							
							CreateMaterial(0,TextureID(0))
							CreateEntity(c,MeshID(0),MaterialID(0))
							EntityMaterial(c,MaterialID(0))
							EntityLocate(c,b * 40,0,a * 50)
							AnimateEntity(c,"Walk")
							
							progress = progress + 1
							SetGadgetState(7,progress)

							FreeTexture(0)
							FreeMesh(0)
							
							c = c + 1
						Else
							MessageRequester("Model3D introuvable.","Robot.mesh n'a pas put etre chargé.")
						EndIf
					Next
				Next
				
				FreeGadget(7)
				CloseWindow(2)
				
				CreateLight(0, RGB(255,255,255))
				
				CreateCamera(0, 0, 0, 100, 100)
				
				CameraLocate(0,0,0,100)
				
				Repeat
					
					ClearScreen(RGB(0,0,0))
					
					;Bouger()
					;Wireframe()
					
					RenderWorld()
					FlipBuffers()
					

				Until KeyboardPushed(#PB_Key_Escape)
				
				FreeLight(0)
				
				FreeCamera(0)
				
				While c > 0
					FreeEntity(c)
					c = c - 1
				Wend
				
				If ecran\fullscreen = 0
					CloseWindow(1)
					ReleaseMouse(1)
				ElseIf ecran\fullscreen = 1
					CloseScreen()
				EndIf
				
				

			EndIf
		Wend
	Else
		MessageRequester("Erreur.","Le Moteur 3D ne peut etre initialisé.",#PB_MessageRequester_Ok)
		
	EndIf
EndProcedure

DemoMenuGame()
edit : j'avais oublier ceci a la fin DemoMenuGame() pour que sa demarre :) mais la n'est pas mon problème

Mon problème est que si vous cliquer sur jouer ensuite vous quitter le jeux (avec echap) mais pas le menu et que vous re-cliquer sur jouer le jeu plante.
p.s: il cree un fichier config pour sauvegarder la resolution choisi penser à la supprimer.

Merci de vos réponse.

Re: Probleme lancement de mon jeux

Publié : ven. 10/sept./2010 12:43
par Ollivier
Salut Akra Laya!!!

Ben bienvenue déjà pour commencer!!!

Alors je pense comprendre ce que je tu veux et j'ose te dire que le bébé de Fred ne peut pas le faire directement. Il faut jouer de "malice" pour y parvenir! Je te conseille ceci:

Formation à la modulation, la souplesse et au champignon par Ollivier

Avec la très vive recommandation de tout lire de A à Z! Car la solution y est!

Bon courage!

Ollivier

Re: Probleme lancement de mon jeux

Publié : ven. 10/sept./2010 12:55
par Akra Laya
ok je vais lire sa en voir ce que je peu faire merci :)

Re: Probleme lancement de mon jeux

Publié : ven. 10/sept./2010 12:59
par Ollivier
Dans le cas d'un système autonome, il vaut mieux scinder le code du menu et le code du jeu dans 2 fichiers exécutables différents.

Re: Probleme lancement de mon jeux

Publié : ven. 10/sept./2010 13:06
par Akra Laya
Ok et merci pour la très rapide réponse :)

Re: Probleme lancement de mon jeux

Publié : mar. 14/sept./2010 18:19
par SPH
Akra, je vais etre gentil et je rappelle un truc a tout le monde : quand on publie un code, on le vérifie avant !!!

Car par exemple, ton code fait une erreur ligne 267 :

Code : Tout sélectionner

               Bouger()
Moi qui ne code plus en ce moment, je voulais quand meme jeter un coup d'oeil ! Et bin, c'est raté :|

Re: Probleme lancement de mon jeux

Publié : mar. 14/sept./2010 19:52
par Akra Laya
voila SPH yaura plus d'erreur :).

Re: Probleme lancement de mon jeux

Publié : mar. 14/sept./2010 20:20
par Ollivier
Euh... Spiche, pourquoi tu torches Mémé alors qu'elle s'est lavée toute seule?

Voilà la gueule du sujet maintenant...

Re: Probleme lancement de mon jeux

Publié : mar. 14/sept./2010 22:52
par Backup
Ollivier a écrit :Dans le cas d'un système autonome, il vaut mieux scinder le code du menu et le code du jeu dans 2 fichiers exécutables différents.
c'est une façon , mais de la a affirmer "il vaut mieux" ; je n'irai pas jusque là :)

le tout est de bien séparer son code en sections ; on en a deja parlé dans un topic
"Beauté du code" ou un nom dans le genre ... :)

le choix d'utiliser plusieurs fichiers, avec un fichier principal qui fait appel aux autres avec des
includes , peut etre un choix piege pour un débutant. :)

(par exemple :l'utilisation de différentes variables global ayant le même nom, est le truc qui peut etre galère a retrouver en cas d'utilisation "d'include")

perso je conseille un seul fichier , mais bien sectionné a l'aide de remarque

genre
; *********** initialisation **************

dffg
dfgdfgd
dfgdfg

; ******** boucle principale *************

dfgdf
fdg
fdgdfgdfd
dfgdfg


; ****** les procedures *****************
dfgdfg
dfgdfgdfgd
dfgdfgdf
fdgdfgdf

ps: je ne recommande pas l'utilisation d'une procedure pour enfermer la boucle principale
mais bon chacun voit midi a sa porte :)

:)

Re: Probleme lancement de mon jeux

Publié : mer. 15/sept./2010 0:03
par Geo Trouvpatou
Salut.

Je n'y connais rien en 3d mais est-ce que cela est normal :

Code : Tout sélectionner

For a = 0 To 20
      For b = 0 To 20
            If LoadMesh(0,"robot.mesh")
                  LoadTexture(0,"r2skin.jpg")
                  
                  CreateMaterial(0,TextureID(0))
                  CreateEntity(c,MeshID(0),MaterialID(0))
                  EntityMaterial(c,MaterialID(0))
                  EntityLocate(c,b * 40,0,a * 50)
                  AnimateEntity(c,"Walk")
                  
                  progress = progress + 1
                  SetGadgetState(7,progress)
                  
                  FreeTexture(0)
                  FreeMesh(0)
                  
                  c = c + 1
            Else
                  MessageRequester("Model3D introuvable.","Robot.mesh n'a pas put etre chargé.")
            EndIf
      Next
Next
Tu charges à de multiples reprises ton mesh et sa texture.

J'imagine que :
LoadMesh(0,"robot.mesh")
LoadTexture(0,"r2skin.jpg") CreateMaterial(0,TextureID(0))
CreateEntity(c,MeshID(0),MaterialID(0))
EntityMaterial(c,MaterialID(0))
devraient se trouver à l'extérieur de la boucle.

Regardes l'exemple "mesh.pb" fourni avec PB.


Bye.

Re: Probleme lancement de mon jeux

Publié : mer. 15/sept./2010 0:16
par Ollivier
Dobro a écrit :c'est une façon , mais de la a affirmer "il vaut mieux" ; je n'irai pas jusque là
Jamais, tu n'aurais été éructer une telle remarque sans que je n'eusse maladroitement opéré une torsion quelque part, donc...

Mea Culpa : le bébé de Fred peut changer de mode dans un même programme!
Ce qui est une excellente nouvelle.

Code : Tout sélectionner

Structure DesktopInfo
      W.I
      H.I
      D.I
      F.I
EndStructure

If InitSprite()
      InitKeyboard()
      If ExamineDesktops()
            Desk.DesktopInfo
            Desk\W = DesktopWidth(0)
            Desk\H = DesktopHeight(0)
            Desk\D = DesktopDepth(0)
            Desk\F = DesktopFrequency(0)
            If OpenWindow(0, 0, 0, 400, 90, "Modes écran", $CF0001)
                  ComboBoxGadget(1, 10, 10, 380, 280)
                  ButtonGadget(2, 10, 44, 380, 24, "Tester la résolution")
                  If ExamineScreenModes()
                        While NextScreenMode()
                              AddGadgetItem(1, -1, Str(ScreenModeWidth() ) + "x" + Str(ScreenModeHeight() ) + "x" + Str(ScreenModeDepth() ) + "x" + Str(ScreenModeRefreshRate() ) )
                        Wend
                  EndIf
                  Repeat
                        Event = WaitWindowEvent()
                        Select Event
                              Case #PB_Event_Gadget
                                    If EventGadget() = 2
                                          OldMode = Mode
                                          Mode = GetGadgetState(1)
                                          If Mode <> OldMode
                                                If Mode <> -1
                                                      Mode$ = GetGadgetItemText(1, Mode)
                                                      Dw = Val(StringField(Mode$, 1, "x") )
                                                      Dh = Val(StringField(Mode$, 2, "x") )
                                                      Dd = Val(StringField(Mode$, 3, "x") )
                                                      OpenScreen(Dw, Dh, Dd, "Untitled")
                                                            Repeat
                                                                  Delay(1)
                                                                  ClearScreen(#White)
                                                                  StartDrawing(ScreenOutput() )
                                                                        Box(1, 1, Dw - 2, Dh - 2, #Red)
                                                                        DrawText(10, 10, Mode$, #White, #Red)
                                                                  StopDrawing()
                                                                  FlipBuffers()
                                                                  ExamineKeyboard()
                                                            Until KeyboardPushed(#PB_Key_Escape)
                                                      CloseScreen()
                                                EndIf
                                          EndIf
                                    EndIf
                        EndSelect
                  Until Event = 16
            EndIf      
      EndIf
EndIf

Re: Probleme lancement de mon jeux

Publié : ven. 17/sept./2010 15:05
par Akra Laya
@Geo Trouvpatou : tu a raison je devrait faire un copyentity() mais la n'etait pas le problème :)

@Ollivier : euh chez moi sa plante sur clearscreen() quand je change de resolution :$

pour info mon prog beug sur le createcamera() et il me met : [ERREUR] Program aborted.(by external library)
mais c'est peu etre à cause que je suis sous linux :(

Re: Probleme lancement de mon jeux

Publié : ven. 17/sept./2010 15:32
par Backup
Akra Laya a écrit :mais c'est peu etre à cause que je suis sous linux :(
ha bah voila , tu cherche les complications aussi :lol:

Re: Probleme lancement de mon jeux

Publié : ven. 17/sept./2010 19:33
par Ollivier
Akra Laya a écrit :@Ollivier : euh chez moi sa plante sur clearscreen() quand je change de resolution :$
C'est, je pense, dû à une erreur bête de ma part: j'ai écrit un nombre direct au lieu d'utiliser les constantes.

Mauvaise syntaxe (uniquement pour Windows):

Code : Tout sélectionner

            If OpenWindow(0, 0, 0, 400, 90, "Modes écran", $CF0001)
Bonne syntaxe (pour tous les OS):

Code : Tout sélectionner

            If OpenWindow(0, 0, 0, 400, 90, "Modes écran", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Logiquement, ce code corrigé devrait fonctionner:

Code : Tout sélectionner

Structure DesktopInfo
      W.I
      H.I
      D.I
      F.I
EndStructure

If InitSprite()
      InitKeyboard()
      If ExamineDesktops()
            Desk.DesktopInfo
            Desk\W = DesktopWidth(0)
            Desk\H = DesktopHeight(0)
            Desk\D = DesktopDepth(0)
            Desk\F = DesktopFrequency(0)
            If OpenWindow(0, 0, 0, 400, 90, "Modes écran", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
                  ComboBoxGadget(1, 10, 10, 380, 280)
                  ButtonGadget(2, 10, 44, 380, 24, "Tester la résolution")
                  If ExamineScreenModes()
                        While NextScreenMode()
                              AddGadgetItem(1, -1, Str(ScreenModeWidth() ) + "x" + Str(ScreenModeHeight() ) + "x" + Str(ScreenModeDepth() ) + "x" + Str(ScreenModeRefreshRate() ) )
                        Wend
                  EndIf
                  Repeat
                        Event = WaitWindowEvent()
                        Select Event
                              Case #PB_Event_Gadget
                                    If EventGadget() = 2
                                          OldMode = Mode
                                          Mode = GetGadgetState(1)
                                          If Mode <> OldMode
                                                If Mode <> -1
                                                      Mode$ = GetGadgetItemText(1, Mode)
                                                      Dw = Val(StringField(Mode$, 1, "x") )
                                                      Dh = Val(StringField(Mode$, 2, "x") )
                                                      Dd = Val(StringField(Mode$, 3, "x") )
                                                      OpenScreen(Dw, Dh, Dd, "Untitled")
                                                            Repeat
                                                                  Delay(1)
                                                                  ClearScreen(#WhiteColor)
                                                                  StartDrawing(ScreenOutput() )
                                                                        Box(1, 1, Dw - 2, Dh - 2, #RedColor)
                                                                        DrawText(10, 10, Mode$, #WhiteColor, #RedColor)
                                                                  StopDrawing()
                                                                  FlipBuffers()
                                                                  ExamineKeyboard()
                                                            Until KeyboardPushed(#PB_Key_Escape)
                                                      CloseScreen()
                                                EndIf
                                          EndIf
                                    EndIf
                        EndSelect
                  Until Event = #PB_Event_CloseWindow
            EndIf      
      EndIf
EndIf

Re: Probleme lancement de mon jeux

Publié : sam. 18/sept./2010 10:47
par Akra Laya
pour que le code marche aussi sous linux faut changer les #white #red avec rgb()
sinon plantage

edit : j'ai quand meme un invalid memory acces sur le clearscreen de la boucle repeat quand je change de résolution.
la premiere marche la deusième plante.