1

我有以下代码

static const CGFloat kPipeWidth=56;

(void)topObstacle { 

    Obstacle *pipeTop = [Obstacle spriteNodeWithImageNamed:@"pipetop-1"];

    [pipeTop setCenterRect:CGRectMake(26.0/kPipeWidth, 26.0/kPipeWidth, 4.0/kPipeWidth, 4.0/kPipeWidth)];

    [pipeTop setYScale:pipeTopHeight/kPipeWidth];   
    [pipeTop setPosition:CGPointMake(self.size.width+(pipeTop.size.width/2),
        self.size.height-(pipeTop.size.height/2))];   
    [self addChild:pipeTop];

    pipeTop.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:pipeTop.size];   
    [pipeTop.physicsBody setAffectedByGravity:NO];   
    [pipeTop.physicsBody setDynamic:NO];

    [pipeTop.physicsBody setCategoryBitMask:kPipeCategory];  
    [pipeTop.physicsBody setCollisionBitMask:kplayerCategory]; 
}

管道图片显示正确,但碰撞区域设置不正确。我的代码有什么问题!

谢谢你的帮助

4

1 回答 1

0

有几件事可能会导致这种情况:

  1. 我相信 yScale 会缩小图像但在以后用于设置物理体大小时不会改变值。(本质上是物理体=原始图像大小)

  2. 我没有看到一个contactBitMask,它可以让您检查您的(flappy felipe 还是 mario?)何时与管道接触。

要解决此问题,请尝试:

  • 使用您当前使用的相同变量绘制一个矩形并将其着色为黑色。这将向您显示物理实体的绘制位置。

  • 将他们设置为有联系事件,然后记录他们的联系

于 2014-03-19T02:00:05.057 回答