ios - SpriteKit动画

标签 ios animation sprite-kit

我需要你的建议,我是 SpriteKit 的新手,我需要制作动画条。我有 3 个解决方案来实现它,但我需要对 CPU 更好且成本更低的建议。

  • 1 个解决方案:每个条纹 - SKSpriteNode 带有动画和纹理
  • 解决方案2:背景视频
  • 3 解决方案:每个条纹 - 带动画的 SKShapeNode

enter image description here

最佳答案

这是一个简单的任务,您不需要构建图集动画或使用 SKShapeNode,您可以使用 SKSpriteNode 作为以下代码:

var bar = SKSpriteNode(color: SKColor.greenColor(), size: CGSizeMake(40, 200))
barra.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
self.addChild(barra)

构建 n 个随机大小的条形,并使用 SKAction 移动它们。

采用这种方法,每次启动时您的动画都会有所不同。

详细代码:

class GameScene: SKScene {
    var bars: [SKSpriteNode]!
    var totBars : Int = 50
    override func didMoveToView(view: SKView) {
        self.backgroundColor = SKColor(red: 131/255, green: 190/255, blue: 177/255, alpha: 1)
        let redBarColor = SKColor(red: 204/255, green: 75/255, blue: 75/255, alpha: 1)
        let yellowBar = SKColor(red: 253/255, green: 242/255, blue: 160/255, alpha: 1)
        // add here your colors
        var colorSelected:SKColor = redBarColor
        bars = [SKSpriteNode]()
        for i in 0..<totBars-1 {
            let colorNum = randomNumber(1...2)
            switch (colorNum) {
            case 1:
                colorSelected = redBarColor
            case 2:
                colorSelected = yellowBar
            default:
            break
            }
            let randomWidth = randomCGFloat(5,max:40)
            let randomHeight = randomCGFloat(30,max:400)
            let bar = SKSpriteNode.init(color: colorSelected, size: CGSizeMake(randomWidth, randomHeight))
            bar.zRotation = -45 * CGFloat(M_PI / 180.0)
            bar.name = "bar\(i)"
            self.addChild(bar)
            bars.append(bar)
        }
        animateBars()
    }
    func animateBar(bar:SKSpriteNode) {
        print("- \(bar.name) start!")
        let deltaX = self.randomCGFloat(0,max:self.frame.maxX)
        let deltaY:CGFloat  = self.frame.maxY/2
        let rightPoint = CGPointMake(self.frame.maxX + deltaX,self.frame.maxY + deltaY)
        let leftPoint = CGPointMake(-self.frame.maxX + deltaX,-self.frame.maxY + deltaY)
        bar.position = rightPoint
        let waitBeforeExit = SKAction.waitForDuration(Double(self.randomCGFloat(1.0,max:2.0)))
        let speed = self.randomCGFloat(150,max:300)
        let move = SKAction.moveTo(leftPoint, duration: self.getDuration(rightPoint, pointB: leftPoint, speed: speed))
        bar.runAction(SKAction.sequence([waitBeforeExit,move]), completion: {
           print("\(bar.name) reached position")
           self.animateBar(bar)
        })
    }
    func animateBars() {
        for bar in bars {
            animateBar(bar)
        }
    }
    func getDuration(pointA:CGPoint,pointB:CGPoint,speed:CGFloat)->NSTimeInterval {
        let xDist = (pointB.x - pointA.x)
        let yDist = (pointB.y - pointA.y)
        let distance = sqrt((xDist * xDist) + (yDist * yDist));
        let duration : NSTimeInterval = NSTimeInterval(distance/speed)
        return duration
    }
    func randomCGFloat(min: CGFloat, max: CGFloat) -> CGFloat {
        return CGFloat(Float(arc4random()) / Float(UINT32_MAX)) * (max - min) + min
    }
    func randomNumber(range: Range<Int> = 1...6) -> Int {
        let min = range.startIndex
        let max = range.endIndex
        return Int(arc4random_uniform(UInt32(max - min))) + min
    }
}

关于ios - SpriteKit动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38550388/

相关文章:

swift - 在 SKLabels 的 Sprite-kit 中创建 "fly-in"效果

iOS 和 Cocos2d - 更改 CCSprite 的图像和新尺寸 = 失败

iOS,优雅的方向变化

ios - 自动布局约束何时解决?

performance - 使用双缓冲 Canvas 的简单动画不流畅

html - 向左移动元素 - CSS 动画

swift - 尽管位掩码不同,但 Sprite 碰撞

iphone - 来自 NSString 的 html 加载

javascript - d3 动画导致行为缓慢

swift - 应用程序崩溃并显示 EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)