桌面游戏:如何让角色从一个房子走到另一个房子,穿过它们之间的每个房子?

时间:2015-12-23 15:07:15

标签: swift sprite-kit

我上个月开始学习使用Swift进行编码。这是我的第二个个人项目。 我正在制作一款桌面游戏,例如" Monopoly"或者其他的东西。这是我原型的图像:my table top board game

我使用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

结果是玩家击中那些墙并移动它们。我尝试了质量,密度......没有什么能阻止玩家从所有墙壁上推开它。

1 个答案:

答案 0 :(得分:0)

感谢所有试图提供帮助的人。

我终于在这个网站找到了答案: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)
    }

}