Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将SKSpriteNode限制在手机屏幕上_Ios_Sprite Kit_Skspritenode - Fatal编程技术网

Ios 将SKSpriteNode限制在手机屏幕上

Ios 将SKSpriteNode限制在手机屏幕上,ios,sprite-kit,skspritenode,Ios,Sprite Kit,Skspritenode,我遵循了一个制作Flappy Bird风格卷轴的教程。本教程没有涉及的一件事是如何防止用户在屏幕上方飞行,越过所有管道的顶部。在评论中提到了这一点,但没有具体分享如何解决这一问题。一个人说他只是把鸟限制在自己的框架内。我不知道该怎么做。下面是初始化“bird”的代码 - (void)initializeBird { NSMutableArray *flappyBirdFrames = [NSMutableArray array]; for (int i = 0; i < 3

我遵循了一个制作Flappy Bird风格卷轴的教程。本教程没有涉及的一件事是如何防止用户在屏幕上方飞行,越过所有管道的顶部。在评论中提到了这一点,但没有具体分享如何解决这一问题。一个人说他只是把鸟限制在自己的框架内。我不知道该怎么做。下面是初始化“bird”的代码

- (void)initializeBird
{
    NSMutableArray *flappyBirdFrames = [NSMutableArray array];
    for (int i = 0; i < 3; i++)
    {
        NSString* textureName = nil;
        switch (i)
        {
            case 0:
            {
                textureName = @"Yellow_Bird_Wing_Up";
                break;
            }
            case 1:
            {
                textureName = @"Yellow_Bird_Wing_Straight";
                break;
            }
            case 2:
            {
                textureName = @"Yellow_Bird_Wing_Down";
                break;
            }
            default:
                break;
        }

        SKTexture* texture = [SKTexture textureWithImageNamed:textureName];
        [flappyBirdFrames addObject:texture];
    }
    [self setFlappyBirdFrames:flappyBirdFrames];

    self.flappyBird = [SKSpriteNode spriteNodeWithTexture:[_flappyBirdFrames objectAtIndex:1]];


    _flappyBird.physicsBody = [SKPhysicsBody bodyWithTexture:_flappyBird.texture size:_flappyBird.texture.size];

    //Category to which this object belongs to
    _flappyBird.physicsBody.categoryBitMask = flappyBirdCategory;

    //To notify intersection with objects
    _flappyBird.physicsBody.contactTestBitMask = pillerCategory | bottomBackgroundCategory;

    //To detect collision with category of objects
    _flappyBird.physicsBody.collisionBitMask = 0;

    [self addChild:self.flappyBird];

}

我试图输入_flappyBird.frame=self.frame,但分配给只读属性时出错。有什么建议可以防止对象飞过所有物体吗?

您可以在场景中添加一个物理体,限制您的鸟离开视口:

//In the scene:
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]

您需要添加适当的类别/联系人位掩码,但似乎您可以处理。

谢谢。我尝试了self.physicsBody=[SKPhysicsBody-withedgeloopfromrect:self.frame];self.physicsBody.collisionBitMask=0;self.physicsBody.categoryBitMask=底部背景类别;self.physicsBody.contactTestBitMask=flappyBirdCategory;self.physicsBody.affectedByGravity=否;这使它保持在屏幕上,但这样做时性能似乎略有下降。你真的可以测量FPS的下降吗?它不应该有太大的影响。