2017-02-05 3 views
1

У меня есть более 1000 плиток, которые мне нужно использовать. В плитке я могу использовать только одну фотографию из всех плиток, но в Xcode мне нужно разбить плиту в 1000 отдельных плиток. Есть ли способ, чтобы можно было получить плитки с одного изображения, как в плитке?Sktilemapnode загрузка плитки с одного изображения

ответ

0

Вы можете использовать библиотеки SKTiled или JSTilemap для работы с картами, созданными в редакторе с черепицей. Если вы хотите использовать SpriteKits, построенный в SKTilemapNode, вам нужно использовать отдельные плитки.

+0

Существует способ. Разделите программно изображение и добавьте плитки программно в SKTilemapNode, но я пытаюсь понять это. – Lirf

+0

есть программы на github, которые разработаны в быстрой загрузке карт в Xcode, сделанные в Tiled –

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 

Это для spritesheet из 20x24 плитки 16x16 пикселей.

Смежные вопросы