JPSprite

JPSprite

Gestion des atlas, sprites et sprites animés
Version : 4.0
Prix :Lite / $50
Etat : Épuisé

Liste des modifications

v4.0

  • Now compatible with ShiVa 2.0.
  • Plugin API compiled for Mac and Linux in addition to Windows : it will provide API completion in the Script module in ShiVa Editor for each of these operating systems.
  • Now uses a user token instead of an email to activate

v3.3

  • New function JPSprite.computeAnimation ( ), allowing to detect animations having sprites in different atlasses.
  • Animations are not computed in the JPSprite.setupAtlas function anymore.
  • When kResizeModeNone is set, the component "aspect ratio invariant" property is not updated anymore.

v3.2

  • Half of the features of the pack are now available for free! This is everything that is not related to sprites animation, such as atlas setup, static sprites loading etc. The paid version adds support for sprite animation engine and enables the optimisation features.

A tutorial about JPSprite and Texture packer is now available.

A new sample is available for JPSprite. It shows the core features of JPSprite and its optimisation system. JPSpriteSample

New function:

  • tIndexesToUpdate, nUpdateCoef = JPSprite.helpMeUpdateMySprites ( nSpriteCount )

v3.1

  • Fixed a few bugs related to the previous major update related to sprites scale
  • When not set, default scale option is now always JPSprite.kResizeModeFull

v3.0

New functions, added scale support for objects and additional scale options for both objects and HUD components:

  • JPSprite.setObjectScale ( hObject, nSubset, nEffectMap, nScale )
  • nScale = JPSprite.getObjectScale ( hObject, nSubset, nEffectMap )
  • nScale = JPSprite.getObjectScaleOverall ( hObject, nSubset, nEffectMap )
  • JPSprite.setGlobalComponentsScale ( nScale )
  • JPSprite.setGlobalObjectsScale ( nScale )
  • nScale = JPSprite.getGlobalComponentsScale ( )
  • nScale = JPSprite.getGlobalObjectsScale ( )

New constants:

  • JPSprite.kResizeModeNone
  • JPSprite.kResizeModeFull
  • JPSprite.kResizeModeRatioBasedOnHeight
  • JPSprite.kResizeModeRatioBasedOnWidth

Fixes:

  • Fixed an issue with bFlipX for function JPSprite.setObjectSprite ( hObject, sSprite, bFlipX, bFlipY, kResizeMode )

v2.3

  • Fixed an issue on Android with the function JPSprite.setObjectSprite

v2.2

  • Optimized for ShiVa 1.9.2

v2.1

  • Fixed a bug with animation (the last frame was not displayed)

v2.0

  • The following functions where not referenced into the extension plugin: JPSprite.setDefaultFrameRate ( nFrameRate ) JPSprite.setObjectAnimationFrame ( hObject, nSubset, nEffectMap, nFrame, bAddRandomDelay )

  • You can now define a delegate for a hud component or object animation. It currently allows you to know when an animation has finished. See API page for more details.

  • Fixed a bug with JPSprite.getComponentScale and JPSprite.getObjectScale, were not returning the right value.

  • The functions getComponentScale, getComponentAnimationSpeed, and getObjectAnimationSpeed now return the value specific to the object/component. To get the real values (including global speed/scale, components specific speed/scale, etc), new functions have been created: nSpeedCoef = JPSprite.getComponentAnimationSpeedOverall ( hComponent ) nScale = JPSprite.getComponentScaleOverall ( hComponent ) nSpeedCoef = JPSprite.getObjectAnimationSpeedOverall ( hObject, nSubset, nEffectMap )

  • Fixed some wrong error messages

v1.5

  • Internal modifications to prevent eventual conflicts between packs.

v1.4

  • Added the missing function JPSprite.setObjectAnimationSpeed ( hObject, nSubset, nEffectMap, nSpeedCoef )
  • There was a compatibility issue with the latest betas of ShiVa, animated sprites on objects were sometimes not displayed. A workaround has been integrated in the pack.

v1.3

  • Fixed a random issue blocking the activation of the pack

v1.2

  • New nOptScale parameter for the JPSprite.setupAtlas function
  • New function: JPSprite.setAtlasScale ( sAtlasName, nScale )

v1.1

  • Error messages now are easier to understand.

API

