Jestem nowy w kodowaniu za pomocą SpriteKit/Swift i mam następujący problem: Postać ma zbierać monety, wskakując do nich. Nie ma problemu z wykryciem kolizji i pozbyciem się zebranej monety, ale moja postać odbija monety zanim zniknie.Wykrywanie kolizji Sprite bez odbijania w SpriteKit
Postać ma przelecieć przez monetę i zebrać ją po drodze.
let playerCategory: UInt32 = 0x1 << 0
let coinCategory: UInt32 = 0x1 << 1
player = SKSpriteNode(texture: playerTexture)
player.physicsBody = SKPhysicsBody(circleOfRadius: player.size.height/2)
player.physicsBody?.dynamic = true
player.physicsBody?.allowsRotation = false
player.physicsBody?.categoryBitMask = playerCategory
player.physicsBody?.contactTestBitMask = coinCategory
var coin:SKSpriteNode = SKSpriteNode(texture: coinTexture)
coin.physicsBody = SKPhysicsBody(circleOfRadius: coin.size.height/2)
coin.physicsBody?.dynamic = false
coin.physicsBody?.allowsRotation = false
coin.physicsBody?.categoryBitMask = coinCategory
coin.physicsBody?.contactTestBitMask = playerCategory
func playerDidCollideWithCoin(player:SKSpriteNode, thisCoin:SKSpriteNode) {
thisCoin.removeFromParent()
coinsCollected++
}
Wykrywanie kolizji działa dobrze, ale tak jak powiedziałem, w jaki sposób można uniknąć wpadając i zastąpić go z "latające"?
Używam Xcode 6 Beta 7
Z góry dziękuję!
Rozwiązanie w komentarzu poniżej;) domyślne zachowanie
Ustaw właściwość collisionBitMask, aby nie uwzględniała kategorii monet/odtwarzaczy. Jeśli nie potrzebujesz monet, aby zderzyć się z czymkolwiek, po prostu ustaw je na 0. Zauważ różnicę między kontaktami (określ zakładkę) i kolizją (odbierz impuls od kontaktu). – LearnCocos2D
Gotowy! dzięki! Ustaw collision monety BITMap na 0, a gracz collisionBitMap na groundCategory, aby mój odtwarzacz nie spadł na ziemię. – MikeB