簡體   English   中英

SKSpriteNode忽略物理失活

[英]SKSpriteNode ignoring physics deactivation

我有一個放置在屏幕下方並作為平台的節點。 一旦另一個節點接觸到該節點,則將布爾值設置為NO。 當我使用SKPhysicsBody屬性為碰撞定義節點時,該節點將忽略affectedByGravitySKPhysicsBody屬性。

我的代碼:

+ (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.

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