【问题标题】:How to make a sprite which has physicsBody unmovable/static upon collision?如何制作一个在碰撞时具有physicsBody不可移动/静态的精灵?
【发布时间】:2014-11-07 14:07:36
【问题描述】:

我有一个气球游戏。我从底部添加气球,它们飞起来,同时能够飞出屏幕。我给了气球physicsBodys,所以它们会相互碰撞,但我想让气球在屏幕的左右边缘发生碰撞。我找到了一个解决方案,其中精灵对象在 Rays 站点上的所有屏幕上反弹。但我需要一个不同的解决方案。 这是我的气球代码:

MBDBallon *randomBallon = [[MBDBallon alloc] initWithImageName:balloonImageName
                                               andBallonSize:ballonSize
                                               withBallonImageName:[self.balloonColorImageNamesArray objectAtIndex:balloonWithColorIndex]
                                               withStartingPosition:CGPointMake(self.viewSize.width/2, - self.viewSize.height )];

                    //randomBallon.name = [self returnRandomImageNameFromArray:self.ballonSpriteImageNamesArray];
                randomBallon.physicsBody.usesPreciseCollisionDetection = YES;
                randomBallon.physicsBody.categoryBitMask = balloonCategory;
                randomBallon.physicsBody.collisionBitMask = balloonCategory;
                randomBallon.physicsBody.contactTestBitMask = balloonCategory;

这是我的左墙代码:

  SKSpriteNode *leftWall = [[SKSpriteNode alloc] initWithColor:[UIColor redColor] size:CGSizeMake( self.viewSize.width / 15, self.viewSize.height * 3 )];
    [leftWall setAnchorPoint:CGPointMake(0.0f, 0.0f)];

    leftWall.position = CGPointMake( self.viewSize.width / 15 , 0.0f );
    leftWall.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake( self.viewSize.width / 15, self.viewSize.height * 3 )];
    leftWall.physicsBody.categoryBitMask = balloonCategory;
    leftWall.physicsBody.collisionBitMask = balloonCategory;
    leftWall.physicsBody.contactTestBitMask = balloonCategory;
    leftWall.physicsBody.usesPreciseCollisionDetection = YES;
    leftWall.physicsBody.allowsRotation     = NO;
    leftWall.physicsBody.dynamic            = NO;
    leftWall.physicsBody.friction = 0.0f;
    [self addChild:leftWall];

然而,在几次气球碰撞之后,墙壁正在移动。我真的不知道阻止这种行为的捕获或财产在哪里。 :

leftWall.physicsBody.dynamic            = NO;

应该停止所有运动,但事实并非如此。请帮忙,谢谢:)。

【问题讨论】:

    标签: ipad ios8 sprite-kit collision-detection


    【解决方案1】:

    您没有正确设置您的 categoryBitMasks。

    randomBallon.physicsBody.categoryBitMask = balloonCategory;
    randomBallon.physicsBody.collisionBitMask = wallCategory|balloonCategory;
    
    leftWall.physicsBody.collisionBitMask = wallCategory;
    leftWall.physicsBody.contactTestBitMask = balloonCategory;
    

    CategoryBitMask 是您要分配给精灵的类别。 CollisionBitMask 是您希望您的精灵与之碰撞的类别。在这种情况下,气球应设置为与墙壁和其他气球碰撞。墙壁应设置为仅与气球碰撞。

    【讨论】:

    • 适用于 iOS 8.1(设备)和 iOS 8.1,7.1 模拟器。很好很简单的解释。泰:)
    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 2012-11-29
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多