【问题标题】:How to draw a line in Sprite-kit如何在 Sprite-kit 中画一条线
【发布时间】:2013-10-06 04:27:44
【问题描述】:

如何在 Sprite-kit 中画一条线?例如,如果我想在 cocos2d 中画一条线,我可以很容易地使用ccDrawLine();

在 sprite-kit 中是否有等价物?

【问题讨论】:

    标签: ios ios7 sprite-kit skshapenode


    【解决方案1】:

    使用SKShapeNode你可以画线或任何形状。

    SKShapeNode *yourline = [SKShapeNode node];
    CGMutablePathRef pathToDraw = CGPathCreateMutable();
    CGPathMoveToPoint(pathToDraw, NULL, 100.0, 100.0);
    CGPathAddLineToPoint(pathToDraw, NULL, 50.0, 50.0);
    yourline.path = pathToDraw;
    [yourline setStrokeColor:[SKColor redColor]];
    [self addChild:yourline];
    

    相当于 Swift 4:

    var yourline = SKShapeNode()
    var pathToDraw = CGMutablePath()
    pathToDraw.move(to: CGPoint(x: 100.0, y: 100.0))
    pathToDraw.addLine(to: CGPoint(x: 50.0, y: 50.0))
    yourline.path = pathToDraw
    yourline.strokeColor = SKColor.red
    addChild(yourline)
    

    【讨论】:

    • 根本没有更正,Waruna应该给它打勾作为正确的。
    • @Smick - Waruna 会随时接受答案好友...别担心.. 它的正确答案.. :)
    • 你能解决这个问题吗?这是个好问题stackoverflow.com/questions/19214040/…
    • 您应该使用 SKColor,在 iOS 上编译为 UIColor,在 OSX 上使用 NSColor。所以它适用于两个平台。
    • 是否可以改变线条的粗细?
    【解决方案2】:

    使用SKShapeNode 我能够做到这一点。

    // enter code here
    SKShapeNode *line = [SKShapeNode node];
    
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, 50.0, 40.0);
    CGPathAddLineToPoint(path, NULL, 120.0, 400.0);
    
    line.path = path;
    [line setStrokeColor:[UIColor whiteColor]];
    
    [self addChild:line];
    

    【讨论】:

      【解决方案3】:

      如果你只想要一条线,就像人们如何使用 UIViews 线一样(仅),那么你可以使用 SKSpriteNode

      SKSpriteNode* line = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(160.0, 2.0)];
      [line setPosition:CGPointMake(136.0, 50.0))];
      [self addChild:line];
      

      【讨论】:

        【解决方案4】:

        Swift 3 用于通过 SKShapeNode 绘制线条:

                    // Define start & end point for line
                    let startPoint = CGPoint.zero
                    let endPoint = CGPoint.zero
        
                    // Create line with SKShapeNode
                    let line = SKShapeNode()
                    let path = UIBezierPath()
                    path.move(to: startPoint)
                    path.addLine(to: endPoint)
                    line.path = path.cgPath
                    line.strokeColor = UIColor.white
                    line.lineWidth = 2
        

        【讨论】:

          【解决方案5】:

          这是 SWIFT 中的等效代码:

              let pathToDraw:CGMutablePathRef = CGPathCreateMutable()
              let myLine:SKShapeNode = SKShapeNode(path:pathToDraw)
          
              CGPathMoveToPoint(pathToDraw, nil, 100.0, 100)
              CGPathAddLineToPoint(pathToDraw, nil, 50, 50)
          
              myLine.path = pathToDraw
              myLine.strokeColor = SKColor.redColor()
          
              self.addChild(myLine)
          

          转换为 @Rajneesh071 的目标 c 代码示例。

          【讨论】:

            【解决方案6】:

            我在尝试在每个 mouseDown 上画一条线时发现了这篇文章,例如 xCode / OS X / Game (aka SpriteKit)/ Application。

            您可以将此代码复制/粘贴到 GameScene.swift 中。它应该在用户的每个鼠标按下事件上画一条线。看起来像“蚀刻素描”风格。

            import SpriteKit
            
            var lastPoint: CGPoint = CGPoint(x: 0.0, y: 0.0)
            var newPoint: CGPoint = CGPoint(x: 100.0, y: 100.0)
            
            
            class GameScene: SKScene {
                override func didMoveToView(view: SKView) {
                    /* Setup your scene here */
                    self.backgroundColor = SKColor.blackColor()
                    let myLabel = SKLabelNode(fontNamed:"default")
                    myLabel.text = "SKSpriteNode Draw Lines";
                    myLabel.fontSize = 15;
                    myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
            
                    self.addChild(myLabel)
                }
            
                override func mouseDown(theEvent: NSEvent) {
                    /* Called when a mouse click occurs */
            
                    let location = theEvent.locationInNode(self)
                    newPoint = location
            
                    let pathToDraw:CGMutablePathRef = CGPathCreateMutable()
                    let myLine:SKShapeNode = SKShapeNode(path:pathToDraw)
            
            
                    CGPathMoveToPoint(pathToDraw, nil, lastPoint.x, lastPoint.y)
                    CGPathAddLineToPoint(pathToDraw, nil, newPoint.x, newPoint.y)
                    lastPoint = newPoint
            
                    myLine.path = pathToDraw
                    myLine.strokeColor = SKColor.whiteColor()
            
                    self.addChild(myLine)
                }
            }
            

            对于新手来说,这就是我的 xCode 项目的样子:

            对于少数 iOS 的人。与上面相同的代码移植到示例 iOS / Game (aka SpriteKit) / Application 默认项目的 touchBegan

            将此代码放入您的 GameScene.swift 文件中

            import SpriteKit
            
            var lastPoint: CGPoint = CGPoint(x: 0.0, y: 0.0)
            var newPoint: CGPoint = CGPoint(x: 100.0, y: 100.0)
            
            
            class GameScene: SKScene {
                override func didMoveToView(view: SKView) {
                    /* Setup your scene here */
                    self.backgroundColor = SKColor.blackColor()
                    let myLabel = SKLabelNode(fontNamed:"default")
                    myLabel.text = "SKSpriteNode Draw Lines";
                    myLabel.fontSize = 15;
                    myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
            
                    self.addChild(myLabel)
                }
            
            
            override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
                /* Called when a touch begins */
            
                for touch in (touches as! Set<UITouch>) {
                    let location = touch.locationInNode(self)
            
                    newPoint = location
            
                    let pathToDraw:CGMutablePathRef = CGPathCreateMutable()
                    let myLine:SKShapeNode = SKShapeNode(path:pathToDraw)
            
            
                    CGPathMoveToPoint(pathToDraw, nil, lastPoint.x, lastPoint.y)
                    CGPathAddLineToPoint(pathToDraw, nil, newPoint.x, newPoint.y)
                    lastPoint = newPoint
            
                    myLine.path = pathToDraw
                    myLine.strokeColor = SKColor.whiteColor()
                    self.addChild(myLine)
               }}}
            

            享受吧。

            【讨论】:

              【解决方案7】:

              这是我的 Swift 4 函数,用于在两点之间添加一条线:

              func drawLine(from: CGPoint, to: CGPoint) {
                  let line = SKShapeNode()
                  let path = CGMutablePath()
                  path.addLines(between: [from, to])
                  line.path = path
                  line.strokeColor = .black
                  line.lineWidth = 2
                  addChild(line)
              }
              

              希望对你有帮助!!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-09-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多