使用Swift在Xcode SpriteKit中向一个方向展开SKSpritenode

时间:2016-03-25 10:28:35

标签: ios sprite-kit

我想只在一个方向上进行SKSpritenode扩展,在这种情况下只向上扩展。

override func didMoveToView(view: SKView) {
    var rightlegs = SKSpriteNode()
    rightlegs.size = CGSize(width: 10, height: 50)
    rightlegs.color = SKColor.yellowColor()
    rightlegs.position = CGPointMake(self.frame.width / 2 + 20, self.frame.height / 2 - 40)
    self.addChild(rightlegs)


}

 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   /* Called when a touch begins */

所以..当我按下屏幕时,我希望高度扩大;但是,不是从两个方向。我该如何解决这个问题?感谢您的时间:)

1 个答案:

答案 0 :(得分:1)

您可以通过将精灵的anchorPoint属性更改为CGPoint(x:0.5, y:0.0)(这将使底部对齐精灵的纹理)并使用{{缩放精灵的高度 - 来实现此目的。 3}}属性,像这样:

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

    let rightlegs = SKSpriteNode(color: .yellowColor(), size: CGSize(width: 10, height: 50))

    override func didMoveToView(view: SKView) {

        rightlegs.anchorPoint.y = 0.0

        rightlegs.position = CGPointMake(self.frame.width / 2 + 20, self.frame.height / 2 - 40)
        self.addChild(rightlegs)    
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

        //Without animation
        rightlegs.yScale += 0.2
    }
}

或者您可以使用一些SKAction缩放方法对其进行动画处理:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

   //With animation

   rightlegs.runAction(SKAction.scaleYTo(rightlegs.yScale + 0.2, duration: 0.2))
}

关于anchorPoint来自docs:

  

定义精灵中与节点对应的点   位置。

     

您可以在单位坐标空间中指定此属性的值。   默认值为(0.5,0.5),这意味着精灵是   以其立场为中心。

基本上anchorPoint的作用是它定义了如何相对于节点的位置绘制纹理,并影响节点的旋转和缩放......

关于锚点如何工作及其作用的一个很好的解释可以在Apple的yScale部分文档中找到。