我正在尝试使用UITouch和Spritekit绘制一条直线。在我的手指拖动动作期间线条保持显示的位置。如果有人知道某个教程或者可以让我通过这样做的方式,我会很感激
答案 0 :(得分:0)
SpriteKit在2D游戏引擎中有一些最差的2D绘图。
实际上,最糟糕的。
SKShapeNode及其CGPath是残暴的废话。好像是 SpriteKit的“设计师”从来没有看过最原始的 2D绘图,如DirectX或OpenGL。更别说那种了 动画师可能想要用线条和形状做的事情 创作,变异,失真和进展以及线条动画。 〜困惑
从我的胸口得到那个小小的咆哮,徒劳地希望它重新调整你不期望绘画风格解决方案的期望,考虑一下:
SKSpriteNodes可以是一个简单的盒子,它们可以在X和Y轴上缩放,并且它们可以作为“虚拟”SKNode的父级,该“虚拟”SKNode相对于原始位置旋转以面向当前触摸的方向触摸。
所以....你可以从初始触摸点开始绘制一个瘦小的盒子,并且当触摸移动时,通过将你创建的SKDummyNode旋转到你的父级,将SKSpriteNode缩放到该点。 “线”,然后沿着该长度从原点到触摸的当前位置缩小。
Viola,一个LINE!
各种各样。
答案 1 :(得分:0)
可能不是实现它的最佳方式,但它很简单。只需将其复制并粘贴到GameScene.swift
即可import SpriteKit
import GameplayKit
class GameScene: SKScene {
private var line:SKShapeNode = SKShapeNode()
private var path:CGMutablePath = CGMutablePath()
private var initialPointSet:Bool = false
override func didMove(to view: SKView) {
line.strokeColor = UIColor.orange
line.lineWidth = 4
addChild(line)
}
func touchMoved(toPoint pos : CGPoint) {
if !initialPointSet {
path.move(to: pos)
initialPointSet = true
}
path.addLine(to: pos)
line.path = path
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches { self.touchMoved(toPoint: t.location(in: self)) }
}
}