PureSprint v0.02

Programmation avancée de jeux en PureBasic
jem
Messages : 18
Inscription : lun. 26/sept./2011 9:02

PureSprint v0.02

Message par jem »

Bonjour,
Edit : Nouvelle version : http://dl.free.fr/ditp5w8SS ( 15Mo )

Code : Tout sélectionner

[DEFAULT MOVING KEY]
Arrow Up = accelerate
Arrow Down = break
Arrow left = turn left
Arrow Right = Turn Right

You can change it in [Option Menu]

[FUNCTION KEY]
ESC = quit or Pause
F1 = Display Help
F2 = Display FPS
F5 = Display Debug Info Car
F6 = Cycle Car Debug Info
F7 = Display Circuit Data
F9 = Change Race
F10 = Music On/Off
F12 = Take a screenshot

[IMPROVE CAR]
[+ / -] = Change Max Speed
[Pad9 / Pad6] = Change Acceleration Coeff
[Pad8 / Pad5] = Change Break Coeff
[Pad7 / Pad4] = Change Rotation Speed

Un projet personel encore en developpement. Je suis dessus depuis 1 mois environ et c'est mon premier essai de developpement de jeu et premier mois sous Purebasic. Etant famillier avec le vbscript ce langage me semble tres naturel et d'une simplicité très sympathique. J'adore !!!

Sans prétention aucune, voici un petit jeu de course de voiture tres largement inspiré de SuperSprint, pour les connaisseurs :

Il reste énormément de travail, est ce que je le menerai au bout c'est une autre histoire, dans tout les cas cela m'a fait avancer dans mon but initial qui etait de comprendre comment programmer un jeux video.

Je ne suis pas graphiste, donc le Design peut etre ( DOIT etre ) largement amélioré, on peux faire ce qu'on veux à ce niveau, il n'y a pas de rapport direct avec le moteur du jeux lui meme.

Le menu utilise les biblioteques SGX de WanabePhoenix :
http://www.wannabephoenix.de/pbstuff/pb ... e&light=on
http://forums.purebasic.com/english/vie ... hp?t=31357

Legerement modifiée ( gestion des fenetres transparentes - rajout de la gestion du clavier AZERTY, FR - avec le Bug de la touche "M" envoyant 2 ScanCode et la touche "?" en envoyant aucun - lié à un bug PB visiblement )

Pour ceux qui auront le courage de tester les informations suivantes m'interesse :
-FPS dans le jeux lui meme
-si votre FPS est inferieur à 60 ( la synchro vertical n'est pas activée ) quel est votre processeur et votre carte graphic.
-Tout autres commentaires si vous le jugez utile.

Rien n'est définitif, les sons et musics ne sont là qu'a titre d'exemple.
3 circuits disponibles. Il est prévu que tout le monde puisse creer ses propres circuits
Jeux en réseau prévu - une version préliminaire existait qui n'est plus compatible avec les récentes modifications.

Important, on change de circuit en apuyant sur "F9"
Etant en pleine reflexion sur les fenètres entre circuit pour la gestion des options ( amélioration de voiture etc ... ) je n'ai pas encore implémenté le changement automatique


enjoy!
Dernière modification par jem le ven. 21/oct./2011 19:59, modifié 2 fois.
PureBasic V4.60 RC2 x86 | Windows 7
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: PureSprint

Message par falsam »

Window 7, Bi-processeur 2.4 Ghz, Video Nvidia Geforce 9600M (GRAM 512 Mo)

Pas mal du tout :)

FPS : 215 environ (Min 202 Max 242)

-Les voitures devraient s'arrêtées à l'arrivée.
-Manque une la touche largage de peau de bananes :mrgreen:
-La course est trop facile. J’espère que tu as prévu que les voiture puissent lacher des ralentisseurs, bombes, etc .....

En tout cas c'est un très bon début. Bravo
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: PureSprint

Message par falsam »

mmmmmmmm, je vois que tu as prévu un mode multijoueurs. :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: PureSprint

Message par comtois »

Bravo pour un premier jeu avec Pb, on peut dire que c'est réussi , on ne voit pas si souvent que ça des jeux terminés (avec un menu, configuration du jeu, etc).
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.
jem
Messages : 18
Inscription : lun. 26/sept./2011 9:02

