2016-05-29 61 views
0

我在我的swift项目中拥有以下精灵套件场景。它会在屏幕上移动一个SKNode。问题是我希望圆圈可以向上和向下移动,但它只能向下或向下移动。我检查了yMove的值,以确认它在y轴上随机生成正向变化。它正在生成这些正值,但该对象仍然只能水平和垂直移动。获取精灵套件对象向上移动

class GameScene: SKScene { 


override func didMoveToView(view: SKView) { 
    backgroundColor = SKColor.whiteColor() 

    runAction(SKAction.repeatActionForever(
     SKAction.sequence([ 
      SKAction.runBlock(addKugel), 
      SKAction.waitForDuration(1.0) 
      ]) 
     )) 


} 

func addKugel() { 

    // Create sprite 
    let kugel = SKShapeNode(circleOfRadius: 100) 
    kugel.strokeColor = SKColor.blackColor() 
    kugel.glowWidth = 1.0 

    // Determine where to spawn the monster along the Y axis 
    let actualY = random(min: 200/2, max: size.height - 200/2) 

    // Position the monster slightly off-screen along the right edge, 
    // and along a random position along the Y axis as calculated above 
    kugel.position = CGPoint(x: size.width + 200/2, y: actualY) 

    // Add the monster to the scene 
    addChild(kugel) 

    // Determine speed of the monster 
    let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0)) 

    //randomly create coefficients for movement 
    let xVector = random(min: CGFloat(0.0), max: CGFloat(1.0)) 
    var yVector = random(min: CGFloat(0.0), max: CGFloat(1.0)) 

    //overly complicated way to make a number negative 50 percent of the time 
    var probNegative = random(min: CGFloat(0.0), max: CGFloat(1.0)) 
    if (probNegative > 0.5){ 
     yVector = 0.0 - yVector 
    } 
    debugPrint(yVector) 
    // Create the actions 
    let yMove = (200/2)*yVector 
    debugPrint(yMove) 
    let actionMove = SKAction.moveTo(CGPoint(x: -200/2*xVector, y: yMove), duration: NSTimeInterval(actualDuration)) 
    let actionMoveDone = SKAction.removeFromParent() 
    kugel.runAction(SKAction.sequence([actionMove, actionMoveDone])) 

} 
} 

回答

0

所以我很误解moveTo在做什么。所有moveTo所做的都是将Sprite移动到特定的CGPoint。我按照我的精灵尺寸缩放y坐标,而不是随机选择0size.height之间的值。 以下是上述代码片段的简化版本:

func addKugel() { 
    let KUGELWIDTH = 50.0 

    let kugel = SKShapeNode(circleOfRadius: CGFloat(KUGELWIDTH)/2) 
    kugel.strokeColor = SKColor.blackColor() 
    kugel.glowWidth = 1.0 

    let actualY = random(min: CGFloat(KUGELWIDTH)/2, max: (size.height - CGFloat(KUGELWIDTH)/2)) 
    debugPrint("actualY: \(actualY)") 

    kugel.position = CGPoint(x: size.width + CGFloat(KUGELWIDTH/2), y: actualY) 

    addChild(kugel) 

    let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0)) 

    let y = random(min: CGFloat(0.0), max: CGFloat(1.0)) 
    let yPos = CGFloat(y)*size.height 

    let actionMove = SKAction.moveTo(CGPoint(x: 0.00, y: yPos), duration: NSTimeInterval(actualDuration)) 
    let actionMoveDone = SKAction.removeFromParent() 
    kugel.runAction(SKAction.sequence([actionMove, actionMoveDone])) 

}