Les versions démos sont également disponibles à l'adresse suivante :
http://www.purebasic.com/french/download.php
We would like to thanks again all the beta testers who found tons a issues and all the help we got from various people, especially on the doc side ! This a LTS (Long Term Support) release, so it will be bug fixed for 2 years until 17th September 2015, while the commandset and compiler functions won't be modified.
Have fun coding,
The Fantaisie Software Team.
Have fun coding,
The Fantaisie Software Team.
Voici la liste des nouveautés :
- Ajouté: Le compileur supporte les Modules
- Ajouté: Bibliothèque Runtime
- Ajouté: Bibliothèque Dialog
- Ajouté: Sous-système GTK3 pour Linux
- Ajouté: Sous-système DirectX11 pour Windows (ne supporte pas le moteur 3D pour l'instant)
- Ajouté: JoystickName(), JoystickZ()
- Ajouté: #PB_Relative optionel avec JoystickX/Y/Z() pour avoir des valeurs plus précises
- Ajouté: Numéro de pad facultatif avec JoystickX/Y/Z() pour utiliser les manettes plus complexes
- Ajouté: ZoomSprite() accepte maintenant #PB_Default dans Largeur/Hauteur pour rétablir la taille initiale du sprite
- Ajouté: Les paramêtres 'Couleur' et 'Intensité' avec DisplayTransparentSprite()
- Ajouté: ClipSprite() supporte #PB_Default comme paramètre individuel
- Ajouté: Option #PB_Sprite_PixelCollision pour CreateSprite(), LoadSprite() pour permettre la collision de pixels
- Ajouté: Support Zoom pour SpritePixelCollision() et SpriteCollision()
- Ajouté: Support OpenGL pour SpriteBlending() (Attention, il "wraps" le mode OpenGL, donc il peut se comporter différemment de DirectX)
- Ajouté: Support 32-bit pour SpriteOutput() avec DX et OpenGL
- Ajouté: #PB_EventType_Focus et #PB_EventType_LostFocus avec EditorGadget()
- Ajouté: #PB_EventType_RightClick avec ListViewGadget()
- Ajouté: #PB_EventType_Change avec PanelGadget() et DateGadget()
- Ajouté: #PB_Prototype et #PB_Module avec Defined()
- Ajouté: Toutes les fonctions Init() peuvent être appelées plus d'une fois sans problème (comme InitSound(), InitNetwork() etc.)
- Ajouté: #PB_FileSystem_Force avec DeleteFile()
- Ajouté: #PB_FileSystem_NoExtension avec GetFilePart()
- Ajouté: Paramètre de couleur d'zrrière-plan avec CreateImage()
- Ajouté: #PB_Entity_NbSubEntities avec GetEntityAttribute()
- Ajouté: MeshIndexCount(), SetRenderQueue(), FetchEntityMaterial(), GetMeshData(), SetMeshData()
- Ajouté: CPUName(), Un/BindEvent(), Un/BindGadgetEvent(), Un/BindMenuEvent()
- Ajouté: Emplacement précédent est affiché lors d'une double déclaration d'une structure, une interface , prototype ou d'une procédure.
- Ajouté: 2 fichiers licence pour ajouter facilement les informations nécessaires lors de la livraison de programmes PB (voir la documentation référence)
- Ajouté: Bool() est maintenant évaluée à la compilation si l'expression entière est constante
- Ajouté: Vérification du Debugger pour SortStructuredList() et SortList() pour s'assurer que la liste spécifiée est du type correct
- Ajouté: Exécutables Linux créés sur les nouvelles distributions doivent encore fonctionner sur les vieux linux.
- Ajouté: #PB_EventType_FirstCustomValue à utiliser avec PostEvent()
- Ajouté: CameraFollow(), ExamineWorldCollisions(), NextWorldCollision(), FirstWorldCollisionEntity(), SecondWorldCollisionEntity()
- Ajouté: WorldCollisionContact(), WorldCollisionNormal(), WorldCollisionAppliedImpulse()
- Ajouté: BuildMeshTangents(), MeshVertexTangent(), CopyTexture()
- Ajouté: Pitch(), Roll(), Yaw()
- Ajouté: Support de #PB_Gadget_RequiredSize avec GadgetWidth/Height()
- Ajouté: #PB_Entity_LinearSleeping, #PB_Entity_AngularSleeping, #PB_Entity_DeactivationTime, #PB_Entity_IsActive,
- Ajouté: #PB_Entity_AngularVelocityX/Y/Z, #PB_Entity_ScaleX/Y/Z, #PB_Entity_AngularVelocity, #PB_Entity_HasContactResponse avec Get/SetEntityAttribute()
- Optimisé: Routines de collisions de pixel de sprite beaucoup plus rapides avec DirectX
- Optimisé: Plus d'optimisations de type 'peephole' sur la sortie de l'assembleur x64
- Optimisé: Compilation plus rapide avec les gros programmes
- Optimisé: La construction de Serveurs Linux améliorée, maintenant utilisation d'un meilleur GCC qui produit un meilleur code.
- Changé: renommé ZoomSprite3D() en ZoomSprite()
- Changé: renommé TransformSprite3D() en TransformSprite()
- Changé: renommé RotateSprite3D() en RotateSprite()
- Changé: renommé Sprite3DQuality() en SpriteQuality()
- Changé: renommé Sprite3DBlending() en SpriteBlending()
- Changé: renommé la bibliothèque 'Module' en 'Music'
- Changé: renommé Frame3DGadget() en FrameGadget()
- Changé: renommé Frame3DGadget3D() en FrameGadget3D()
- Changé: renommé #PB_Shorcut_Prior en #PB_Shorcut_PageUp et #PB_Shorcut_Next en #PB_Shorcut_PageDown
- Changé: Constantes des plugins Packer renommé en #PB_PackerPlugin_XXX
- Changé: RayCollide() renvoie désormais l'#Entity rencontrée.
- Mise à jour: WebGadget() n'a plus besoin de ATL.dll sous Windows
- Mise à jour: zlib 1.2.8
- Mise à jour: pqlib (PostgreSQL) 9.2.4
- Mise à jour: ziplib 0.11.1
- Mise à jour: Structure SCNotification de scintilla
- Supprimé: Le support de l'ActiveX Mozilla pour le WebGadget(), version trop ancienne (2005) sous Windows
- Supprimé: Bibliothèque Sprite3D (fusionné avec la bibliothèque Sprite)
- Supprimé: Bibliothèque Palette (obsolète)
- Supprimé: RenderMovieFrame() et #PB_Movie_Rendered (obsolète)
- Supprimé: DisplayTranslucentSprite() -> remplacé par le paramètre 'Alpha' avec DisplayTransparentSprite()
- Supprimé: DisplaySolidSprite() -> remplacé par le paramètre 'Couleur' avec DisplayTransparentSprite()
- Supprimé: DisplayRGBFilter() -> peut être remplacé parun sprite zoomé avec une couleur
- Supprimé: DisplayShadowSprite() -> peut être remplacé par DisplayTransparentSprite() avec une couleur
- Supprimé: StartSpecialFX(), StopSpecialFX(), DisplayAlphaSprite(), ChangeAlphaIntensity(), UseBuffer()
- Supprimé: Sous-système Carbon d'OS X, il était trop vieux pour être utilisé avec les nouvelles bibliothèques
- Corrigé: De nombreux bugs
- Ajouté: Bibliothèque Runtime
- Ajouté: Bibliothèque Dialog
- Ajouté: Sous-système GTK3 pour Linux
- Ajouté: Sous-système DirectX11 pour Windows (ne supporte pas le moteur 3D pour l'instant)
- Ajouté: JoystickName(), JoystickZ()
- Ajouté: #PB_Relative optionel avec JoystickX/Y/Z() pour avoir des valeurs plus précises
- Ajouté: Numéro de pad facultatif avec JoystickX/Y/Z() pour utiliser les manettes plus complexes
- Ajouté: ZoomSprite() accepte maintenant #PB_Default dans Largeur/Hauteur pour rétablir la taille initiale du sprite
- Ajouté: Les paramêtres 'Couleur' et 'Intensité' avec DisplayTransparentSprite()
- Ajouté: ClipSprite() supporte #PB_Default comme paramètre individuel
- Ajouté: Option #PB_Sprite_PixelCollision pour CreateSprite(), LoadSprite() pour permettre la collision de pixels
- Ajouté: Support Zoom pour SpritePixelCollision() et SpriteCollision()
- Ajouté: Support OpenGL pour SpriteBlending() (Attention, il "wraps" le mode OpenGL, donc il peut se comporter différemment de DirectX)
- Ajouté: Support 32-bit pour SpriteOutput() avec DX et OpenGL
- Ajouté: #PB_EventType_Focus et #PB_EventType_LostFocus avec EditorGadget()
- Ajouté: #PB_EventType_RightClick avec ListViewGadget()
- Ajouté: #PB_EventType_Change avec PanelGadget() et DateGadget()
- Ajouté: #PB_Prototype et #PB_Module avec Defined()
- Ajouté: Toutes les fonctions Init() peuvent être appelées plus d'une fois sans problème (comme InitSound(), InitNetwork() etc.)
- Ajouté: #PB_FileSystem_Force avec DeleteFile()
- Ajouté: #PB_FileSystem_NoExtension avec GetFilePart()
- Ajouté: Paramètre de couleur d'zrrière-plan avec CreateImage()
- Ajouté: #PB_Entity_NbSubEntities avec GetEntityAttribute()
- Ajouté: MeshIndexCount(), SetRenderQueue(), FetchEntityMaterial(), GetMeshData(), SetMeshData()
- Ajouté: CPUName(), Un/BindEvent(), Un/BindGadgetEvent(), Un/BindMenuEvent()
- Ajouté: Emplacement précédent est affiché lors d'une double déclaration d'une structure, une interface , prototype ou d'une procédure.
- Ajouté: 2 fichiers licence pour ajouter facilement les informations nécessaires lors de la livraison de programmes PB (voir la documentation référence)
- Ajouté: Bool() est maintenant évaluée à la compilation si l'expression entière est constante
- Ajouté: Vérification du Debugger pour SortStructuredList() et SortList() pour s'assurer que la liste spécifiée est du type correct
- Ajouté: Exécutables Linux créés sur les nouvelles distributions doivent encore fonctionner sur les vieux linux.
- Ajouté: #PB_EventType_FirstCustomValue à utiliser avec PostEvent()
- Ajouté: CameraFollow(), ExamineWorldCollisions(), NextWorldCollision(), FirstWorldCollisionEntity(), SecondWorldCollisionEntity()
- Ajouté: WorldCollisionContact(), WorldCollisionNormal(), WorldCollisionAppliedImpulse()
- Ajouté: BuildMeshTangents(), MeshVertexTangent(), CopyTexture()
- Ajouté: Pitch(), Roll(), Yaw()
- Ajouté: Support de #PB_Gadget_RequiredSize avec GadgetWidth/Height()
- Ajouté: #PB_Entity_LinearSleeping, #PB_Entity_AngularSleeping, #PB_Entity_DeactivationTime, #PB_Entity_IsActive,
- Ajouté: #PB_Entity_AngularVelocityX/Y/Z, #PB_Entity_ScaleX/Y/Z, #PB_Entity_AngularVelocity, #PB_Entity_HasContactResponse avec Get/SetEntityAttribute()
- Optimisé: Routines de collisions de pixel de sprite beaucoup plus rapides avec DirectX
- Optimisé: Plus d'optimisations de type 'peephole' sur la sortie de l'assembleur x64
- Optimisé: Compilation plus rapide avec les gros programmes
- Optimisé: La construction de Serveurs Linux améliorée, maintenant utilisation d'un meilleur GCC qui produit un meilleur code.
- Changé: renommé ZoomSprite3D() en ZoomSprite()
- Changé: renommé TransformSprite3D() en TransformSprite()
- Changé: renommé RotateSprite3D() en RotateSprite()
- Changé: renommé Sprite3DQuality() en SpriteQuality()
- Changé: renommé Sprite3DBlending() en SpriteBlending()
- Changé: renommé la bibliothèque 'Module' en 'Music'
- Changé: renommé Frame3DGadget() en FrameGadget()
- Changé: renommé Frame3DGadget3D() en FrameGadget3D()
- Changé: renommé #PB_Shorcut_Prior en #PB_Shorcut_PageUp et #PB_Shorcut_Next en #PB_Shorcut_PageDown
- Changé: Constantes des plugins Packer renommé en #PB_PackerPlugin_XXX
- Changé: RayCollide() renvoie désormais l'#Entity rencontrée.
- Mise à jour: WebGadget() n'a plus besoin de ATL.dll sous Windows
- Mise à jour: zlib 1.2.8
- Mise à jour: pqlib (PostgreSQL) 9.2.4
- Mise à jour: ziplib 0.11.1
- Mise à jour: Structure SCNotification de scintilla
- Supprimé: Le support de l'ActiveX Mozilla pour le WebGadget(), version trop ancienne (2005) sous Windows
- Supprimé: Bibliothèque Sprite3D (fusionné avec la bibliothèque Sprite)
- Supprimé: Bibliothèque Palette (obsolète)
- Supprimé: RenderMovieFrame() et #PB_Movie_Rendered (obsolète)
- Supprimé: DisplayTranslucentSprite() -> remplacé par le paramètre 'Alpha' avec DisplayTransparentSprite()
- Supprimé: DisplaySolidSprite() -> remplacé par le paramètre 'Couleur' avec DisplayTransparentSprite()
- Supprimé: DisplayRGBFilter() -> peut être remplacé parun sprite zoomé avec une couleur
- Supprimé: DisplayShadowSprite() -> peut être remplacé par DisplayTransparentSprite() avec une couleur
- Supprimé: StartSpecialFX(), StopSpecialFX(), DisplayAlphaSprite(), ChangeAlphaIntensity(), UseBuffer()
- Supprimé: Sous-système Carbon d'OS X, il était trop vieux pour être utilisé avec les nouvelles bibliothèques
- Corrigé: De nombreux bugs
Et pour finir une petite description des principales nouveautés.
Module
Les modules sont un moyen facile d'isoler un morceau de code à partir d'un code principal, permettant ainsi la réutilisation d'un code et son partage sans risque de conflit de nom. Dans d'autres langages de programmation, les modules sont connus sous le nom : "espaces de noms". Un module doit avoir une section DeclareModule (qui est l'interface publique) et une section Module associée (qui est son implémentation). Seuls les éléments déclarés dans la section DeclareModule seront accessibles depuis l'extérieur du module. Tout le code de la section Module sera maintenu privé à ce module.
Les éléments du code principal, comme les procédures, les variables, etc, ne seront pas accessibles à l'intérieur du module, même s'ils sont déclarés en global.
Un module peut être considéré comme une boîte noire, une feuille de code vide où les noms des éléments ne peuvent pas entrer en conflit avec les éléments de même nom du code principal. Il est plus facile d'écrire du code, comme par exemple, on peut utiliser des noms simples qui peuvent être réutilisées au sein de chaque module sans risque de conflit.
Les éléments acceptés dans la section DeclareModule peuvent être les suivants: procédures (seule la déclaration des procédures est autorisée), structures, macros, variables, constantes, énumérations, tableaux, listes, maps et les étiquettes (labels).
Pour accéder à un élément d'un module depuis l'extérieur, le nom du module doit être précisé suivie du séparateur '::'. En spécifiant explicitement le nom du module, l'élément est disponible partout dans le code source, même dans un autre module. Tous les éléments de la section DeclareModule peuvent être automatiquement importés dans un autre module ou dans le code principal à l'aide de UseModule. Dans ce cas, si un nom de module est en conflit, les éléments du module ne seront pas importés et une erreur du compilateur sera levée. UnuseModule retire les éléments du module. UseModule n'est pas obligatoire pour accéder à un élément d'un module, mais le nom du module doit être spécifié.
Pour partager des informations entre les modules, un module commun peut être créé et utilisé par tous les modules qui en ont besoin. C'est la façon normale pour disposer de données globales disponibles pour tous les modules.
Toutes les commandes PureBasic, les structures et les constantes sont des éléments par défaut disponibles dans les modules. Par conséquent les éléments de modules ne peuvent pas avoir le même nom que les commandes internes de PureBasic, les structures ou les constantes.
Tout les codes à l'intérieur des sections DeclareModule et des sections Module sont exécutés comme n'importe quel autres codes lorsque le flux du programme atteint le module.
Note: Les modules ne sont pas obligatoires dans PureBasic mais sont recommandés lors de la réalisation de grands projets. Ils aident à la maintenance du code, même si c'est légèrement plus verbeux. Avoir une section DeclareModule rend le module plus ou moins auto-documenté pour une réutilisation ou un partage.
Dialog
La bibliothèque 'dialogue' permet de créer facilement une interface utilisateur complexe (GUI) basée sur du code XML. C'est une autre façon de créer des fenêtres, des boîtes de dialogue, etc. Elle dispose de l'agencement et de la réorganisation automatique des gadgets (layout), ce qui est très utile lors de la création d'interface qui doit fonctionner sur différents systèmes d'exploitation ou qui utilise différentes tailles de police simultanément.
Le code XML peut provenir d'un fichier ou bien être créé à la volée, en mémoire, en utilisant la bibliothèque XML.
RunTime
Pour les programmeurs chevronnés. Runtime est utilisé pour créer une liste dite "runtime" ("en cours d'exécution" pour avoir accès aux objets du programme en cours, comme les variables, les constantes et les procédures. Une fois compilé, un programme n'a plus d'étiquette (labels) ni de variable, ni de constantes ou de noms de procédure car tout est converti en code binaire. Runtime force le compilateur à ajouter une référence supplémentaire à chaque objet qui sera alors disponible à travers la bibliothèque Runtime. Les objets peuvent être manipulés à l'aide de leur référence qui est une chaîne de caractère, même lorsque le programme est compilé.
Pour illustrer l'utilisation d'un Runtime, jetez un coup d'oeil à la bibliothèque Dialog qui l'utilise pour accéder aux procédures d'événement associées à un gadget. Ici, le nom de la procédure à utiliser par le gestionnaire d'événements est spécifié dans le fichier XML (qui est un fichier texte), puis la bibliothèque Dialog utilise la fonction GetRuntimeInteger() pour retrouver l'adresse de la procédure pendant l'exécution du programme. Il n'est pas nécessaire de recompiler le programme pour la changer.
Une autre utilisation serait d'ajouter un petit langage de script en temps réel pour le programme, ce qui permet de modifier facilement les variables exposées, en utilisant les valeurs des constantes à l'exécution. Alors que cela pourrait être fait manuellement par la construction d'une Map d'objets, le mot clé Runtime permet de le faire d'une manière standard et unifiée.