Re: PureSprint

Message par jem »

falsam a écrit :Window 7, Bi-processeur 2.4 Ghz, Video Nvidia Geforce 9600M (GRAM 512 Mo)

Pas mal du tout :)

FPS : 215 environ (Min 202 Max 242)

-Les voitures devraient s'arrêtées à l'arrivée.
-Manque une la touche largage de peau de bananes :mrgreen:
-La course est trop facile. J’espère que tu as prévu que les voiture puissent lacher des ralentisseurs, bombes, etc .....

En tout cas c'est un très bon début. Bravo

J'ai prévu plein de chose :
Aléatoirement sur la carte ( circuit ) peuvent apparaitre
Des Clés à mollette = 3 clé a molettte = achetage d'option de boot de vehicule entre chaque circuit.
Des taches d'huiles : fait perdre le controle et déraper la voiture

Prévu en vrac
des Tornades qui bougent ? ( plus violent que les taches d'huiles )
des pillers qui sortent du sol
Les circuits peuvent contenir des racourcis et etre sur 3 niveaux ( y'a un exemple avec le circuit 3, racourcis en haut de la carte )

on peut rajouter plein d'evenement.

Il est déja prévu et faisable que chacun rajoute ses propres circuits, tres facile a réaliser une fois qu'on sait comment les faire et qu'on utilise l'outils que j'ai developper pour les Packer ( fichiers : resource\circuit\file.data )

l'IA qui est tres sommaire ici, ne sert qu'en mode solo, qui pourrait en faite disparaitre ( ou pas ) car le plus important étant le mode multijoueur en réseau.
Mais il serait envisageable d'en rajouter eventuelement meme en mode Multi.

Bien sur c'est tentant de rajouter la possibilité aux joueurs de lacher des obstacles ( peau de bannane , mine etc ... ) , on verra si j'arrive a mener le projet a son terme, et s'il interesse un peu de monde. Je me rend compte que seul, j'aurai du mal a tout faire. La partie graphisme n'est pas du tout ma tasse de thé.

Il serait tres facile de rajouté la possibilité de jouer à 2 sur le meme ordi.

A cause de l'utilisation de la bibliotheque SGX pour le menu, il n'est pas possible de faire tourner l'appli sur d'autre plateforme et PC.. ça me gene assez de ne pouvoir pas profiter de la portabiliter de Purebasic. Donc je pense qu'un de mes projets devrait etre de faire une bibliotheque de fenetre en mode screen.
C'est un bonne exercice de style je trouve. La bibliotheque de gestion du clavier et souris en mode "Screen" étant la plus pénible en PB à mon gout.
Il serait utopique de croire qu'un jour il y aura les gadgets implémenter en mode screen, avec la possibiliter d'injecter notre propre Design de fenetre ?

Pour la partie réseau , l'idée est de contruire une communauté, permetant de creer des championnats, entre amis, ou publique, avec inscription sur site web , consultation des "Best Lap", du championnat , pourquoi pas un mode spectateur.
La partir Web - bases de données est pour moi la plus facile . C'est une partie de mon métier.

Ce n'est qu'une idée : de la à la réaliser, c'est une autre histoire.

La partie me posant le plus de probleme dans le sens ou je ne sais pas comment l'aborder, c'est le son du moteur des voitures.
Il semblerait que je dois regarder du coter des Tracker ( module ) , je vais m'employer à ça.
Réussir à trouver quelque chose permtant de géré un son jouer en fonction de l'acceleration de la voiture ou ca desceleration; et maintenant un son en boucle quand on est à la vitesse max de la voiture ( ce qui arrive le plus souvent )
Je suis preneur de toute piste ou toute idée sur le sujet
Jouer simplement un son quand on accelere ou quand on freine ne me semble pas etre satisfaisant.
PureBasic V4.60 RC2 x86 | Windows 7
jem
Messages : 18
Inscription : lun. 26/sept./2011 9:02

Re: PureSprint

Message par jem »

Nouvelle Version : http://dl.free.fr/ditp5w8SS ( 15Mo )


-Diverses améliorations du moteur du jeu
-Ajout d'écran avant course
-Selection des options disponibles apres une course quand vous avez rammassez 3 clefs
-IA améliorée ( meme si ça ne se vois pas )
-Enchainement des circuits automatiques.
-Ajout du mode Miroir ( une fois tous les circuits fait, on recycle a nouveau en mode miroir )
-2 nouveaux circuits


Il reste beaucoup de travail. J'a iencore plein d'idée en tète.
Mon but premier est atteint faire un jeux vidéo fonctionel.
Je me suis vraiement eclater à faire ça ces 6 dernèires semaines. Pure basic est vraiement un language tout à fait abordable, me qui me satisfait au plus haut point, malgres les quelques lacunes sur certains points. Il me reste beaucoup de chose à explorer avec ce language.

Maintenant l'aspect Design est le point que je vais devoir être amélioré, et c'est la que tout part en sucette : je suis pas graphiste et force est de reconnaitre que mon cerveau est pas cablé pour le coter "artistique" de la vie.
Donc si par hasard une personnes hautement qualifié passe dans le coin et lis ces quelques lignes, à un peu de temps libre et une bonne matrise des outils graphiques avec un bon sens artistique, je suis joignable via MP. :)

Je suis ouvert à toutes questions, si vous vous demandez comment j'ai fais tel ou tel chose.
Pour le moment je ne compte pas publier mon code source. Je le ferai éventuelement quand je saurais sûre que le projet n'avancera plus.
Mais y'a pas vraiement grand chose de révolutionaire de toute façon


enjoy !
PureBasic V4.60 RC2 x86 | Windows 7
jem
Messages : 18
Inscription : lun. 26/sept./2011 9:02

Re: PureSprint v0.02

Message par jem »

Bonjour, je profite du topic pour partager quelques sources d'un travail effectué sur FMOD et les imports sous environnement windows.
Les imports sont assez nouveau pour moi, mais visiblement j'ai réussi à faire quelque chose qui marche, donc je partage la méthode, si d'autres veulent la reprendre.

( Si un modo pense que sujet à sa place ailleur, faite vous plaisir )

Tout d'abord pour importer une lib et pouvoir l'utiliser dans PB, il faut la récupérer. Cela veut dire qu'il faut bien sur que la société ou la personne developpant ce dont vous avez besoin ai "fabriquer" la library. Dans mon exemple avec FMOD version 4.38 , c'est le cas :
Rendez vous donc toute d'abord sur le site http://www.fmod.org , section "Download", et telecharger "FMOD Ex Programmers API" en raport avec votre plateforme ( moi c'est windows ).
Une fois le produit téléchargé et installé , vous aurez accès à quelques programmes ayant surement une utilité, mais qui ne nous interesse pas dans le cadre de cette exemple.
Rendez-vous dans le dossier d'installation du programme ( sur un windows 7 c'est par defaut C:\Program Files (x86)\FMOD SoundSystem\FMOD Programmers API Windows ). Vous y trouverez un dossier "api" , qui contient ce qui nous interesse à savoir :
- un fichier "Fmodex.dll"
- un dossier lib contenant, entre autre, un fichier "fmodex_vc.lib"
Copier ces 2 fichiers dans un dossier que vous aller creer pour votre projet ( soit un projet PB ou plus simplement un fichier ".pb").

