繁体   English   中英

在Swift中使用Sprite Kit绘制直线,创建多条线

[英]Draw straight line in Swift with Sprite Kit, creating multiple lines

我正在尝试使用Swift和Sprite Kit在iOS中制作游戏。 我有以下代码,但是它正在创建多行。 我想做的是创建一条单行,当用户在屏幕上拖动手指直到他或她将手指从屏幕上移开时,其末端将跟随用户的指尖,然后移至该行留在那里。 我在使用spritekit绘制直线时发现了一个类似的堆栈溢出问题,UITouch创建了多条线 ,但这是用Objective-C编写的。 而且我认为我说的不完全是我的答案。 我正在使用Xcode 7和Swift 2。

import SpriteKit

class GameScene: SKScene {
override func didMoveToView(view: SKView) {

}

let path = CGPathCreateMutable()

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

    let touch = touches.first

    let position1 = touch!.locationInNode(self)

    CGPathMoveToPoint(path, nil, position1.x, position1.y)

}

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

    let touch = touches.first

    let position2 = touch!.locationInNode(self)

    CGPathAddLineToPoint(path, nil, position2.x, position2.y)
    CGPathCloseSubpath(path)

    let line = SKShapeNode()
    line.path = path
    line.strokeColor = UIColor.blackColor()
    line.lineWidth = 5

    self.addChild(line)

}

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

}

任何想法或建议,将不胜感激。 谢谢。

瑞安

我可能错了,因为我对Swift的游戏开发了解不多。 但是似乎您每次手指越多都在创建线,是否尝试过在touchesEnded中创建线?

您是否试过了没有代码的代码

CGPathCloseSubpath(path)

根据文档 ,这是它的作用:

从当前点到当前子路径的起点附加一条线,并结束子路径。

而且我不希望您从上次接触到每行新接触都需要增加一行。 仅当您想要一行在其开始处结束时,才需要关闭CGPath

我会为此作弊:

用所需的线条颜色创建一个非常细的精灵,然后将其端点拉伸到想要的位置。

这实际上是一个由SKSpriteNode制成的矩形框,该框从原点延伸到当前触摸点。

最好将旋转后拉伸SKSpriteKit节点(对我而言)的方法是:将其连接到SKNode,然后根据需要旋转该节点,然后将嵌套的SKSpriteNode拉伸到所需的距离,以达到用户的当前接触点。

将SKNode和SKSpriteNode的原点放在左中间的同一位置,并围绕其旋转。 或任何在数学上对您有用的方法……对我而言,这最有意义,但它可以是矩形任何边缘的中心点,然后您可以相应地拉伸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM