[英]SKSpriteNode ignoring physics deactivation
我有一個放置在屏幕下方並作為平台的節點。 一旦另一個節點接觸到該節點,則將布爾值設置為NO。 當我使用SKPhysicsBody
屬性為碰撞定義節點時,該節點將忽略affectedByGravity
的SKPhysicsBody
屬性。
我的代碼:
+ (void)addNewNodeTo:(SKNode *)parentNode
{
//Correct image size
SKSpriteNode *desertBottom = [SKSpriteNode node];
desertBottom = [[SKSpriteNode alloc] initWithImageNamed:@"Giraffe.png"];
desertBottom.position = CGPointMake(0, -200);
desertBottom.zPosition = 2;
desertBottom.physicsBody.collisionBitMask = lionType;
desertBottom.physicsBody.categoryBitMask = terrainType;
desertBottom.physicsBody.contactTestBitMask = lionType;
desertBottom.zPosition = 2;
desertBottom.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(desertBottom.size.width, desertBottom.size.height)];
desertBottom.physicsBody.dynamic = YES;
desertBottom.physicsBody.affectedByGravity = NO;
[parentNode addChild:desertBottom];
}
我的碰撞方法:
- (void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (lionType | terrainType)) {
self.lionNode.lionIsJumping = NO;
NSLog(@"%i", self.lionNode.lionIsJumping);
}
}
- (void)didEndContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (lionType | terrainType)) {
self.lionNode.lionIsJumping = YES;
NSLog(@"%i", self.lionNode.lionIsJumping);
}
}
物理物體具有速度。 重力隨時間改變速度。 如果身體已經由於重力而以一定速度運動,並且您禁用了重力,則它將繼續按照其當前速度運動,但不再從重力中獲得額外的速度。
我的猜測是您希望身體在禁用重力時會停止運動。 如果您要這樣做,可以通過將y的速度分量設置為零來手動執行此操作:
SKPhysicsBody* body = desertBottom.physicsBody;
body.velocity = CGVectorMake(body.velocity.x, 0.0);
如果在碰撞后平台不應該移動,則必須將dynamic屬性設置為false。
也許您的口罩有問題?
您是否嘗試過對didBeginContact方法的if語句進行登錄?
我為底部創建了一個帶有SKSpriteNode
子類的新類,並將其添加到我的GameScene中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.