SKAToolKit 1.0.5

SKAToolKit 1.0.5

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2016年2月

Ben KaneSkyler Lauren维护。



  • 作者
  • Norman Croan, Ben Kane, Max Kargin, Skyler Lauren, Sid Mani 和 Marc Vandehey

SKAToolKit 是 Sprite Kit Alliance 制造的一组免费工具,用于与 Apples Sprite Kit 框架一起使用。其中最大的特点是 SKATiledMap,这是使用免费 Tiled Map Editor(http://www.mapeditor.org/)创建地图的一个简单解决方案。

Sprited Kit Alliance 欣然免费提供 SKAToolKit,没有任何保证或保证(有关更多信息,请参阅下面的许可证)。如果缺少功能或希望添加请通过电子邮件联系 Skyler:[email protected]

SKAToolKit 安装说明

  • 将 SKAToolKit 文件夹中的所有文件复制到您的项目中
  • 导入 SKATiledMap 或您想要导入的任何 SKA 文件
  • 在项目文件“链接框架和库”部分链接到 libz.dylib

SKATiledMap

这是一个表示 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支持处于早期阶段,但现在已支持。请确保您包含了您的.tmx文件,并找出您用于地图的所有图像,并导入这些图像以及这些图像的@2x和@3x版本(如果使用普通瓦片集)或创建图集文件夹(如果使用集合瓦片集)。有关更多信息,请参阅分辨率支持。SKATiledMap在查找JSON文件之前会查找TMX文件。如果缺少功能,请联系[email protected]

SKATiledMap *map = [[SKATiledMap alloc]initWithMapName:@"yourMapName"]; //name of your TMX file

JSON

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

SKAMiniMap Example

Culling Performance

使用图层

所有图层都可用。您可以使用它们做很多事情。例如,您可以为可能具有的灯精灵图层添加闪烁效果。

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自动跟随功能

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在瓦片或对象上找到这些属性,则会创建物理体。

  • SKACollisionType : SKACollisionTypeRect

Z位置和优化

SKATiledMap针对ignoresSiblingOrder进行了优化。请确保将您的SKView设置为skView.ignoresSiblingOrder = YES;Z位置如下。第一层瓦片将在z位置0,第二层将在z位置1。SKATiledMap还最大限度地减少了绘制调用。您的绘制调用次数将与您的精灵地图数量相同。

SKATestHud和SKATestPlayer

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

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

SKAMiniMap能够为传入的任意节点创建一个小型地图。传入的节点必须属于包含视图的场景。

SKAMiniMap Example

SKACroppedMiniMap

SKACroppedMiniMap与SKAMiniMap相似,但您可以选择一个视口大小,而不是一次显示整个地图。

SKACroppedMiniMap AutoFollowFeature

SKACroppedMiniMap具有自动跟随功能。将autoFollowNode设置为创建SKACroppedMiniMap使用的地图的子节点。

SKACroppedMiniMap Example

SKALabelNode

SKALabelNode实现了带有多行字符串和阴影支持的SpriteKit的SKLabelNode,并继承自SKSpriteNode。您将期望看到SKLabelNode的功能,以及SKSpriteNode属性和方法。
关于SKALabelNode的一些重要点:

  • 使用带有shadow属性的NSShadow类。
  • 在使用多行字符串时,如果需要改变行间距,请指定lineSpacing属性。
  • 要改变文本对齐方式,请指定textAlignmentMode属性,它接受类NSTextAlignment。Sprite Kit的verticalAlignmentModehorizontalAlignmentMode属性只会改变锚点,而不会改变文本对齐方式本身。
    注意:每次想要显示或更新标签时,都必须调用标签的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

特此授予任何获得此软件及其相关文档副本(“软件”)的个人在本软件上进行不受限制的处理权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许软件接收方将其用于上述目的,前提是以下条件:

必须把上述版权声明和本许可协议包含在软件的副本或实质性部分之中。

软件按现状提供,不提供任何形式的保证,无论是明示的、暗示的还是法律的,包括但不限于适销性、适用于特定用途和侵权性保证。在任何情况下,作者或版权所有者对于任何因合同、侵权或任何其他行为所产生的损害赔偿或任何其他责任,无论源于、因之或与此软件或其使用或其他交易有关,均不承担责任。