Anonymous
Spritekit время от времени вылетает на SKAction.move
Сообщение
Anonymous » 21 апр 2024, 11:37
Я разрабатываю приложение, которое перемещает «сетку» с помощью 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
1713688668
Anonymous
Я разрабатываю приложение, которое перемещает «сетку» с помощью Spritekit SKAction.move на основе частых обновлений ARKit. Время от времени происходит сбой на камере?.run(moveToAction). Иногда приложение без проблем работает 10-15 минут, поэтому его сложно отладить. Я довольно неопытен, и любая помощь будет очень признательна. [code] 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) } [/code] [code]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 [/code] Кажется, что «точка» такая, как и должна быть. У меня возникли проблемы с ее отладкой, поскольку это происходит спорадически и может быть на более низком уровне. Возможно, лучше не использовать действие перемещения, когда оно происходит так часто, но я считаю, что это более плавно, чем непосредственное обновление позиции. Подробнее здесь: [url]https://stackoverflow.com/questions/78360891/spritekit-crashes-sporadically-on-skaction-move[/url]