桌面游戏:如何让角色从一所房子走到另一所房子,穿过其间的每一所房子



上个月我刚开始学习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)
    }
}

最新更新