Скорее добавить «SKShapeNode» в качестве узла для рисования и есть его путь как свойство, т.е.
class MyDrawingNode: SKNode {
...
}
и обновить путь, а не добавление отдельных детей SKNode в каждой строке, чтобы указать на пути. Так что-то эффект:
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
let location = touch.locationInNode(self)
newPoint = location
let myLinePath:CGMutablePathRef = myDrawingNode.path
...
}
* Редактирование: * Разница здесь в том, что вы только манипулируя one
объект, и это путь .. В вашем случае вы создавали many objects
... Подумайте очертание дома:

В этом примере я меченый каждый portion
пути.
- Если вы думаете о пути в целом, т.е. в моем примере кода выше, то вы со ссылкой на все части пути, как один ...
- Если вы думаете о пути, как личности компонентов, т. е. вы создаете отдельные узлы, тогда вы имеете дело с 5 компонентами (вашими отдельными узлами), то есть части пути, а также еще один SKNode, ссылающийся на них как на коллектив ... Всего 6 узлов.
1
выше, более эффективен с точки зрения использования памяти и процессора/процессора. 2
выше - это процессор на процессор/gpu и память, но они позволяют индивидуально манипулировать каждой частью пути по отдельности.
Если понятие 2
выше является то, что вы после этого, то есть со ссылкой на каждую часть пути по отдельности, а:
- Создать один подкласс SKNode, скажем
SKHouseNode
- Создание нескольких переменных, относящихся к каждая часть дома т.е.
leftRoofPath, rightRoofPath, rightVertPath, bottomHorzPath, leftVertPath
возможно как структура и все это вместе с:
структура HousePathComponent { вар StartPoint: CGPoint вар ENDPOINT: CGPoint вар lineThickness: CGFloat } typealias HousePath = [HousePathComponent]
var myHouse = HousePath()
var leftVertPath = HousePathComponent(startPoint: CGPointMake(0.0,0.0), endPoint: CGPointMake(0.0,100.0), lineThickness: 1.0)
var leftRoofNode = HousePathComponent(startPoint: CGPointMake(0.0,100.0), endPoint: CGPointMake(50.0,150.0), lineThickness: 1.0)
var rightRoofNode = HousePathComponent(startPoint: CGPointMake(50.0,150.0), endPoint: CGPointMake(100.0,100.0), lineThickness: 1.0)
var rightVert = HousePathComponent(startPoint: CGPointMake(100.0,100.0), endPoint: CGPointMake(100.0,0.0), lineThickness: 1.0)
var bottomHorz = HousePathComponent(startPoint: CGPointMake(100.0,0.0), endPoint: CGPointMake(0.0,0.0), lineThickness: 1.0)
myHouse.appendContentsOf([leftVertPath, leftRoofNode, rightRoofNode, rightVert, bottomHorz])
Отсюда нарисовать путь, используя содержимое myHouse
, который представляет собой массив из различных структур.
Есть множество способов, вы можете подойти к этому, так что я просто бросал грубые идеи там для вас играть с :)
FPS каплепадения
Один из способов об этом будет :
в SKScene
в функции обновления, положить некоторый код вместе, чтобы обновить только эту сцену каждые х мс, в отличие от каждого прохода что-то вроде:
вара nthFrameCount = 0 пусть nthFrame = 6 переопределения обновления FUNC (CURRENTTIME: CFTimeInterval) {
hero.tileSpriteIso.position = point2DToIso(hero.tileSprite2D.position)
nthFrameCount += 1
if (nthFrameCount == nthFrame) {
nthFrameCount = 0
updateOnNthFrame()
}
}
затем обработать фактический код обновления в updateOnNthFrame
функция. Таким образом, в приведенном выше примере это будет каждый 6 кадров, в отличие от каждого кадра.
Хотя меньше будет рисовать за мс времени, человеческий глаз начинает регистрировать smooth motion
примерно с 25 ~ 30 кадров в секунду ... На телевидении в США аналоговый телевизионный стандарт NTSC, и это было 30 кадров в секунду.
Так как вы обновляете свои движения меньше раз в секунду, фактическое время запуска «кода обновления» составляет 10 раз в секунду (в моем примере 10 раз/секунду, если FPS составляет 60 кадров в секунду) ...
Надеюсь, это объяснит немного больше :) Если нет, напишите мне чат-запрос, и я попробую помочь вам дальше!
Cheers :)
Это работает, но эффективнее ли это? Fps все еще падает, и это также не так гладко, как я рисую больше. – MRRPlatinum
Обновлен ответ с большим количеством информации, которую вы можете найти удобной ... Как я уже сказал, если вам нужна дополнительная помощь, напишите мне чат-запрос, и я посмотрю, смогу ли я помочь дальше :) –