簡體   English   中英

畫直線瞄准

[英]Draw straight line for aiming

如果您在玩《憤怒的小鳥》或任何台球游戲之前不熟悉我想做的事情,那么基本上我想要的是:

1-在touchesMoved中畫一條線,以便玩家知道他瞄准的方向。

2-我希望線條在碰到其他物體時能向正確的方向反射。 到目前為止,我有這個:

更新:

   var ref = CGPathCreateMutable()

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

            for touch in touches {
                let location = touch.locationInNode(self)

                let path = CGPathCreateMutable()
                CGPathMoveToPoint(ref, nil, position.x - 100 , position.y - 100 )
                CGPathAddLineToPoint(ref, nil, -location.x, -location.y)

                line.removeFromParent()
                line.path = ref

                line.strokeColor = UIColor.redColor()
                line.lineWidth = 20
                line.antialiased = true
                line.fillColor = UIColor.blueColor()
                addChild(line)
            }
        }

我添加了-before位置,以便將線條畫在節點的前面,這樣可以更好地瞄准,但這給我帶來了2個問題:

1-我希望這條線有一個限制,使其在節點的前面,但是同時,我希望它的末端是當前的觸摸位置。 (基本上,我希望它通過節點)

2-我仍然不知道當它碰到牆或其他物體時如何使它以正確的角度反射,因此它給出了節點會從該牆反彈的想法。

SpriteKit沒有繪制API。 在SpriteKit中,您基本上可以將元素添加到場景並為元素設置動畫。 您需要做的是刪除上一行(如果有的話),然后每幀向場景中添加一條新行。 以下是偽代碼,可讓您了解如何進行操作:

class ParentNode: SKNode {

   private var lines = [SKShapeNode]()

    /// Called before each frame is rendered
    override func update(currentTime: CFTimeInterval) {
      self.drawLine()
    }

    func drawLine() {
      let _ = self.lines.map { $0.removeFromParent() }
      self.lines.removeAll()

      if let path = self.createDrawingPath() {
         let lineNode = SKShapeNode()
         lineNode.path = path
         lineNode.strokeColor = UIColor.whiteColor()
         lineNode.lineWidth = 3.0

         self.addChild(lineNode)
         self.lines.append(lineNode)
      }
   }
}

就您而言,做類似的事情,我已經使用update來刪除/添加新行,但是我想您可以使用touchesMoved(touches:withEvent)來做到這一點。

一種替代方法是每幀刪除和添加一個線節點,制作1個像素乘1個像素的SKShapeNode,然后在x軸上縮放從pt到pt的距離,然后旋轉它。 使用let angle = arctan2(P2_y - P1_y , P2_x - P1_x) (我相信arctan2會為您除以0)以獲取角度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM