菜鸟教程小白 发表于 2022-12-12 11:45:44

ios - SpriteKit 动画


                                            <p><p>我需要你的建议,我是 SpriteKit 的新手,我需要制作动画片段。我有 3 种解决方案可以实现,但我需要更好且成本更低的 CPU 建议。</p>

<ul>
<li>1 解决方案:每个 strip- 带有动画和纹理的 SKSpriteNode</li>
<li>2 解决方案:背景视频</li>
<li>3 解决方案:每个 strip- 带有动画的 SKShapeNode</li>
</ul>

<p> <a href="/image/kzeoI.png" rel="noreferrer noopener nofollow"><img src="/image/kzeoI.png" alt="enter image description here"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是一个简单的任务,你不需要构建图集动画或使用<code>SKShapeNode</code>,你可以使用<code>SKSpriteNode</code>作为这个代码:</p>

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

<p>构建 n 个随机大小的条,并使用 <code>SKAction</code> 移动它们。</p>

<p>使用这种方法,您的动画每次启动都会有所不同。</p>

<p><strong>代码详解</strong>:</p>

<pre><code>class GameScene: SKScene {
    var bars: !
    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 = ()
      for i in 0..&lt;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 = &#34;bar\(i)&#34;
            self.addChild(bar)
            bars.append(bar)
      }
      animateBars()
    }
    func animateBar(bar:SKSpriteNode) {
      print(&#34;- \(bar.name) start!&#34;)
      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(), completion: {
         print(&#34;\(bar.name) reached position&#34;)
         self.animateBar(bar)
      })
    }
    func animateBars() {
      for bar in bars {
            animateBar(bar)
      }
    }
    func getDuration(pointA:CGPoint,pointB:CGPoint,speed:CGFloat)-&gt;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) -&gt; CGFloat {
      return CGFloat(Float(arc4random()) / Float(UINT32_MAX)) * (max - min) + min
    }
    func randomNumber(range: Range&lt;Int&gt; = 1...6) -&gt; Int {
      let min = range.startIndex
      let max = range.endIndex
      return Int(arc4random_uniform(UInt32(max - min))) + min
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - SpriteKit 动画,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38550388/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38550388/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - SpriteKit 动画