上个月我刚开始学习Swift的编码。这是我的第二个个人项目。我正在制作一款桌面游戏,比如"大富翁"之类的。这里是我的原型图片:我的桌面棋盘游戏
我使用arc4random进行骰子,并使用以下代码移动角色/玩家:
if positionPlayer1 == 1 {
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 1 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
player1.runAction(SKAction.moveByX(-66, y: 0, duration: 1))
}
} else if positionPlayer1 == 2 {
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 1 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
player1.runAction(SKAction.moveByX(-44, y: 0, duration: 1))
}
我也试过:
player1.runAction(SKAction.moveByX(-66, y: 0, duration: 1))
sleep(1)
问题是:角色等待的总时间e直接运行到最终位置。假设骰子打出6分,角色等待6秒,然后跑到最后一个位置。这在直线上不是问题,但如果移动经过一个角,角色会直接对角切入到最终位置,而不是按预期穿过每个房子。任何帮助都将不胜感激。
编辑:我决定试试物理。我创建了许多SKSpriteNode"墙"。到我正在使用的所有节点:
squareBlock02.physicsBody?.allowsRotation = false
squareBlock02.physicsBody?.pinned = true
squareBlock02.physicsBody?.dynamic = false
结果是玩家击中这些墙并移动它们。我试过质量、密度。。。没有什么能阻止玩家推开所有的墙。
感谢所有提供帮助的人。
我终于在这个网站上找到了答案:http://www.gamefromscratch.com/post/2014/07/02/Game-development-tutorial-Swift-and-SpriteKit-Part-4-Actions.aspx
import SpriteKit
// Solution found: http://www.gamefromscratch.com/post/2014/07/02/Game-development-tutorial-Swift-and-SpriteKit-Part-4-Actions.aspx
class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: "Player_01-2.png")
override func didMoveToView(view: SKView) {
/* Setup your scene here */
player.anchorPoint = CGPoint(x:0.5,y:0.5)
player.position = CGPoint(x:view.bounds.midX,y:view.bounds.midY)
self.addChild(player)
doStuff()
}
func doStuff(){
var actions = Array<SKAction>()
actions.append(SKAction.moveTo(CGPoint(x:300,y:300), duration: 1))
actions.append(SKAction.rotateByAngle(6.28, duration: 1))
actions.append(SKAction.moveBy(CGVector(dx: 150,dy: 0), duration: 1))
actions.append(SKAction.colorizeWithColor(SKColor.redColor(), colorBlendFactor: 0.5, duration: 1))
let sequence = SKAction.sequence(actions)
player.runAction(sequence)
}
}