import Texture from "./Texture"; import SubTexture from "./SubTexture"; import Rectangle from "openfl/geom/Rectangle"; import Vector from "openfl/Vector"; declare namespace starling.textures { /** * A texture atlas is a collection of many smaller textures in one big image. This class * * is used to access textures from such an atlas. * * * *

Using a texture atlas for your textures solves two problems:

* * * * * * * *

By using a texture atlas, you avoid both texture switches and the power-of-two * * limitation. All textures are within one big "super-texture", and Starling takes care that * * the correct part of this texture is displayed.

* * * *

There are several ways to create a texture atlas. One is to use the atlas generator * * script that is bundled with Starling's sibling, the * * Sparrow framework. It was only tested in Mac OS X, though. A great multi-platform * * alternative is the commercial tool * * Texture Packer.

* * * *

Whatever tool you use, Starling expects the following file format:

* * * * * * <TextureAtlas imagePath='atlas.png'> * * <SubTexture name='texture_1' x='0' y='0' width='50' height='50'/> * * <SubTexture name='texture_2' x='50' y='0' width='20' height='30'/> * * </TextureAtlas> * * * * * * Texture Frame * * * *

If your images have transparent areas at their edges, you can make use of the * * frame property of the Texture class. Trim the texture by removing the * * transparent edges and specify the original texture size like this:

* * * * * * <SubTexture name='trimmed' x='0' y='0' height='10' width='10' * * frameX='-10' frameY='-10' frameWidth='30' frameHeight='30'/> * * * * * * Texture Rotation * * * *

Some atlas generators can optionally rotate individual textures to optimize the texture * * distribution. This is supported via the boolean attribute "rotated". If it is set to * * true for a certain subtexture, this means that the texture on the atlas * * has been rotated by 90 degrees, clockwise. Starling will undo that rotation by rotating * * it counter-clockwise.

* * * *

In this case, the positional coordinates (x, y, width, height) * * are expected to point at the subtexture as it is present on the atlas (in its rotated * * form), while the "frame" properties must describe the texture in its upright form.

* * * */ export class TextureAtlas { /** * Create a texture atlas from a texture and atlas data. The second argument typically * * points to an XML file. */ constructor(texture: Texture, data?: any, xmlScale?: number); xmlScale: number; /** * Disposes the atlas texture. */ dispose(): void; /** * Retrieves a SubTexture by name. Returns null if it is not found. */ getTexture(name: string): Texture; /** * Returns all textures that start with a certain string, sorted alphabetically * * (especially useful for "MovieClip"). */ getTextures(prefix?: string, result?: Vector): Vector; /** * Returns all texture names that start with a certain string, sorted alphabetically. */ getNames(prefix?: string, result?: Vector): Vector; /** * Returns the region rectangle associated with a specific name, or null * * if no region with that name has been registered. */ getRegion(name: string): Rectangle; /** * Returns the frame rectangle of a specific region, or null if that region * * has no frame. */ getFrame(name: string): Rectangle; /** * If true, the specified region in the atlas is rotated by 90 degrees (clockwise). The * * SubTexture is thus rotated counter-clockwise to cancel out that transformation. */ getRotation(name: string): boolean; /** * Adds a named region for a SubTexture (described by rectangle with coordinates in * * points) with an optional frame. */ addRegion(name: string, region: Rectangle, frame?: Rectangle, rotated?: boolean): void; /** * Adds a named region for an instance of SubTexture or an instance of its sub-classes. */ addSubTexture(name: string, subTexture: SubTexture): void; /** * Removes a region with a certain name. */ removeRegion(name: string): void; /** * Removes all regions with names that start with the given prefix. * * If no arguments are given, all regions will be removed. */ removeRegions(prefix?: string): void; /** * The base texture that makes up the atlas. */ get texture(): Texture; } } export default starling.textures.TextureAtlas;