The following “sprite sheet” image shows a complete cycle of a man running. When these frames are shown sequentially over a period of time, they appear as an animated image. ![]() The frame rate is how often the frame is changed per second. The example sprite sheet’s complete running cycle has 30 frames (6 columns and 5 rows). If the character is to complete a cycle in one second, 30 frames must be shown per second, so the frame rate is 30 FPS. The time per frame (known as the frame time or interval time) is the reciprocal of the FPS, in this case 0.033 seconds per frame.Īn animation is a very simple state machine. The running man has 30 states as per the sprite sheet. The numbered frames represent the states a running man goes through, only one at a time. The current state is determined by the amount of time since the animation began. If less than 0.033 seconds have elapsed, we are in State 1, so the first sprite is drawn. If we are between 0.033 and 0.067 seconds, then we are in State 2, and so on. If the animation is looping, it returns to the first frame after all frames have been shown. LibGDX’s Animation (code) class can be used to easily manage an animation. It is constructed with a list of images and the frame interval time. During playback, its getKeyFrame method takes an elapsed time parameter and returns the appropriate image for that time.Īnimation has a generic type parameter for the type of class that represents the image. The type would typically be a TextureRegion or PolygonRegion, but any renderable object can be used. The type is declared by specifying the animation type in the Animation declaration, for example Animation myAnimation = new Animation(/*.*/). Note that it would usually be inadvisable to use the Sprite class to represent frames of an animation, because the Sprite class contains positional data that would not carry from frame to frame. LibGDX’s TextureAtlas (code) class is typically used for combining many separate TextureRegions into a smaller set of Textures to reduce expensive draw calls. TexturePacker and TextureAtlas provide a convenient way to generate animations. TexturePacker will automatically use these numbers as frame numbers (so long as the packing parameter useIndexes is left true).Īfter the TextureAtlas is loaded, a complete array of frames can be acquired at once and passed into the Animation constructor: All the source images of an animation should be named with an underscore and frame number at the end, such as running_0.png, running_1.png, running_2.png, etc. Public class Animator implements ApplicationListener Ĭreating an animation is extremely simple by using the following constructor. ![]() Method signatureĪnimation (float frameDuration, TextureRegion. #LIBGDX TEXTUREPACKER GIVING TWO IMAGES HOW TO#.Be sure to add this file to the assetsdata folder in the android project before continuing. OpenGL in general and LibGDX in specific, require your image files to be in power of two dimensions. One important thing to note, the above graphic is 512×256. ![]() We are going to display this sprite ( created in this tutorial): ![]() Let’s start with about the simplest project that we can. This is the part people always find the most fun, the actual act of putting graphics up on screen.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |