如何给屏幕边缘一个物理体

Posted

技术标签:

【中文标题】如何给屏幕边缘一个物理体【英文标题】:How to give screen edge a physics body 【发布时间】:2014-02-22 00:43:03 【问题描述】:

我有一个背景精灵,我想给它物理体。

background.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(screenWidth , screenHeight)];

问题是精灵在屏幕边界内,我试图在这些精灵碰到屏幕边缘时检测到它们的碰撞。相反,它会自动检测碰撞,因为我的精灵已经在背景的物理体内。我该怎么办?

更新:以上问题已为我解答,现在我有另一个问题。它以正确的方式检测接触,它与我的背景大小和位置有关,有人可以帮助我。

//init several sizes used in all scene
    screenRect = [[UIScreen mainScreen] bounds];
    screenHeight = screenRect.size.height;
    screenWidth = screenRect.size.width;

    //set background
    self.background = [SKSpriteNode spriteNodeWithImageNamed:@"GameBG3.5inchN.png"];
    self.background.size = CGSizeMake(screenHeight, screenWidth);
    self.background.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    //add pphysics body
    self.background.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:screenRect]; // 1
    self.background.physicsBody.dynamic = YES; // 2
    self.background.physicsBody.categoryBitMask = screenEdge; // 3
    self.background.physicsBody.contactTestBitMask = cd | floppy; // 4
    self.background.physicsBody.collisionBitMask = 0; // 5

    [self addChild:self.background];

答案:问题是它在哪里初始化我的尺寸游戏是横向的,但值是纵向的

【问题讨论】:

【参考方案1】:

您需要基于边缘的主体,而不是基于体积的主体。使用bodyWithEdgeLoopFromRect: 并查看physics chapter in the programming guide。

【讨论】:

以上是关于如何给屏幕边缘一个物理体的主要内容,如果未能解决你的问题,请参考以下文章

触摸事件仅在 iOS 9 的左屏幕边缘附近延迟。如何解决?

SpriteKit - 用物理体绘制包含其他圆圈的圆圈

SKPhysics 与 Swift 和 SpriteKit

如何在屏幕边缘包裹blit?

如何在与另一个物理体碰撞时阻止物体失去位置

iOS检测到屏幕左边缘外的拖动