--JPSprite API JPSprite.activate ( sUserToken, sActivationKey ) --Atlases and sprites JPSprite.setAtlasScale ( sAtlasName, nScale ) JPSprite.setupAtlas ( sAtlasName, nOptScale ) sTexture, nUVX, nUVY, nUVSX, nUVSY = JPSprite.getSpriteProperties ( sSprite, bFlipX, bFlipY ) nRatio = JPSprite.getSpriteRatio ( sSprite ) --General - FrameRate nFrameRate = JPSprite.getDefaultFrameRate ( ) JPSprite.setDefaultFrameRate ( nFrameRate ) --General - Speed nSpeedCoef = JPSprite.getGlobalSpeed ( ) nSpeedCoef = JPSprite.getGlobalComponentsSpeed ( ) nSpeedCoef = JPSprite.getGlobalObjectsSpeed ( ) JPSprite.setGlobalSpeed ( nSpeedCoef ) JPSprite.setGlobalComponentsSpeed ( nSpeedCoef ) JPSprite.setGlobalObjectsSpeed ( nSpeedCoef ) --General - Scale nScale = JPSprite.getGlobalScale ( ) nScale = JPSprite.getGlobalComponentsScale ( ) nScale = JPSprite.getGlobalObjectsScale ( ) JPSprite.setGlobalScale ( nScale ) JPSprite.setGlobalComponentsScale ( nScale ) JPSprite.setGlobalObjectsScale ( nScale ) --Animations JPSprite.computeAnimation ( ) nDuration = JPSprite.getAnimationDuration ( sAnimation ) nCount = JPSprite.getAnimationFrameCount ( sAnimation ) nFrameRate = JPSprite.getAnimationFrameRate ( sAnimation ) JPSprite.setAnimationFrameRate ( sAnimation, nFrameRate ) --Delegates for components --Events are: --onComponentSpriteAnimationEnded ( sComponent, sAnimation ) JPSprite.setComponentDelegate ( hComponent, hObjectHandle_OR_nUserID_Delegate, sOptAIModel ) --Delegates for objects --Events are: --onObjectSpriteAnimationEnded ( hObject, sAnimation, nSubset, nEffectMap ) JPSprite.setObjectDelegate ( hObject, hObjectHandle_OR_nUserID_Delegate, sOptAIModel ) --HUD components nDuration = JPSprite.getComponentAnimationDuration ( hComponent ) nFrame = JPSprite.getComponentAnimationFrame ( hComponent ) nFrameRate = JPSprite.getComponentAnimationFrameRate ( hComponent ) nSpeedCoef = JPSprite.getComponentAnimationSpeed ( hComponent ) nSpeedCoef = JPSprite.getComponentAnimationSpeedOverall ( hComponent ) nScale = JPSprite.getComponentScale ( hComponent ) nScale = JPSprite.getComponentScaleOverall ( hComponent ) bEnded = JPSprite.isComponentAnimationEnded ( hComponent ) bPaused = JPSprite.isComponentAnimationPaused ( hComponent ) JPSprite.setComponentAnimation ( hComponent, sAnimation, bOptLoop, bOptFlipX, bOptFlipY, bOptAddRandomDelay, kResizeMode ) JPSprite.setComponentAnimationFrame ( hComponent, nFrame, bOptAddRandomDelay ) JPSprite.setComponentAnimationPaused ( hComponent, bPaused ) JPSprite.setComponentAnimationSpeed ( hComponent, nSpeedCoef ) JPSprite.setComponentScale ( hComponent, nScale ) JPSprite.setComponentSprite ( hComponent, sSprite, bOptFlipX, bOptFlipY, kResizeMode ) JPSprite.stopComponentAnimation ( hComponent ) --Objects, Simple ( Subset used = 0, effect map used = 0 ) nDuration = JPSprite.getObjectAnimationDuration ( hObject ) nFrame = JPSprite.getObjectAnimationFrame ( hObject ) nFrameRate = JPSprite.getObjectAnimationFrameRate ( hObject ) nSpeedCoef = JPSprite.getObjectAnimationSpeed ( hObject ) nSpeedCoef = JPSprite.getObjectAnimationSpeedOverall ( hObject ) nScale = JPSprite.getObjectScale ( hObject ) nScale = JPSprite.getObjectScaleOverall ( hObject ) bEnded = JPSprite.isObjectAnimationEnded ( hObject ) bPaused = JPSprite.isObjectAnimationPaused ( hObject ) JPSprite.setObjectAnimation ( hObject, sAnimation, bOptLoop, bOptFlipX, bOptFlipY, bOptAddRandomDelay, kResizeMode ) JPSprite.setObjectAnimationFrame ( hObject, nFrame, bOptAddRandomDelay ) JPSprite.setObjectAnimationPaused ( hObject, bPaused ) JPSprite.setObjectScale ( hObject, nScale ) JPSprite.setObjectSprite ( hObject, sSprite, bOptFlipX, bOptFlipY, kResizeMode ) JPSprite.stopObjectAnimation ( hObject ) --Objects, Advanced ( define the subset and effect map ) nDuration = JPSprite.getObjectAnimationDuration ( hObject, nSubset, nEffectMap ) nFrame = JPSprite.getObjectAnimationFrame ( hObject, nSubset, nEffectMap ) nFrameRate = JPSprite.getObjectAnimationFrameRate ( hObject, nSubset, nEffectMap ) nSpeedCoef = JPSprite.getObjectAnimationSpeed ( hObject, nSubset, nEffectMap ) nSpeedCoef = JPSprite.getObjectAnimationSpeedOverall ( hObject, nSubset, nEffectMap ) nScale = JPSprite.getObjectScale ( hObject, nSubset, nEffectMap ) nScale = JPSprite.getObjectScaleOverall ( hObject, nSubset, nEffectMap ) bEnded = JPSprite.isObjectAnimationEnded ( hObject, nSubset, nEffectMap ) bPaused = JPSprite.isObjectAnimationPaused ( hObject, nSubset, nEffectMap ) JPSprite.setObjectAnimation ( hObject, nSubset, nEffectMap, sAnimation, bLoop, bFlipX, bFlipY, bAddRandomDelay ) JPSprite.setObjectAnimationFrame ( hObject, nSubset, nEffectMap, nFrame, bAddRandomDelay ) JPSprite.setObjectAnimationPaused ( hObject, nSubset, nEffectMap, bPaused ) JPSprite.setObjectAnimationSpeed ( hObject, nSubset, nEffectMap, nSpeedCoef ) JPSprite.setObjectScale ( hObject, nSubset, nEffectMap, nScale ) JPSprite.setObjectSprite ( hObject, nSubset, nEffectMap, sSprite, bFlipX, bFlipY ) JPSprite.stopObjectAnimation ( hObject, nSubset, nEffectMap ) --Optimization system JPSprite.setOptimizationSystemEnabled ( bEnabled ) JPSprite.setOptimizationSystemParameters ( nOptMaxLevel, nOptStartLevel, nOptTimeBetweenLevelChange, nOptFpsRangeMin, nOptFpsRangeMax, bOptTypeExp ) tIndexesToUpdate, nUpdateCoef = JPSprite.helpMeUpdateMySprites ( nSpriteCount ) --Constants JPSprite.kResizeModeNone JPSprite.kResizeModeFull JPSprite.kResizeModeRatioBasedOnHeight JPSprite.kResizeModeRatioBasedOnWidth

