【问题标题】:Swift SpriteKit: Background speeds up when I tap?Swift SpriteKit:点击时背景加速?
【发布时间】:2015-09-02 09:25:56
【问题描述】:

我一直在做这个游戏,并为我的精灵提供了一个可以行走的地面,但是每当我点击让精灵跳跃时,地面会逐渐加速到一个荒谬的速度,我不想要它去做这个。我该如何解决?

这是我的地面代码:

类 MCTGround: SKSpriteNode {

let numberOfSegments = 21
let colorOne = UIColor(red: 88.0/255.0, green: 148.0/255.0, blue:87.0/255.0, alpha: 1.0)
let colorTwo = UIColor(red: 120.0/255.0, green: 195.0/255.0, blue: 118.0/255.0, alpha: 1.0)
init(size: CGSize) {
    super.init(texture: nil, color: UIColor.brownColor(), size: CGSizeMake(size.width * 2, size.height))
    anchorPoint = CGPointMake(0, 0.5)

    for var i = 0; i < numberOfSegments; i++ {
        var segmentColor: UIColor!

        if i  % 2 == 0 {
            segmentColor = colorOne

        } else {
            segmentColor = colorTwo
        }
        let segment = SKSpriteNode(color: segmentColor, size: CGSizeMake(self.size.width / CGFloat(numberOfSegments), self.size.height))
        segment.anchorPoint = CGPointMake(0.0, 0.5)
        segment.position = CGPointMake(CGFloat(i) * segment.size.width, 0)
        addChild(segment)

    }

 }

 required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
 }

func start() {
    let moveLeft = SKAction.moveByX(-frame.size.width / 2, y: 0, duration: 1.0)
    let resetPosition = SKAction.moveToX(0, duration: 0)
    let moveSequence = SKAction.sequence([moveLeft, resetPosition])

        runAction(SKAction.repeatActionForever(moveSequence))



    }


}

编辑:我的 touchesBegan 函数:

 override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    jumpPlayer()
    movingGround.start()



    fruitGenerator.startGeneratingFruitEvery(3)


let frames = [
    SKTexture(imageNamed: "koala_idle"),
    SKTexture(imageNamed: "koala_walk01"),
    SKTexture(imageNamed: "koala_walk02"),


]

let duration = 1.5 + drand48() * 1.0

let move = SKAction.animateWithTextures(frames, timePerFrame:0.10)
let wait = SKAction.waitForDuration(duration)
let rest = SKAction.setTexture(frames[0])
let sequence = SKAction.sequence([move, rest])

player.runAction(SKAction.repeatActionForever(sequence))







}

【问题讨论】:

  • 你的场景中的触摸方法是什么
  • 将其添加为编辑

标签: swift sprite-kit


【解决方案1】:

这是因为你每次都在后台添加一个额外的动作。做吧:

var hasBegun = false
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    jumpPlayer()
    if !hasBegun {
        hasBegun = true
        movingGround.start()
        fruitGenerator.startGeneratingFruitEvery(3)
    }

    ...

或任何其他只运行这些“启动”类型方法一次的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多