2017-02-05 3 views
1

私は使用する必要があるタイルが1000以上あります。タイル張りでは、すべてのタイルの写真を1枚しか使用できませんが、Xcodeでは1000枚のタイルでタイルシートを分割する必要があります。タイリングのように1枚の写真からタイルを得ることを可能にする方法はありますか?Sktilemapnodeは1つの画像からタイルをロードする

答えて

0

SKTiledまたはJSTilemapライブラリを使用して、タイルエディタで作成したマップを操作できます。 SKTilemapNodeで構築されたSpriteKitsを使用する場合は、個々のタイルを使用する必要があります。

+0

方法があります。プログラムでプログラムを分割し、SKTilemapNodeにプログラムでタイルを追加しますが、それを把握しようとしています。 – Lirf

+0

タイルで作られたXcodeにマップを読み込むために開発されたgithub上のプログラムがあります –

0

あなたはまだ私はちょうど遊び場でそれをやった、それを必要とする場合は、次の

struct SpriteSheet { 

let baseTexture: SKTexture 
let rows: CGFloat 
let columns: CGFloat 
var textureSize: (width: CGFloat, height: CGFloat) { 
    return (width: baseTexture.textureRect().width/self.columns, 
      height: baseTexture.textureRect().height/self.rows) 
} 

init(imageNamed texture: String, rows: CGFloat, columns: CGFloat) { 
    self.baseTexture = SKTexture(imageNamed: texture) 
    self.baseTexture.filteringMode = .nearest // best for pixel art 
    self.rows = rows 
    self.columns = columns 
} 

var testTileMap: SKTileMapNode { 
    let tileSize: CGSize = CGSize(width: 16, height: 16) 
    let texture = cropTexture(row: 1, column: 10, w: 1, h: 1) 
    let tileDef = SKTileDefinition(texture: texture, size: tileSize) 
    let tileGroup = SKTileGroup(tileDefinition: tileDef) 
    let tileSet = SKTileSet(tileGroups: [tileGroup]) 
    let mapNode = SKTileMapNode(tileSet: tileSet, 
           columns: 4, 
           rows: 4, 
           tileSize: tileSize, 
           fillWith: tileGroup) 
    return mapNode 
} 

func cropTexture(row: CGFloat, column: CGFloat, w: CGFloat, h: CGFloat) -> SKTexture { 
    assert(row < rows && column < columns && row > 0 && column > 0) 
    let rect = CGRect(x: textureSize.width * (column - 1), 
         y: textureSize.height * (self.rows - row), 
         width: textureSize.width * w, 
         height: textureSize.height * h) 
    return SKTexture(rect: rect, in: baseTexture) 
} 

} 

let spriteSheet = SpriteSheet(imageNamed: "dungeon.png", rows: 24, columns: 20) 
let node = spriteSheet.testTileMap 

これは、16×16ピクセルの20x24タイルのspritesheetためです。

関連する問題