首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpriteKit和JSTileMap

SpriteKit和JSTileMap
EN

Stack Overflow用户
提问于 2015-01-13 12:16:22
回答 1查看 729关注 0票数 1

我很难理解JSTileMap如何与SpriteKit和平铺一起工作。

该问题与像素和点有关,也与使用基于屏幕比例因子的JSTileMap加载分集有关。

项目中的文件结构

在我的项目中,有一些文件具有以下结构,这表示了我的低分辨率映射(1024x768px和32x32px瓷砖):

  • 名为SD 的文件夹
    • level-1.tmx
    • 文件夹tmx-levels sd.atlasc
      • tmx-levels-sd.1.png
      • tmx-levels-sd.plist

在这种情况下,当我加载电平-1.tmx在非视网膜模拟器,一切都是正确的定位。当我在视网膜模拟器上运行相同的配置时,同样,一切都很好,但是瓷砖被缩放了。因为这种品质受到了损害。那么,在需要的时候如何加载高分辨率的呢?

另一个解决方案

我还试图通过对每个级别使用两个版本的地图(低分辨率和高分辨率)来解决这个问题。这实际上是我想避免的,但仍然是可以接受的:

对于这种情况,我有这样的文件结构(map是2048x1536和64x64px瓷砖):

  • 名为SD 的文件夹
    • level-1.tmx
    • 文件夹tmx-levels sd.atlasc
      • tmx-levels-sd.1.png
      • tmx-levels-sd.plist

  • 名为HD 的文件夹
    • level-1-hd.tmx
    • 文件夹tmx-Level-hd.atlasc
      • tmx-levels-hd.1.png
      • tmx-levels-hd.plist

我想那张尺寸为2048x1536的双倍的地图适合我的地图的高分辨率版本吗?另外,正如您所看到的,在我的项目中根本没有@2xtilesets(我猜我们不能使用带有平铺编辑器和JSTileMap?)的@2x后缀。

这种配置的问题是所有的东西都被改变了(位置和平铺是加倍的)。JSTileMap可能与点一起工作,用像素平铺,最重要的是有一个已知的与纹理地图集相关的iPad模拟错误,这让我很难理解是什么导致了高分辨率地图的问题。

有人能澄清这些关于使用JSTileMap,SpriteKit和平铺的事情吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-18 19:01:38

我拿到你的味精了。

首先,您需要瓷砖的@1x和@2x版本(精灵)。因此,如果您有一本名为myTiles的地图集,您将需要: myTiles.png & myTiles@2x.png。

我用纹理封隔器制作了我的雪碧薄片。我添加了@2x图像,然后在导出时让它创建一个@1x版本。

在平铺中,只使用@1x版本,这样您就可以使用myTiles.png

如果您的地图是32x32,您的@1x版本将是32x32,您的@2x版本将是64x64。

忘记SD & HD文件夹,只需使用一个名为“假设级别”的文件夹。

在这里你需要:

级别-1.tmx,tmx-级别-sd.1.png,tmx-级别-sd.1@2x.png

您可以在主级别文件夹下有子文件夹。取决于您,但是您必须同时拥有png的@1x版本和@2x版本,您不能只复制@1x或@2x版本。@1x版本必须是基于32x32的瓷砖,而@2x版本必须是该版本的两倍(64x64)。在tmx文件本身中,您不会加载@2x版本,因为这会使您的级别变得一团糟。

**所以你的游戏将在32x32分号上进行。雪碧工具包将做的是双倍的像素在视网膜显示,为此,您需要有@2x版本,否则它将升级您的@1x版本,瓷砖将看起来很大,像素化。所以,尽量不要混淆整个像素点的东西。

代码示例:

GameViewController (装载场景):

代码语言:javascript
复制
- (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 (Loads ):

代码语言:javascript
复制
#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;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27921999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档