Ich habe ein seltsames Problem, wo meine SKReferenceNode nicht ordnungsgemäß kollidiert nach dem Hochskalieren. Es kollidiert gut in der Mitte, aber es ignoriert Kollisionen und Kontakte an den Rändern.Swift Kollision funktioniert nicht nach SKReferenceNode Scale
Here is the first photo of the scene. Der SKReferenceNode wurde signifikant vergrößert und, wie in this Foto zu sehen ist, kollidiert nicht korrekt an den Rändern. Der PhysicsBody scheint korrekt zu sein (mit showPhysics on), aber der Ball weigert sich zu kollidieren.
Der SKReferenceNode verwendet eine Alpha-Kollisionsmaske, weil ich ihn in Zukunft in ein größeres Sprite umwandeln muss, um Animationen und ähnliches zu machen. Darüber hinaus funktionieren nicht skalierte Objekte vollständig. Schließlich, nachdem der Ball mit der Mitte kollidiert ist, was funktioniert, und der Block zurückgesetzt wird, beginnen Kollisionen wieder wie erwartet zu arbeiten. Der Code, um es zu beheben, ist wahrscheinlich in der Reset-Funktion, aber ich setze alles zurück, bevor die Ebene geladen wird, also würde dies keinen Sinn ergeben. Hier ist ein Teil meines Reset-Code:
func reset() {
physicsWorld.gravity = CGVectorMake(0, -9.8)
for grav in gravityBlock {
grav.reset()
}
gravity = -9.8
//Resets blocks
for blocks in destroyedBlocks { //the blocks are stored in destroyedBlocks when collided with
blocks.reset()
}
destroyedBlocks = []
/*Irrelevant code removed*/
}
Hier ist meine blocks.reset() Funktion:
override func reset() {
super.reset()
self.physicsBody?.categoryBitMask = 1
removeAllActions()
self.texture = self.text
shadow.hidden = false
self.alpha = 0
shadow.alpha = 0
let appear = SKAction(named: "Appear")!
self.runAction(appear)
shadow.runAction(SKAction.fadeInWithDuration(0.25))
}
Hier ist super.reset()
func reset() {
self.hidden = false
state = .NotBroken
}
Thanks so much!
Ich habe das schon probiert, [hier] (http://i.imgur.com/ZC40jam.png) ist ein Link zu einem Bild. Der physicsBody deckt den gesamten Block ab, kollidiert aber trotzdem nicht. –