Swift で使用できますか。使用できる場合はJSTileMap
、どのように使用しますか。Swift で使用できない場合、またはバグが多すぎる場合、.tmx マップに使用できるものは他にありますか。注、私はスプライトキットを使用しています
2955 次
1 に答える
13
はい、できます。昨日使い始めたばかりで、まだ問題は見つかっていません。JSTileMap ファイルと libz.dylib フレームワークをインポートすることから始めます。次に、次のインポートでブリッジ ヘッダーを追加します。
#import "JSTileMap.h"
#import "LFCGzipUtility.h"
次に、SKScene ファイルに移動し、以下に示すように tileMap 変数を作成します。
var tileMap = JSTileMap(named: "tileMap.tmx")
ポジショニングが少し難しいので、それも追加します。
self.anchorPoint = CGPoint(x: 0, y: 0)
self.position = CGPoint(x: 0, y: 0) //Change the scenes anchor point to the bottom left and position it correctly
let rect = tileMap.calculateAccumulatedFrame() //This is not necessarily needed but returns the CGRect actually used by the tileMap, not just the space it could take up. You may want to use it later
tileMap.position = CGPoint(x: 0, y: 0) //Position in the bottom left
addChild(tileMap) //Add to the scene
編集
以下は、SKSpriteNodes のフロアを作成するために使用したコードです。
func addFloor() {
for var a = 0; a < Int(tileMap.mapSize.width); a++ { //Go through every point across the tile map
for var b = 0; b < Int(tileMap.mapSize.height); b++ { //Go through every point up the tile map
let layerInfo:TMXLayerInfo = tileMap.layers.firstObject as TMXLayerInfo //Get the first layer (you may want to pick another layer if you don't want to use the first one on the tile map)
let point = CGPoint(x: a, y: b) //Create a point with a and b
let gid = layerInfo.layer.tileGidAt(layerInfo.layer.pointForCoord(point)) //The gID is the ID of the tile. They start at 1 up the the amount of tiles in your tile set.
if gid == 2 || gid == 9 || gid == 8{ //My gIDs for the floor were 2, 9 and 8 so I checked for those values
let node = layerInfo.layer.tileAtCoord(point) //I fetched a node at that point created by JSTileMap
node.physicsBody = SKPhysicsBody(rectangleOfSize: node.frame.size) //I added a physics body
node.physicsBody?.dynamic = false
//You now have a physics body on your floor tiles! :)
}
}
}
}
于 2014-09-23T18:30:35.473 に答える