SKAToolKit 是 Sprite Kit Alliance 制造的一组免费工具,用于与 Apples Sprite Kit 框架一起使用。其中最大的特点是 SKATiledMap,这是使用免费 Tiled Map Editor(http://www.mapeditor.org/)创建地图的一个简单解决方案。
Sprited Kit Alliance 欣然免费提供 SKAToolKit,没有任何保证或保证(有关更多信息,请参阅下面的许可证)。如果缺少功能或希望添加请通过电子邮件联系 Skyler:[email protected]。
libz.dylib
这是一个表示 Tiled 中创建的地图的精灵节点。目前 SKATiledMap 只支持 JSON 格式。将 JSON 文件和用于拼贴的任何图片添加到您的项目中。
在使用 Tiled 创建您的地图时,请务必使用 1x 资产。准备好将地图引入您的应用程序时,为最佳结果提供 1x、@2x 和 @3x 资产。请注意,SpriteKit 和纹理大小有局限性。确保您的 1x 资产不超过 675 x 675(当为 3x 时,它们会在 2048 的限制下为 2025)。就像在 Tiled 中一样,您只需要导入用于创建地图的图片。为了最佳结果,请将这些图片放入资产管理目录中。不需要 plist 文件或参考文件夹。
Tiled 支持收藏拼贴集。请确保您使用 1x 图形设计地图。您可以提供包含与您创建拼贴地图使用的相同名称的 1x 和 2x .atlas 或 .atlasc 文件夹。请记住将 .atlas 和 .atlasc 文件夹添加到 Xcode 作为参考文件夹。目前不支持在图集文件夹中使用 @3x。
TMX支持处于早期阶段,但现在已支持。请确保您包含了您的.tmx文件,并找出您用于地图的所有图像,并导入这些图像以及这些图像的@2x和@3x版本(如果使用普通瓦片集)或创建图集文件夹(如果使用集合瓦片集)。有关更多信息,请参阅分辨率支持。SKATiledMap在查找JSON文件之前会查找TMX文件。如果缺少功能,请联系[email protected]
SKATiledMap *map = [[SKATiledMap alloc]initWithMapName:@"yourMapName"]; //name of your TMX file
SKATileMap支持以JSON格式导出的Tiled地图。在Tiled中导出您的地图作为JSON文件,并将其导入到您的应用程序中。请确保您找到了您用于地图的所有图像,并导入这些图像以及这些图像的@2x和@3x版本(如果使用普通瓦片集)或创建图集文件夹(如果使用集合瓦片集)。有关更多信息,请参阅分辨率支持。
创建地图只需调用此方法即可。
SKATiledMap *map = [[SKATiledMap alloc]initWithMapName:@"yourMapName"]; //name of your JSON file
//Use this to convert a map CGPoint on your map into an x y index on your map. This can be useful for looking at tiles around a player or doing manual collision detection.
-(CGPoint)indexForPoint:(CGPoint)point;
//This methods will return SKASprites around a given point or index on the map.
-(NSArray *)tilesAroundPoint:(CGPoint)point inLayer:(NSInteger)layer;
-(NSArray *)tilesAroundIndex:(CGPoint)point inLayer:(NSInteger)layer;
//This method can be used to to get a specific tile on a specific layer
-(SKASprite *)spriteOnLayer:(NSInteger)layerNumber indexX:(NSInteger)x indexY:(NSInteger)y;
//This method is used to get custom named objects that you may have made in Tiled for spawning enemies, player start positions, or any other custom game logic you made a object for.
-(NSArray *)objectsOnLayer:(NSInteger)layerNumber withName:(NSString *)name;
SKATiledMap现在具有裁剪功能。当需要更好的性能时,请使用此功能处理大地图。该方法已针对在更新循环中调用进行优化,并将每个精灵设置在指定范围之外为隐藏。
CGPoint playerIndex = [self.map indexForPoint:self.player.position];
[self.map cullAroundIndexX:playerIndex.x indexY:playerIndex.y columnWidth:5 rowHeight:5]; //for best resutls set a little wider/higher than your viewing area
所有图层都可用。您可以使用它们做很多事情。例如,您可以为可能具有的灯精灵图层添加闪烁效果。
SKAction *fadeOut = [SKAction fadeAlphaTo:0 duration:.5];
SKAction *fadeIn = [SKAction fadeAlphaTo:1 duration:.5];
SKAction *repeat = [SKAction repeatActionForever:[SKAction sequence:@[fadeOut, fadeIn]]];
SKASpriteLayer *layer = self.map.spriteLayers[2];
[layer runAction:repeat];
SKATiledMap具有自动跟随功能。如果您想在地图上定位并保持玩家在屏幕上,这是一个很棒的功能。要使用此功能,请将autoFollowNode设置为任何SKNode子类,并在场景更新方法中调用地图的更新方法。
self.player = [SKATestPlayer spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(40, 80)];
self.player.zPosition = 20;
self.player.position = CGPointMake(400, 400);
[self.map addChild:self.player];
self.map.autoFollowNode = self.player;
-(void)update:(NSTimeInterval)currentTime
{
[self.map update];
}
在创建Tiled地图时,如果SKATiledMap在瓦片或对象上找到这些属性,则会创建物理体。
SKATiledMap针对ignoresSiblingOrder
进行了优化。请确保将您的SKView设置为skView.ignoresSiblingOrder = YES;
Z位置如下。第一层瓦片将在z位置0,第二层将在z位置1。SKATiledMap还最大限度地减少了绘制调用。您的绘制调用次数将与您的精灵地图数量相同。
SKATestHud和SKATestPlayer用于快速测试地图,而无需创建任何自定义代码。SKATestHud的默认z位置是100。
示例
self.player = [SKATestPlayer spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(40, 80)];
self.player.zPosition = 20;
self.player.position = CGPointMake(400, 400);
[self.map addChild:self.player];
SKATestHud *testHud = [SKATestHud hudWithScene:self.scene withPlayer:self.player];
[self addChild:testHud];
SKAButtonSprite是一个简单的精灵按钮。它可以使用任何SKSpriteNode的初始化方法或构造方法创建。IMPORTANT您必须将userInteractionEnabled设置为YES;
可选代理方法
-(void)buttonSpritePressed:(SKAButtonSprite *)buttonSprite;
-(void)buttonSpriteDown:(SKAButtonSprite *)buttonSprite;
-(void)buttonSpriteUp:(SKAButtonSprite *)buttonSprite;
示例
self.buttonLeft = [SKAButtonSprite spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(50, 50)];
self.buttonLeft.position = CGPointMake(self.buttonLeft.size.width/2+padding, self.buttonLeft.size.height/2+padding);
self.buttonLeft.name = @"buttonLeft";
self.buttonLeft.userInteractionEnabled = YES;
self.buttonLeft.delegate = self;
[self addChild:self.buttonLeft];
SKAMiniMap能够为传入的任意节点创建一个小型地图。传入的节点必须属于包含视图的场景。
SKACroppedMiniMap与SKAMiniMap相似,但您可以选择一个视口大小,而不是一次显示整个地图。
SKACroppedMiniMap具有自动跟随功能。将autoFollowNode设置为创建SKACroppedMiniMap使用的地图的子节点。
SKALabelNode实现了带有多行字符串和阴影支持的SpriteKit的SKLabelNode
,并继承自SKSpriteNode
。您将期望看到SKLabelNode
的功能,以及SKSpriteNode
属性和方法。
关于SKALabelNode的一些重要点:
shadow
属性的NSShadow
类。lineSpacing
属性。textAlignmentMode
属性,它接受类NSTextAlignment
。Sprite Kit的verticalAlignmentMode
和horizontalAlignmentMode
属性只会改变锚点,而不会改变文本对齐方式本身。drawLabel
方法。示例
SKALabelNode *multiLineLabelNode = [SKALabelNode labelNodeWithText:@"Hello\nI was drawn by SpriteKit!"];
multiLineLabelNode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[multiLineLabelNode drawLabel];
[self addChild:multiLineLabelNode];
如果您希望与SKA取得联系,请通过电子邮箱[email protected]与我们联系。
版权(c)2015 Sprite Kit Alliance
特此授予任何获得此软件及其相关文档副本(“软件”)的个人在本软件上进行不受限制的处理权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许软件接收方将其用于上述目的,前提是以下条件:
必须把上述版权声明和本许可协议包含在软件的副本或实质性部分之中。
软件按现状提供,不提供任何形式的保证,无论是明示的、暗示的还是法律的,包括但不限于适销性、适用于特定用途和侵权性保证。在任何情况下,作者或版权所有者对于任何因合同、侵权或任何其他行为所产生的损害赔偿或任何其他责任,无论源于、因之或与此软件或其使用或其他交易有关,均不承担责任。