Spritekit время от времени вылетает на SKAction.moveIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Spritekit время от времени вылетает на SKAction.move

Сообщение Anonymous »

Я разрабатываю приложение, которое перемещает «сетку» с помощью Spritekit SKAction.move на основе частых обновлений ARKit. Время от времени происходит сбой на камере?.run(moveToAction). Иногда приложение без проблем работает 10-15 минут, поэтому его сложно отладить. Я довольно неопытен, и любая помощь будет очень признательна.

Код: Выделить всё

    func setupScene(scale: String, root: String) {
removeAllChildren()
cameraNode.removeAllChildren()
if (scale == "Free Pitch") {
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "grid6"))
} else if (scale == "Chromatic") {
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "chromatic"))
} else  {
if (scale == "Minor Pentatonic" || scale == "Major Pentatonic") {
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "pentatonic7"))
} else if (scale == "Minor" || scale == "Major") {
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "diatonic"))
} else if (scale == "Harmonic Minor") {
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "diatonic"))
} else if (scale == "Whole Tone"){
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "wholenote"))
} else if (scale == "Diminished"){
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "dimarp"))
} else if (scale == "Major3rd"){
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "major3rdarp"))
} else if (scale == "Quarter"){
spritesheetNode = SKSpriteNode(texture: SKTexture(imageNamed: "quartal"))
}
getScale(scale: scale, root: root)
}
let heightFactor = 0.2667
let width = 2000.0

spritesheetNode.size = CGSize(width: width, height: heightFactor * width)
spritesheetNode.anchorPoint = CGPoint(x:0.179, y:0.3)
yPosition = size.height/2
spritesheetNode.position = CGPoint(x: 0, y: yPosition)

backgroundColor = UIColor.black
addChild(spritesheetNode)
camera = cameraNode
addChild(cameraNode)
cameraNode.position = spritesheetNode.position
staticObjectsNode.size = CGSize(width: 600, height: 140)
staticObjectsNode.position = CGPoint(x:0.5, y:340)
staticObjectsNode.zPosition = 1
cameraNode.addChild(staticObjectsNode)
}

func animateCamera(xMovement: Float) {
let sensitivity: Float = appState.conductor.currentSynth.sensitivity
var x = xMovement
if (appState.selectedScaleOption == "Free Pitch" || appState.selectedScaleOption == "Chromatic") {
let increment: Float = 0.1412;
x = xMovement * sensitivity / 85.0 + (((-xMovement * sensitivity / 85.0 / 0.14 - 0.071425).rounded(.down) + 1.0) * increment)
} else if (appState.selectedScaleOption == "Minor Pentatonic" || appState.selectedScaleOption == "Major Pentatonic") {
let increment: Float = 0.0588;
x = xMovement * sensitivity / 85.0 + (((-xMovement * sensitivity / 85.0 / increment + 0.03).rounded(.down) + 1.0) * increment)
} else if (appState.selectedScaleOption == "Minor" || appState.selectedScaleOption == "Major"  || appState.selectedScaleOption == "Harmonic Minor") {
let increment: Float = 0.08235;
x = xMovement * sensitivity / 85.0 + (((-xMovement * sensitivity / 85.0 / increment).rounded(.down) + 1.0) * increment)
} else if (appState.selectedScaleOption == "Whole Tone") {
let increment: Float = 0.0706;
x = xMovement * sensitivity / 85.0 + (((-xMovement * sensitivity / 85.0 / increment).rounded(.down) + 1.0) * increment)
} else if (appState.selectedScaleOption == "Diminished") {
let increment: Float = 0.04705;
x = xMovement * sensitivity / 85.0 + (((-xMovement * sensitivity / 85.0 / increment).rounded(.down) + 1.0) * increment)
} else if (appState.selectedScaleOption == "Major3rd") {
let increment: Float = 0.03523;
x = xMovement * sensitivity / 85.0 + (((-xMovement * sensitivity / 85.0 / increment).rounded(.down) + 1.0) * increment)
} else if (appState.selectedScaleOption == "Quarter") {
let increment: Float = 0.1412;
x = xMovement * sensitivity / 85.0 + (((-xMovement * sensitivity / 85.0 / increment).rounded(.down) + 1.0) * increment)
}

let xPosition: Double = Double(x * 19300 * 0.375)
let point = CGPoint(x: xPosition, y: yPosition)
let moveToAction = SKAction.move(to: point, duration: 0.005)

camera?.run(moveToAction)
}

Код: Выделить всё

Exception   NSException *   "*** -[__NSArrayM insertObject:atIndex:]: index 1 beyond bounds for empty array"

sensitivity:    Float   85
x:  Float   0.122448787
xPosition:  Double  886.2230224609375
point:  CGPoint (x = 886.2230224609375, y = 422)
moveToAction:   SKMove  0x0000000303389c40

0x1f5c9cf6c : ldrsw  x8, [x19, #0xac]
0x1f5c9cf70 : stp    x20, x21, [sp, #-0x10]!
0x1f5c9cf74 : adrp   x20, 11
0x1f5c9cf78 : add    x20, x20, #0x332          ; "BUG IN LIBPTHREAD: __workq_kernreturn returned"
0x1f5c9cf7c : adrp   x21, 21192
0x1f5c9cf80 : add    x21, x21, #0x8            ; gCRAnnotations
0x1f5c9cf84 : str    x20, [x21, #0x8]
0x1f5c9cf88 : str    x8, [x21, #0x38]
0x1f5c9cf8c : ldp    x20, x21, [sp], #0x10
0x1f5c9cf90 : ldp    x29, x30, [sp, #0x20]
0x1f5c9cf94 : ldp    x20, x19, [sp, #0x10]
0x1f5c9cf98 : ldp    x22, x21, [sp], #0x30
0x1f5c9cf9c : retab
0x1f5c9cfa0 : mov    x0, x19
0x1f5c9cfa4 : bl     0x1f5ca1814               ; _pthread_wqthread_exit
0x1f5c9cfa8 : bl     0x1f5ca1854               ; _pthread_wqthread_legacy_worker_wrap
0x1f5c9cfac : b      0x1f5c9cee4               ; 
0x1f5c9cfb0 : mov    x0, x22
0x1f5c9cfb4 : bl     0x1f5ca6680               ; _pthread_wqthread.cold.1
Кажется, что «точка» такая, как и должна быть. У меня возникли проблемы с ее отладкой, поскольку это происходит спорадически и может быть на более низком уровне. Возможно, лучше не использовать действие перемещения, когда оно происходит так часто, но я считаю, что это более плавно, чем непосредственное обновление позиции.

Подробнее здесь: https://stackoverflow.com/questions/783 ... ction-move
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему метод move() запускает метод move(), хотя я до сих пор не щелкнул мышью?
    Гость » » в форуме Python
    0 Ответы
    51 Просмотры
    Последнее сообщение Гость
  • SKAction playSoundFileNamed не работает после получения двух последовательных телефонных звонков
    Anonymous » » в форуме IOS
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Задержка между SKAction и SKAudioNode, когда SKScene приостанавливается и возобновляется.
    Anonymous » » в форуме IOS
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Swift Pause endless Skaction
    Anonymous » » в форуме IOS
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Могу ли я написать всю свою игровую логику в функции SpriteKit update(_:), если я смоделировал всю игровую логику с помо
    Гость » » в форуме IOS
    0 Ответы
    178 Просмотры
    Последнее сообщение Гость

Вернуться в «IOS»