Ios 将SKSpriteNode限制在手机屏幕上
我遵循了一个制作Flappy Bird风格卷轴的教程。本教程没有涉及的一件事是如何防止用户在屏幕上方飞行,越过所有管道的顶部。在评论中提到了这一点,但没有具体分享如何解决这一问题。一个人说他只是把鸟限制在自己的框架内。我不知道该怎么做。下面是初始化“bird”的代码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
- (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的下降吗?它不应该有太大的影响。