如何在swift(SpriteKit)中绘制一个作为单个节点的圆点[关闭]

Posted

技术标签:

【中文标题】如何在swift(SpriteKit)中绘制一个作为单个节点的圆点[关闭]【英文标题】:How to draw a circle of dots that are individual nodes in swift (SpriteKit) [closed] 【发布时间】:2016-05-28 16:23:26 【问题描述】:

您好,我是 swift 和 SpriteKit 的新手,但我目前正在开发一款游戏。在我的游戏中,我想要一个圆点对象。我已经查找了所有内容,但似乎无法弄清楚。

我想要的是一个圆点,每个点都是一个单独的节点,我可以使用它来为每个单独的节点添加动画。

有没有办法像这样以圆形图案绘制多个形状?

我希望它看起来像这样。

我将不胜感激。我将继续研究并尝试解决问题。谢谢!

【问题讨论】:

你想让这些点做什么?可能由于某种原因,以这些点作为图像的单个 Sprite 是不够的? 这些点看起来是均匀分布的。查看parametric equation of a circle. 是不是很棒?你会怎么画一个点?现在,你将如何绘制下一个点? 好吧,我想要的是一个圆点,每个圆点都是一个单独的节点,当有东西从圆中经过时,可以使用它来删除它们@Ali Beadle 【参考方案1】:

你可以用几行代码轻松绘制一个圆点:

SpriteKit:

附:更改模式参数以获得您想要做什么..

func circleOfDots() 
        let circlePath = UIBezierPath(arcCenter: CGPoint(x: 200,y: 200), radius: CGFloat(100), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
        let shapeNode = SKShapeNode()
        shapeNode.path = circlePath.CGPath
        shapeNode.position =  CGPoint(x:CGRectGetMidX(self.frame)-200, y:CGRectGetMidY(self.frame)-200)
        //change the fill color
        shapeNode.fillColor = UIColor.clearColor()
        //you can change the stroke color
        shapeNode.strokeColor = UIColor.redColor()
        //you can change the line width
        shapeNode.lineWidth = 6.0
        let one : CGFloat = 1
        let two : CGFloat = 10
        let pattern = [one,two]
        let dashed = CGPathCreateCopyByDashingPath(circlePath.CGPath,nil,0,pattern,2)
        shapeNode.path = dashed
        shapeNode.lineCap = CGLineCap.Round
        self.addChild(shapeNode)
    

结果:

或使用传统代码:

UIKit

func circleOfDots() 
        let circlePath = UIBezierPath(arcCenter: CGPoint(x: 200,y: 200), radius: CGFloat(100), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = circlePath.CGPath
        shapeLayer.position = CGPointMake(CGRectGetMidX(self.view.bounds)-200 ,CGRectGetMidY(self.view.bounds)-200 )
        //change the fill color
        shapeLayer.fillColor = UIColor.clearColor().CGColor
        //you can change the stroke color
        shapeLayer.strokeColor = UIColor.redColor().CGColor
        //you can change the line width
        shapeLayer.lineWidth = 6.0
        let one : NSNumber = 1
        let two : NSNumber = 20
        shapeLayer.lineDashPattern = [one,two]
        shapeLayer.lineCap = kCALineCapRound
        self.view.layer.addSublayer(shapeLayer)
    

结果:

最后,如果你想绘制每一个形状来制作动画,你也可以使用这样的数学算法..

SpriteKit

func circleOfDots() 
        let radius: CGFloat = 100.0
        let numberOfCircle = 30
        for i in 0...numberOfCircle 

            let circle = SKShapeNode(circleOfRadius: 2 )
            circle.strokeColor = SKColor.clearColor()
            circle.glowWidth = 1.0
            circle.fillColor = SKColor.orangeColor()
            // You can get every single circle by name:
            circle.name = String(format:"circle%d",i)
            let angle = 2 * M_PI / Double(numberOfCircle) * Double(i)

            let circleX = radius * cos(CGFloat(angle))
            let circleY = radius * sin(CGFloat(angle))

            circle.position = CGPoint(x:circleX + frame.midX, y:circleY + frame.midY)
            addChild(circle)
        

结果:

【讨论】:

现在这些点是可以操作的单个对象吗?还是那只是一种形状 使用自定义图案绘制的一个形状,是 fps 处理和内存管理的最佳解决方案 有没有办法以圆形图案绘制多个形状,例如在我的情况下,一旦另一个物体从圆圈中经过,就可以将其从圆圈中移除? 我在最后部分添加了一些代码来绘制每个点。 问题解决了!谢谢

以上是关于如何在swift(SpriteKit)中绘制一个作为单个节点的圆点[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

基本的 swift/spritekit 游戏 - 麻烦重绘

如何在 SpriteKit 场景编辑器中访问导航图的对象

如何在 Swift 和 SpriteKit 中添加涟漪效果

如何在 SpriteKit 中使用 SKShapeNode 通过触摸特定路径来绘制路径

如何在 Swift 3/SpriteKit 中限制球的敲击?

SpriteKit + Swift - 如何通过缓动移动节点?