如何让一条线跟随触摸而不是在 spritekit 中绘制无限?
Posted
技术标签:
【中文标题】如何让一条线跟随触摸而不是在 spritekit 中绘制无限?【英文标题】:How to make one line follow touch instead of drawing infinite in spritekit? 【发布时间】:2021-12-08 16:58:54 【问题描述】:在我触摸某个精灵对象后,我正试图让一条直线跟随我的手指。到目前为止,我一直在工作,除了绘制一条线,而是在触摸之后绘制了无限的线......
我的代码:
import SpriteKit
import GameplayKit
class WireDrawTest: SKScene
var drawingLayer: CAShapeLayer!
var redBox = SKSpriteNode()
var redBoxPoint = CGPoint(x: 445, y: 800)
var redBoxTouched:Int = -1
var currentTouch = touchesMoved
func drawLine(from: CGPoint, to: CGPoint)
let line = SKShapeNode()
let path = CGMutablePath()
path.addLines(between: [from, to])
line.path = path
line.strokeColor = UIColor.yellow
line.lineWidth = 13
addChild(line)
override func didMove(to view: SKView)
redBox = self.childNode(withName: "redBox") as! SKSpriteNode
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
print(redBoxTouched)
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
let touch = touches.first
if let location = touch?.location(in: self)
let nodesArray = self.nodes(at: location)
if nodesArray.first?.name == "redBox"
if redBoxTouched == -1
redBoxTouched = 1
if redBoxTouched == 1
drawLine(from: redBoxPoint, to: location)
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
print(redBoxTouched)
if redBoxTouched == 1
redBoxTouched = -1
这是当前结果的截图: screenshot
TIA!!
【问题讨论】:
"而不是画一条线" 从什么点到什么点?如果你只是想画一条直线,不就是将touchesBegan
的一个点连接到touchesEnded
的另一个点吗?
我不确定。我是新来的快速大声笑。但我并不想在触摸结束后保留“绘图”。我希望这条线在 touchesEnded 时消失,但这部分不是我正在努力解决的问题。当您触摸屏幕时,我希望一条线跟随您的手指,而不是连续打印线条。
【参考方案1】:
每次调用drawLine
时,都会创建一个新的形状节点并将其添加到场景中。但是,您永远不会删除这些形状节点中的任何一个,因此随着您的手指移动,线条的数量会增加。
一个解决方法是有一个可选的形状节点来记住前一行,如果有的话。如果触摸移动时有一个形状节点,则只需删除并丢弃前一个形状节点。当触摸结束时,删除线。
或者您可以创建一个形状节点并在触摸开始时将其添加到场景中,在触摸移动时更改其路径,并在触摸结束时将其从场景中移除。如果我没记错的话,形状节点会在内部复制路径,因此仅具有可变路径并更改路径不会更新形状节点。但我相信您可以创建一个新路径并分配给形状节点的path
属性以更新节点。
【讨论】:
谢谢你,我会试试这个!【参考方案2】:感谢 bg2b 将我设置在正确的轨道上,我找到了解决方案...
首先,'let line = SKShapeNode' 不是包含在 drawWire 函数中,而是需要在它之外,在主场景设置中。
从那里我刚刚将“line.removeFromParent”添加到 touchesEnded。现在它起作用了!我不知道为什么这有效,但确实有效!哈哈!
【讨论】:
嗨!在这种情况下,你应该接受他的回答(bg2b's)而不是你的回答(你甚至说你不知道它是如何工作的)。也很高兴相应地投票有用的答案。这可能是对您的问题而不是答案的编辑(在问题的末尾放置真正对您有用的东西,但由于您无法真正记录它不应该是答案):) 感谢您的信息!我会改变的!不幸的是,我还没有足够的声誉来支持他!我试过了!以上是关于如何让一条线跟随触摸而不是在 spritekit 中绘制无限?的主要内容,如果未能解决你的问题,请参考以下文章