我最近发现tutorial如何使用SpriteKit构建像“飞鸟”这样的游戏。我没有使用分接机构,而是使用设备加速度计来左右移动鸟。 我现在的问题是生成管道。本教程中使用的方法在x ax上创建管道而不是y ax,我想要这样做。
-(void)createPipes
{
SKTexture* _pipeTexture1 = [SKTexture textureWithImageNamed:@"Pipe1"];
_pipeTexture1.filteringMode = SKTextureFilteringNearest;
SKTexture* _pipeTexture2 = [SKTexture textureWithImageNamed:@"Pipe2"];
_pipeTexture2.filteringMode = SKTextureFilteringNearest;
SKNode* pipePair = [SKNode node];
pipePair.position = CGPointMake( self.frame.size.width + _pipeTexture1.size.width * 2, 0 );
pipePair.zPosition = -10;
CGFloat y = arc4random() % (NSInteger)( self.frame.size.height / 3 );
SKSpriteNode* pipe1 = [SKSpriteNode spriteNodeWithTexture:_pipeTexture1];
[pipe1 setScale:2];
pipe1.position = CGPointMake( self.frame.size.width/2 -100, self.frame.size.height+250 );
pipe1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:pipe1.size];
pipe1.physicsBody.dynamic = NO;
[pipePair addChild:pipe1];
SKSpriteNode* pipe2 = [SKSpriteNode spriteNodeWithTexture:_pipeTexture2];
[pipe2 setScale:2];
pipe2.position = CGPointMake( self.frame.size.width/2 +100, self.frame.size.height+250 );
pipe2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:pipe2.size];
pipe2.physicsBody.dynamic = NO;
[pipePair addChild:pipe2];
SKAction* movePipes = [SKAction repeatActionForever:[SKAction moveByX:0 y:-2 duration:0.02]];
[pipePair runAction:movePipes];
[self addChild:pipePair];
}
我的想法是生成从“天空”落下的管道,并且鸟必须在管道之间移动以保持生命。 我希望我的问题的描述非常清楚:) 感谢
澄清:管道确实从“天空”落下,但问题在于它们在屏幕上的位置。当我运行项目时,右管道或左管道之间没有间隙。我只看到一个巨大的管子掉落,垂直填充,屏幕的很大比例。
答案 0 :(得分:0)
感谢您关联本教程!
如果你想让管子掉下来,那就让它们掉下来吧!管道附有物理机构,因此它们应根据垂直位置从天上掉下来。那么就没有必要使用SKAction
来移动管道。但是,您需要将dynamic
标记更改为YES
,以便应用重力。请参阅Xcode参考:
一个布尔值,指示物理模拟是否移动了物理主体。 默认值为YES。如果值为NO,则物理机构忽略应用于它的所有力和脉冲。在基于边的主体上忽略此属性;它们是自动静止的。
答案 1 :(得分:0)
我终于找到了解决方案。通过更改管道位置的值如下所示,我设法使它们在屏幕上正确显示。
SKSpriteNode* pipe1 = [SKSpriteNode spriteNodeWithTexture:_pipe1];
pipe1.position = CGPointMake( (-0.39*pipe1.size.width), 0 );
SKSpriteNode* pipe2 = [SKSpriteNode spriteNodeWithTexture:_pipe2];
pipe2.position = CGPointMake(self.frame.size.width *1.8, 0 );
结果==> picture
现在最大的挑战是找到一种方法来使管道的位置不知何故随机。 :)