swift和sprite kit在屏幕上拖动手指时绘制一条直线

时间:2017-01-17 08:28:18

标签: ios swift sprite-kit

我正在尝试使用UITouch和Spritekit绘制一条直线。在我的手指拖动动作期间线条保持显示的位置。如果有人知道某个教程或者可以让我通过这样做的方式,我会很感激

2 个答案:

答案 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)) }
}

}