簡體   English   中英

位掩碼不起作用。 SpriteKit Swift

[英]Bit mask not working. SpriteKit Swift

有一個硬幣,它只能與玩家碰撞而不是推動它。 相反,玩家(手指)被推下並與所有物體碰撞。 這是代碼:

var coin=SKSpriteNode(imageNamed: "Coin")
coin.position=CGPoint(x: xPos, y: yPos)
coin.physicsBody=SKPhysicsBody(circleOfRadius: 250)
//coin.physicsBody!.mass=CGFloat(mass);
coin.xScale=1
coin.yScale=1

coin.name="coin";
coin.physicsBody?.contactTestBitMask=1
coin.physicsBody!.collisionBitMask=0
coin.physicsBody!.categoryBitMask=0

self.addChild(coin)

這是播放器的設置:

Finger.physicsBody?.collisionBitMask=0;
Finger.physicsBody?.categoryBitMask=0;
Finger.physicsBody?.contactTestBitMask=1

問題在於硬幣的碰撞位掩碼設置為玩家的categoryBitMask。 讓我為您揭開這三個碰撞變量的神秘面紗:

x.categoryBitMask:這是一種為對象“ x”提供識別它的方法。

x.collisionBitMask:在這里,您將放置您希望“ x”能夠與之碰撞的對象的categoryBitMask變量(崩潰)

x.contactTestBitMask:在這里,您將放置當對象與“ x”進行接觸時要為其執行操作的對象的categoryBitMask var。 contactTestBitMask將調用蘋果提供的函數“ didBeginContact”,並且您可以在其中編寫當硬幣碰到玩家時想要發生的事情。

一些代碼可以幫助您將各個部分組合在一起:

var coinCategory: UInt32 = 1 // categories must be type UInt32
var playerCategory: UInt32 = 2
var nothingCategory: UInt32 = 3 // some other number for not colliding into anything

coin.name="coin";
coin.physicsBody!.categoryBitMask= coinCategory // set category first
coin.physicsBody?.contactTestBitMask = playerContact
coin.physicsBody!.collisionBitMask = nothingCategory // doesn't crash into anything. 
// if you want coins to crash into each other then set their collisionBitMask to the coinCategory  


self.addChild(coin)

和:

Finger.physicsBody?.categoryBitMask= playerCategory;
Finger.physicsBody?.collisionBitMask= nothingCategory;

// This next one only needs to be set on one of the objects when you want the "didBeginContact" function to be called when there is contact
//Finger.physicsBody?.contactTestBitMask = coinCategory

祝好運!

最佳實踐是不對位掩碼使用整數值:

var coinCategory: UInt32 = 0x1 << 1 
var playerCategory: UInt32 = 0x1 << 2
var nothingCategory: UInt32 = 0x1 << 3 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM