我正在测试Xcode8(8.2.2)附带的tile编辑器的可能性。我已经创建了一个像上面所示的吃豆人一样的地图。在一个矩形的左上角有一个游戏角色。我想知道是否有一个简单的方法使游戏人物留在蓝色边界内?到目前为止,我已经设置了一个(红色)墙到左边,就像下面通过场景编辑器。我有下面几行代码。
struct PhysicsCategory {
static let None: UInt32 = 0
static let Player: UInt32 = 0b1 // 1
static let Edge: UInt32 = 0b10 // 2
static let Wall: UInt32 = 0b100 // 4
}
class GameScene: SKScene {
// MARK: - Variables
var background: SKTileMapNode! // background
var player: SKNode! // player
// MARK: - DidMove
override func didMove(to view: SKView) {
setupNodes()
}
func setupNodes() {
background = self.childNode(withName: "World") as! SKTileMapNode
background.physicsBody = SKPhysicsBody(edgeLoopFrom: background.frame)
background.physicsBody?.categoryBitMask = PhysicsCategory.Edge
let wall = self.childNode(withName: "Wall")
wall?.physicsBody = SKPhysicsBody(rectangleOf: (wall?.frame.size)!)
wall?.physicsBody?.isDynamic = false
wall?.physicsBody?.categoryBitMask = PhysicsCategory.Wall
player = self.childNode(withName: "Player")
player.physicsBody = SKPhysicsBody(circleOfRadius: 32)
player.physicsBody?.categoryBitMask = PhysicsCategory.Player
player.physicsBody?.collisionBitMask = 4
player.physicsBody?.allowsRotation = false
}
}
用户可以使用
CoreMotion
来控制播放器的位置。目前,游戏角色确实尊重左边缘。但如果地图变得复杂,我可能会在这里和那里放置很多墙。这种方式会扼杀乐趣,因为它可能是耗时的。那么,有没有一种更简单的方法使游戏角色与地图边界碰撞?最佳答案
看看GameplayKit的寻路类,特别是GKGridGraph和GKGridGraphNode,它们允许您指定一个只有这种直线路径的图。
这里有一个来自苹果的好教程:https://developer.apple.com/library/content/documentation/General/Conceptual/GameplayKit_Guide/Pathfinding.html
还有一个演示应用程序:https://developer.apple.com/library/content/samplecode/Pathfinder_GameplayKit/Introduction/Intro.html#//apple_ref/doc/uid/TP40016461
关于ios - Sprite-Kit:停留在使用Tile Editor创建的边界内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43357345/