Description

JPSprite est un pack de gestion d'atlas, de sprites et d'animations.

Tous les meilleurs jeux utilisent un système d'atlas car c'est la meilleure solution pour optimiser votre jeu : des performances accrues car les sprites utilisent la même texture (moins de draw calls) et une consommation mémoire réduite (beaucoup d'espace perdu si chaque sprite avait sa propre texture).

JPSprite est basé sur TexturePackerGUI qui est un logiciel permettant de créer des atlas, qui génère une texture contenant les sprites ainsi qu'un fichier xml de description des UV pour chacun d'entre eux.

Une fois que votre atlas et son fichier xml sont générés par TexturePackerGUI, importez et référencez les dans votre jeu ShiVa.

Donnez à JPSprite un composant HUD et le nom d'un sprite et il se débrouille pour appliquer la bonne texture à votre composant ainsi que les coordonnées d'UV qui correspondent.

Il intègre également un système d'animation de sprites. Si votre atlas contient une série de sprites finissant par des index consécutifs (commençant à 0), JPSprite va les détecter et va vous permettre d'animer vos sprites. Il dispose d'un grand nombre d'options, comme par exemple la possibilité de choisir le frame rate de l'animation, de pouvoir en changer sa taille, etc.

JPSprite est également équipé d'un système d'optimisation redoutable. Si vous l'activez, ce système va adapter les performances de JPSprite en fonction de l'état de votre jeu. Si votre jeu subit une chute de framerate à un moment ou à un autre, JPSprite va alors réduire sa vitesse de calcul afin de maximiser les ressources disponibles pour le reste de votre jeu, sans que l'animation des sprites n'en soit visiblement impacté.

--Load the atlas. JPSprite will detect the sprites and animations JPSprite.setupAtlas ( "Avatar" ) --Set the animation named "Talking" to the HUD component, with loop mode enabled JPSprite.setComponentAnimation ( "ScreenRoot.Avatar", "Talking", true ) --If needed, enable the optimization system JPSprite.setOptimizationSystemEnabled ( true )

A titre d'exemple, le jeu Babel Rising : Cataclysme qui peut être trouvé dans mon portfolio utilises un système de sprites et d'optimisation similaire, et le jeu peut afficher plusieurs centaines de sprites animés à la fois, tout en gardant un bon framerate.

Que contient la version lite ? Elle contient tout ce qui n'est pas lié aux animations :

  • Chargement d'atlas.
  • Affichage de sprites statics sur des composants HUD et sur les materials d'objets.

Que contient la version payante ? Elle ajoute le support des sprites animés et contient un système d'optimisation très performant et très intelligent.

TexturePacker fourni un profil nommé 'ShiVa3D (+ JPSprite extension)' qui pré-rempli toutes les options pour vous. Tout ce que vous avez à faire est de glisser vos sprites dans l'interface de TexturePacker.

Voici les paramètres que je recommande pour générer vos atlas avec TexturePackerGUI :

  • Data Format: Generic XML
  • Size constraints: POT (Power of 2)
  • Force squared: enabled
  • Allow rotation: disabled
  • Trim sprite names: enabled

Ici se trouve un tutoriel complet sur comment utiliser JPSprite et TexturePacker.