我收到了你的消息。
首先,您需要@1x 和@2x 版本的图块(精灵)。因此,如果您有一个名为 myTiles 的图集,您将需要:myTiles.png 和 myTiles@2x.png。
我使用纹理打包器创建了我的精灵表。我添加了@2x 图像,然后在导出时创建了@1x 版本。
在 Tiled 中仅使用 @1x 版本,因此您将使用 myTiles.png
如果您的地图是 32x32,您的 @1x 版本将是 32x32,而您的 @2x 版本将是 64x64
忘记 SD 和 HD 文件夹,只使用 1 个称为级别的文件夹
在这里你需要:
level-1.tmx, tmx-levels-sd.1.png, tmx-levels-sd.1@2x.png
您可以在主级别文件夹下拥有子文件夹。由您决定,但您必须同时拥有 png 的 @1x 版本和 @2x 版本,并且您不能只复制 @1x 或 @2x 版本。@1x 版本必须是基于 32x32 的图块,@2x 版本必须是其两倍 (64x64)。在 tmx 文件本身中,您不会加载 @2x 版本,因为这会弄乱您的关卡。
** 所以你的游戏将在一个 32x32 的图块集上。sprite kit 的作用是将视网膜显示器上的像素加倍,因此为此您需要提供@2x 版本,否则它将升级您的@1x 版本,并且图块看起来很大且像素化。所以尽量不要与整个像素点混淆。
代码示例:
GameViewController(加载场景):
- (void)viewDidLoad
{
[super viewDidLoad];
self.currentLevel = 1;
// Configure the view.
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = YES;
// Create and configure the scene.
LevelScene *scene = [[LevelScene alloc]initWithSize:skView.bounds.size level:self.currentLevel];
scene.scaleMode = SKSceneScaleModeAspectFill;
// Present the scene.
[skView presentScene:scene];
}
LevelScene(加载 JSTileMap):
#import "LevelScene.h"
#import "SKTAudio.h"
#import "JSTileMap"
#import "Player.h"
@interface LevelScene()
@property (nonatomic, assign) NSUInteger currentLevel;
@property (nonatomic, strong) SKNode *gameNode;
@property (nonatomic, strong) JSTileMap *map;
@property (nonatomic, strong) Player *player;
@property (nonatomic, assign) NSTimeInterval previousUpdateTime;
@implementation LevelScene
-(id)initWithSize:(CGSize)size level:(NSUInteger)currentLevel {
if ((self = [super initWithSize:size])) {
self.currentLevel = currentLevel;
self.gameNode = [SKNode node];
[self addChild:self.gameNode];
NSString *levelName = [levelDict objectForKey:@"level"];
self.map = [JSTileMap mapNamed:levelName];
[self.gameNode addChild:self.map];
return self;
}