如何在 Sprite-kit 中画一条线

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 会随时接受答案好友...别担心.. 它的正确答案.. :) 你能解决这个问题吗?这是个好问题***.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)

希望对你有帮助!!

【讨论】:

以上是关于如何在 Sprite-kit 中画一条线的主要内容,如果未能解决你的问题,请参考以下文章

如何在HTML中画一条线

如何使用 c++ 在带有 opencv 3.0.0 的视频中画一条线

在现代 OpenGL 中画一条线

在jetpack compose中画一条线

借助工具栏在 mfc 中画一条线

在 QML 的圆形路径中画一条线?