ipad - 如何制作一个在碰撞时具有物理主体不可移动/静态的 Sprite ?

标签 ipad ios8 sprite-kit collision-detection

我有一个气球游戏。我从底部添加气球,它们会飞起来,同时能够飞出屏幕。我给了气球物理主体,以便它们彼此碰撞,但我想让气球在屏幕的左右边缘弹起。我找到了一个解决方案,让 Sprite 对象在 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];

然而,在几次气球碰撞后,墙壁正在移动。我真的不知道哪里有什么办法或属性(property)可以阻止这种行为。 :

leftWall.physicsBody.dynamic            = NO;

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

最佳答案

您尚未正确设置您的categoryBitMasks。

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

leftWall.physicsBody.collisionBitMask = wallCategory;
leftWall.physicsBody.contactTestBitMask = balloonCategory;

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

关于ipad - 如何制作一个在碰撞时具有物理主体不可移动/静态的 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803085/

相关文章:

ios - iPad Safari - 让键盘消失

iphone - 如何让输入标签在 iPhone/iPad 上正确显示?

ios - fatal error : NSArray element failed to match the Swift Array Element type

ios - 使用 CTGetSignalStrength() 计算 IOS 信号强度

ios - iPhone 上纵向的 UISplitViewController 显示细节 VC 而不是主控

ios - SKSpriteNode zrotation M_PI真气人

iphone - App Store内购买可以是 "gifted"吗?

ios - 如何创建两个搜索显示 IPAD

swift - SKSpriteNode 自动移动

ios7 - SpriteKit 中的缩放和滚动