Notez au passage dans le dossier d'install de l'API un dossier documentation contenant le fichier "fmodex.chm", vous pouvez dès maintenant l'ouvrir en double cliquant dessus, vous en aurez besoin. Il s'agit du fichier d'aide de l'API contenant toutes les références aux fonctions, enumérations, variables, procédures que nous pourrons importer.

Copier également un fichier style "mp3" ( ou autre format, comme "wav" par exemple ) trouver sur votre HD ( allez , j'suis sur que vous en avez au moins 1 :) ) dans le dossier de travail pour tester le son

Une fois la librarie récupérée et mise de coter dans un dossier de travail, il vous reste à creer le code PureBasic pour l'importation.
Creer donc au moins un fichier ".pb" pour votre code ( moi j'en ai creer 2 , un fichier ".pbi" qui va contenir les Enumerations et code d'import , et le fichier contenant le programme principal,auquel j'ai inclut le fichier ".pbi" )

Je vous livre ici mes 2 fichiers sources de test de l'import :

fichier : fmod.pb

Code : Tout sélectionner

EnableExplicit

XIncludeFile "fmodex_import.pbi"


;- Enumeration

;- Variable
Global fmodsystem.l,channel.l,SoundPause.b=#False,Fmod_SoundVolume.a=100
Global sound
Define fmodversion.l

;- Procedure

Procedure Close_Appli()
  Debug FMOD_System_Release(fmodsystem)
  End
EndProcedure


Procedure GetKeyBoard()
  ExamineKeyboard()
  
  If KeyboardReleased(#PB_Key_Escape)
    Close_Appli()
  EndIf
  
  If KeyboardReleased(#PB_Key_Space)
    If SoundPause
      SoundPause=#False
      Debug FMOD_Channel_SetPaused(channel,SoundPause)
    Else
      SoundPause=#True
      Debug FMOD_Channel_SetPaused(channel,SoundPause)
    EndIf 
  EndIf
  
  If KeyboardReleased(#PB_Key_PageUp)
    If Fmod_SoundVolume < 100
      Fmod_SoundVolume + 10
      FMOD_Channel_SetVolume(channel,(Fmod_SoundVolume / 100))
    EndIf
    
  ElseIf KeyboardReleased(#PB_Key_PageDown)
    If Fmod_SoundVolume > 0
      Fmod_SoundVolume - 10
      FMOD_Channel_SetVolume(channel,(Fmod_SoundVolume / 100))
    EndIf
  EndIf
  
EndProcedure


;- Init
InitSprite()
InitKeyboard()

OpenWindow(0,0,0,1024,768,"test import FMOD",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(0),0,0,1024,768,1,0,0)

KeyboardMode(#PB_Keyboard_International)

Debug FMOD_System_Create(@fmodsystem)
FMOD_System_GetVersion(fmodsystem,@fmodversion) : Debug "version=" + Str(fmodversion)
Debug FMOD_System_init(fmodsystem,2,#FMOD_INIT_NORMAL,0)
Debug FMOD_System_CreateSound(fmodsystem,"votrefichiersonMP3-WAV-autrefomat.mp3",#FMOD_DEFAULT,0,@sound)
Debug FMOD_System_PlaySound(fmodsystem,0,sound,0,@channel)


;- Main Loop
Repeat
  
  Select WindowEvent()
    Case #PB_Event_CloseWindow
      Close_Appli()
  EndSelect
  

  
  GetKeyBoard()
  ClearScreen($CCCCCC)
  StartDrawing(ScreenOutput())
  DrawText(512,300,FormatDate("%hh:%mm:%ss",Date()))
  DrawText(512,320,Str(Fmod_SoundVolume) + " %")
  If SoundPause : DrawText(512,340,"PAUSE") : EndIf
  StopDrawing()
  FlipBuffers()
  
ForEver

fichier : Fmodex_import.pbi

Code : Tout sélectionner

; *****************
; *** FMODEX IMPORT PBI
; *** By Jem October 2011
;******************


;- Enumeration

; FMOD RESULT
Enumeration
  #FMOD_OK 
  #FMOD_ERR_ALREADYLOCKED
  #FMOD_ERR_BADCOMMAND 
  #FMOD_ERR_CDDA_DRIVERS 
  #FMOD_ERR_CDDA_INIT 
  #FMOD_ERR_CDDA_INVALID_DEVICE     ;5 
  #FMOD_ERR_CDDA_NOAUDIO 
  #FMOD_ERR_CDDA_NODEVICES 
  #FMOD_ERR_CDDA_NODISC 
  #FMOD_ERR_CDDA_READ 
  #FMOD_ERR_CHANNEL_ALLOC           ;10 
  #FMOD_ERR_CHANNEL_STOLEN 
  #FMOD_ERR_COM 
  #FMOD_ERR_DMA 
  #FMOD_ERR_DSP_CONNECTION 
  #FMOD_ERR_DSP_FORMAT              ;15
  #FMOD_ERR_DSP_NOTFOUND 
  #FMOD_ERR_DSP_RUNNING 
  #FMOD_ERR_DSP_TOOMANYCONNECTIONS 
  #FMOD_ERR_FILE_BAD 
  #FMOD_ERR_FILE_COULDNOTSEEK       ;20
  #FMOD_ERR_FILE_DISKEJECTED 
  #FMOD_ERR_FILE_EOF 
  #FMOD_ERR_FILE_NOTFOUND 
  #FMOD_ERR_FILE_UNWANTED 
  #FMOD_ERR_FORMAT            ;25
  #FMOD_ERR_HTTP 
  #FMOD_ERR_HTTP_ACCESS 
  #FMOD_ERR_HTTP_PROXY_AUTH 
  #FMOD_ERR_HTTP_SERVER_ERROR 
  #FMOD_ERR_HTTP_TIMEOUT ;30
  #FMOD_ERR_INITIALIZATION 
  #FMOD_ERR_INITIALIZED 
  #FMOD_ERR_INTERNAL 
  #FMOD_ERR_INVALID_ADDRESS 
  #FMOD_ERR_INVALID_FLOAT ;35
  #FMOD_ERR_INVALID_HANDLE 
  #FMOD_ERR_INVALID_PARAM 
  #FMOD_ERR_INVALID_POSITION 
  #FMOD_ERR_INVALID_SPEAKER 
  #FMOD_ERR_INVALID_SYNCPOINT ;40 
  #FMOD_ERR_INVALID_VECTOR 
  #FMOD_ERR_MAXAUDIBLE 
  #FMOD_ERR_MEMORY 
  #FMOD_ERR_MEMORY_CANTPOINT 
  #FMOD_ERR_MEMORY_SRAM ;45
  #FMOD_ERR_NEEDS2D 
  #FMOD_ERR_NEEDS3D 
  #FMOD_ERR_NEEDSHARDWARE 
  #FMOD_ERR_NEEDSSOFTWARE 
  #FMOD_ERR_NET_CONNECT ;50
  #FMOD_ERR_NET_SOCKET_ERROR 
  #FMOD_ERR_NET_URL 
  #FMOD_ERR_NET_WOULD_BLOCK 
  #FMOD_ERR_NOTREADY 
  #FMOD_ERR_OUTPUT_ALLOCATED ;55 
  #FMOD_ERR_OUTPUT_CREATEBUFFER 
  #FMOD_ERR_OUTPUT_DRIVERCALL 
  #FMOD_ERR_OUTPUT_ENUMERATION 
  #FMOD_ERR_OUTPUT_FORMAT 
  #FMOD_ERR_OUTPUT_INIT ;60
  #FMOD_ERR_OUTPUT_NOHARDWARE 
  #FMOD_ERR_OUTPUT_NOSOFTWARE 
  #FMOD_ERR_PAN 
  #FMOD_ERR_PLUGIN 
  #FMOD_ERR_PLUGIN_INSTANCES ;65
  #FMOD_ERR_PLUGIN_MISSING 
  #FMOD_ERR_PLUGIN_RESOURCE 
  #FMOD_ERR_PRELOADED 
  #FMOD_ERR_PROGRAMMERSOUND 
  #FMOD_ERR_RECORD ;70
  #FMOD_ERR_REVERB_INSTANCE 
  #FMOD_ERR_SUBSOUND_ALLOCATED 
  #FMOD_ERR_SUBSOUND_CANTMOVE 
  #FMOD_ERR_SUBSOUND_MODE 
  #FMOD_ERR_SUBSOUNDS ;75
  #FMOD_ERR_TAGNOTFOUND 
  #FMOD_ERR_TOOMANYCHANNELS 
  #FMOD_ERR_UNIMPLEMENTED 
  #FMOD_ERR_UNINITIALIZED 
  #FMOD_ERR_UNSUPPORTED ;80
  #FMOD_ERR_UPDATE 
  #FMOD_ERR_VERSION 
  #FMOD_ERR_EVENT_FAILED 
  #FMOD_ERR_EVENT_INFOONLY 
  #FMOD_ERR_EVENT_INTERNAL ;85
  #FMOD_ERR_EVENT_MAXSTREAMS 
  #FMOD_ERR_EVENT_MISMATCH 
  #FMOD_ERR_EVENT_NAMECONFLICT 
  #FMOD_ERR_EVENT_NOTFOUND 
  #FMOD_ERR_EVENT_NEEDSSIMPLE ;90
  #FMOD_ERR_EVENT_GUIDCONFLICT 
  #FMOD_ERR_EVENT_ALREADY_LOADED 
  #FMOD_ERR_MUSIC_UNINITIALIZED 
  #FMOD_ERR_MUSIC_NOTFOUND 
  #FMOD_ERR_MUSIC_NOCALLBACK ;95
EndEnumeration


;FMOD_INIT_FLAG
Enumeration
  
  #FMOD_INIT_NORMAL=$0
  #FMOD_INIT_STREAM_FROM_UPDATE=$1
  #FMOD_INIT_3D_RIGHTHANDED=$2
  #FMOD_INIT_SOFTWARE_DISABLE=$4
  #FMOD_INIT_OCCLUSION_LOWPASS=$8
  #FMOD_INIT_HRTF_LOWPASS=$10
  #FMOD_INIT_DISTANCE_FILTERING=$200
  #FMOD_INIT_SOFTWARE_REVERB_LOWMEM=$40
  #FMOD_INIT_ENABLE_PROFILE=$20
  #FMOD_INIT_VOL0_BECOMES_VIRTUAL=$80
  #FMOD_INIT_WASAPI_EXCLUSIVE=$100
  #FMOD_INIT_PS3_PREFERDTS=$800000
  #FMOD_INIT_PS3_FORCE2CHLPCM=$1000000
  #FMOD_INIT_DISABLEDOLBY=$100000
  #FMOD_INIT_SYSTEM_MUSICMUTENOTPAUSE=$200000
  #FMOD_INIT_SYNCMIXERWITHUPDATE=$400000
  #FMOD_INIT_GEOMETRY_USECLOSEST=$4000000
  #FMOD_INIT_DISABLE_MYEARS_AUTODETECT=$8000000

EndEnumeration

;FMOD_MODE  ==> CreateSOund
Enumeration
  #FMOD_DEFAULT=$00000000
  #FMOD_LOOP_OFF=$00000001
  #FMOD_LOOP_NORMAL=$00000002
  #FMOD_LOOP_BIDI=$00000004
  #FMOD_2D=$00000008
  #FMOD_3D=$00000010
  #FMOD_HARDWARE=$00000020
  #FMOD_SOFTWARE=$00000040
  #FMOD_CREATESTREAM=$00000080
  #FMOD_CREATESAMPLE=$00000100
  #FMOD_CREATECOMPRESSEDSAMPLE=$00000200
  #FMOD_OPENUSER=$00000400
  #FMOD_OPENMEMORY=$00000800
  #FMOD_OPENMEMORY_POINT=$10000000
  #FMOD_OPENRAW=$00001000
  #FMOD_OPENONLY=$00002000
  #FMOD_ACCURATETIME=$00004000
  #FMOD_MPEGSEARCH=$00008000
  #FMOD_NONBLOCKING=$00010000
  #FMOD_UNIQUE=$00020000
  #FMOD_3D_HEADRELATIVE=$00040000
  #FMOD_3D_WORLDRELATIVE=$00080000
  #FMOD_3D_INVERSEROLLOFF=$00100000
  #FMOD_3D_LINEARROLLOFF=$200000
  #FMOD_3D_LINEARSQUAREROLLOFF=$400000
  #FMOD_3D_CUSTOMROLLOFF=$4000000
  #FMOD_3D_IGNOREGEOMETRY=$40000000
  #FMOD_UNICODE=$1000000
  #FMOD_IGNORETAGS=$2000000
  #FMOD_LOWMEM=$8000000
  #FMOD_LOADSECONDARYRAM=$20000000
  #FMOD_VIRTUAL_PLAYFROMSTART=$80000000
EndEnumeration

;- Variable

;- Main
Import "fmodex_vc.lib"
   
  ;FMOD_System_Create.l (*system) As "_FMOD_System_Create@4"
  FMOD_System_Create.l(*system)
  FMOD_System_Release.l(*system)
  FMOD_System_GetVersion.l(*system,*version)
  FMOD_System_Init.l(*system,NbrChannel.l,flags.l,*extradriverdata)
  FMOD_System_CreateSound.l(*system,name_or_data.s,mode.l,exinfo.l,*sound)
  FMOD_System_PlaySound.l(*system,channelid.l,*sound,paused.b,*channel)
  FMOD_Channel_SetPaused.l(chanel.l,paused.b)
  FMOD_Channel_SetVolume.l(chanel.l,volume.f)
EndImport
Détail du code :
Le code est sale ( comme mon orthographe ! ) pas forcément très bien organiser, c'est un code vite fait pour tester l'import de procédure.
Pensez à changer le nom du fichier à écouter dans la source "fmod.pb" lors de l'appel de la fonction : FMOD_System_CreateSound

les "Debug" présent devant chaque ligne servent juste à afficher le retour de la fonction appelée de façon simple. Il convient de creer une jolie procedure si vous voulez rendre les choses plus "académique".
J'ai numéroté de 5 en 5 les valeurs de l'enumération "#FMOD_ERR_" dans le fichier "fmod_import.pbi" pour retrouver facilement le code d'erreur.

La principal question que j'ai souvent vu sur le forum et que je me posais moi il y a encore 2 jours, c'est comment on importe une librarie sous PB.
Voici la méthode que j'ai utilisé : ce n'est pas la meilleur méthode , c'est juste comment j'ai compris le fonctionnement du bousin.

Dans le fichier "Fmodex_import.pbi" vous trouvez en bas la section princpal de l'import. Sous PB on utilise les mots clés Import "nomdufichier.lib" EndImport dans lequel nous allons spécifier le nom des procédure que nous allons utiliser sous PB. Ces procédures doivent correpondre à fonction "enregistrée" dand le fichier lib ( qui lui mème fait appel au fichier .DLL )

Il suffit pour cela de nommer la procédure avec le nom de votre choix avec la syntaxe PureBasic
exemple : MaProcédure.l(argument1.s,arguement2.l,etc ......) et du lui faire correspondre la signature de la fonction du fichier avec le mot clef As "_nomdelafonctionaimporter@tailledesarguments"
Je vous renvoie à la doc PB pour une meilleur explication des mot clée "Import EndImport"

Quand la fonction à importer correspond au "préfix" que va rajouter automatiquement PB pour essayer d'importer la fonction , il n'y a pas besoin de spécifier le parametre "As".

Maintenant pour connaitre le "nom" des fonctions à importer , c'est la que le fichier d'aide de l'API "fmodex.chm" va nous aider. Il contient la liste de toute les fonctions et Constantes/variables utilisées par l'API. Il suffit donc de chercher la fonction que l'on désire importer dans l'aide, et de coper/coller sa déclaration dans votre section "Import" et de faire les modifications necessairent pour la faire correspondre à la syntaxe PB.

Exemple :

je recherche la fonction setVolume ; il y à plusieurs entrées dans le fichier d'aide de l'Api, on prend celle s'appliquant aux "channel", le code C de la fonction est le suivant :

Code : Tout sélectionner

FMOD_RESULT FMOD_Channel_SetVolume(  FMOD_CHANNEL *  channel,  float  volume);
FMOD_RESULT ===> Type de la variable de retour de la fonction ( c'est en faite un entier, qui retourne une valeur correspondant a l'enumeration "FMOD_RESULT"
FMOD_Channel_SetVolume ===> nom de la fonction à importer
FMOD_CHANNEL * channel ===> arguement "channe"l de type FMOD_CHANNEL ( un entier )
float volume ===> argument "volume" de type Float

Traduction en PB :

Code : Tout sélectionner

FMOD_Channel_SetVolume.l(channel.l, volume.f)

Voila nous venons d'importer une fonction utilisable dans PB.
Reste à comprendre comment marche l'API , donc il faut se repporter aux exemples fournis dans le fichier d'aide et trouvable sur le Net, mais qui seront dans d'autre language ( C , C++, C# )
Il suffit de comprendre le cheminement des fonctions necessaires et d'importer les fonctions nécésaaires. Il n'y a pas besoin d'importer toutes les fonctions, juste celles necessaires à votre projet.

Vous pouvez également creer les énumérations et variables portant le meme nom que dans l'API afin de les utiliser. Pour cela il faut trouver leur définition dans le fichier d'aide ( généralement un lien sur la page d'aide la fonction décrite vous amene vers la description du type de variable ) , de copier/coller le code, et de l'adapter à la syntaxe PB.

Fmod publie également un logiciel appeler FMod Designer, permetant de réaliser le montage des sons necessaire à votre projet qui pourront etre sujet à modification en temps réelle en fonction de parametres. Tout l'interet de l'utilisation de cette librairie est là.
Pour utiliser "ces banques sons" avec le moteur Fmod, il faut utiliser l'API de "fmodDesigner" , que vous trouver dans le dossier "fmoddesignerapi"

En épérant que cela aide.

Dans mon projet PureSprint cela me sert pour le son du moteur de la voiture, le son doit varier en fonction de la vitesse de la voiture, qui change tres souvent.
L'utilisation de la lib "Sound" inclu dans PB ne me permetait pas ce genre de chose , et l'utilisation des modules semble etre une technique totalement dépasser et les outils disponibles pour la création de fichier module semble venir d'un autre temps :) ( avis personnel hein !! )

La License d'utlisation de Fmod est asssez souple, pour le developpement "maison", du genre tant que c'est gratuit et que vous gagnez pas d'argent avec votre projet, faite vous plaisir avec leur API.

@++ dans le bus
PureBasic V4.60 RC2 x86 | Windows 7
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: PureSprint v0.02

Message par blendman »

salut

J'ai testé et je trouve ça pas mal du tout ;).
A part la première course, les autres courses, j'ai été vraiment nul :).

Pour l'idée de créer une lib pour les gadgets en mode screen, je serai très intéressé, car je trouve aussi que ça manque pour les jeux.

Il faudrait une sorte de petite lib modulaire (un plug in ?).
Tiens, une question au passage, qu'est-ce que tu utilises comme méthode pour tes premiers menus (juste pour comparer avec la mienne, pour voir :)) des gosub, des labels, ou un select case qui affiche certaines choses en fonction d'une variable (genre menu = 1 -> les menus d'intro, menu = 2 -> le jeu) ?

J'avais réalisé quelques graphismes pour un jeu de course du même genre (vue de dessus ou 2D iso, je ne me rappelle plus).

Bonne continuation ;)
jem
Messages : 18
Inscription : lun. 26/sept./2011 9:02

Re: PureSprint v0.02

Message par jem »

Pour les menus je code de la façon suivante :

Code : Tout sélectionner

Enumeration
  #MENU
  #GAME
  ;.....
EndEnumeration

Global Main_Appli_Statut.a=#MENU

Repeat
  
  Select Main_Appli_Statut
    Case #MENU
      DisplayMenu()
    Case #GAME
      DisplayGame()
  EndSelect
  
ForEver
et pareil pour les autres "sous phase" .. par exemple, la procedure DisplayGame() contient également un Select EndSelect avec une variable Global et une enumeration pour gérer les différentes phases du jeu en lui mème.


Au passage vu la qualité de ton travail graphique sur 3ark, c'est une personne comme toi qu'il me faudrait pour mener à bien pour projet sur la partie Design.
Je suis en train de coder la partie "son" de la voiture actuelement, et au passage je dois refaire l'algorythme d'accélération de la voiture, pour rendre le son plus réaliste et agréable à entendre.
La partie Design est la prochaine étape, qui définira si le projet va continuer ou pas. Je bute sur un moyen d'arriver à faire des contours de circuit avec des models ( motifs ) suivant le tracé de la piste, permetant de "dessiner" rambarde de sécurité, ou un muret en béton par exemple.
Avec quelques tutos, j'arrive à me débrouiller pour faire des textures bétons ou sol qui font l'affaire pour une présentation basic, mais les contours de la piste, c'est un vrai probleme. Il semble falloir passer par du vectoriel ( Illustrator ? ) ce genre de chose ne semble pas facile à mettre en oeuvre avec 'toshop ou similaire.
Mais y'a rien a faire , je ne suis pas artiste dans l'ame. :)
PureBasic V4.60 RC2 x86 | Windows 7
Répondre