在尝试更改SKSpriteNode的位置时,我遇到了一个非常奇怪的崩溃。这种崩溃发生在iOS8而不是iOS9中。
// if the powerup is full, spawn the icon on screen
if orangeBallsCollected == numberOfBallsRequiredToActivatePowerup {
// add the powerup icon to the array of powerupiconsonscreen
powerupIconsOnScreen.append(fewerColorsPowerupIcon)
// set the lighting mask of the powerup icon so that we know what positon it is onscreen for alter
fewerColorsPowerupIcon.lightingBitMask = UInt32(powerupIconsOnScreen.count - 1)
// remove the ball from its current parent
fewerColorsPowerupIcon.removeFromParent()
print(fewerColorsPowerupIcon, fewerColorsPowerupIcon.parent, fewerColorsPowerupIcon.physicsBody, fewerColorsPowerupIcon.superclass)
// place the ball of the screen so that we can bring it on later
fewerColorsPowerupIcon.position = CGPointMake((width * -0.1) , (height * -0.1))
// set the size of the icon
fewerColorsPowerupIcon.xScale = scaleFactor
fewerColorsPowerupIcon.yScale = scaleFactor
// add it the scene
self.addChild(fewerColorsPowerupIcon)
// animate it moving down to the first avaliable position
let animation = SKAction.moveTo(CGPoint(x: width * 0.1, y: height * 0.1), duration: 0.5)
// run the animation!
fewerColorsPowerupIcon.runAction(animation)
// activate the poweurp
activateFewerColors()
}
当我尝试设置位置(fewerColorsPowerupIcon.position
)时发生崩溃,这是崩溃消息:
主题1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)
如果在设置节点位置后放置.removeFromParent()
代码,则仍会发生此崩溃。
答案 0 :(得分:1)
我认为如果你删除了精灵,你就无法做出。
所以试着这样做:
SELECT total_personnel
FROM fact_personnel_on_site_category
order by day_date desc
limit 1;
或者您可以先添加场景和更改后的属性:
let spriteCopy = fewerColorsPowerupIcon.copy()
// place the ball of the screen so that we can bring it on later
spriteCopy.position = CGPointMake((width * -0.1) , (height * -0.1))
// set the size of the icon
spriteCopy.xScale = scaleFactor
spriteCopy.yScale = scaleFactor
// add it the scene
self.addChild(spriteCopy)
答案 1 :(得分:0)
如果fewerColorsPowerupIcon
被声明为:
weak var fewerColorsPowerupIcon: Type!
然后,只要您致电removeFromParent()
,就不会再有强烈的引用了。如果是这样,则无法保证fewerColorsPowerupIcon
将设置为nil或将被检测到。下次使用时,您可能会获得EXC_BAD_ACCESS。
找到这样的东西的一种方法是使用僵尸乐器。在它下面,没有任何对象在没有引用时真正被释放,但是如果你在释放所有强引用后尝试使用它们,它们会抱怨。
另一种选择是改变!至 ? (并更新使用var的代码)。这可能是一种痛苦,但有更多的保证如何?作用