SpriteKit物理不起作用

时间:2014-11-08 13:44:50

标签: ios objective-c sprite-kit

我根据苹果公司的节目指南做了一个精灵,但是当比赛开始时,精灵应该下降(根据指南),但它没有。

我是这样做的:

- (void) createContents {
    self.backgroundColor = [SKColor colorWithRed:0.1 green:0.6 blue:0.8 alpha:1];
    self.scaleMode = SKSceneScaleModeAspectFill;

    SKSpriteNode *player = [self newPlayer];
    player.name = @"player";
    player.position = CGPointMake(CGRectGetMidX(self.frame), player.size.width/1.5);

    [self addChild:player];
}
- (SKSpriteNode *) newPlayer {
    SKSpriteNode *aPlayer = [[SKSpriteNode alloc]initWithColor:[SKColor whiteColor] size:CGSizeMake(40,40)];
    aPlayer.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:aPlayer.size];


    return aPlayer;
}
didMoveToView

调用 createContent 方法

为什么它不像指南中所述的苹果一样,从屏幕底部坠落

3 个答案:

答案 0 :(得分:2)

我相信播放器确实掉到了底部屏幕,但它太快了你错过了它。因为,屏幕底部没有物理机身可以停止它,并且在屏幕上显示场景后直接创建播放器。

有两种简单的方法可以证明它:

  • 如果您设置aPlayer.physicsBody.affectedByGravity = NO;,您会看到aPlayer节点浮动。

  • 如果您将[self addChild:player];更改为[self performSelector:@selector(addChild:) withObject:player afterDelay:4.0];,您肯定会在4秒钟后观察aPlayer突然出现并掉到屏幕底部

并且您应该将aPlayer的Y位置设置为更高的值以查看更多的下降过程。在SpriteKit坐标系中,(0,0)坐标位于左下角

答案 1 :(得分:0)

使用Cmd + Shift + F查找搜索一些内容。

  1. 确保您没有意外设置.dynamic = NO;
  2. 确保您没有意外地将物理世界引力设置为不合需要的东西。 (如0,0)
  3. 非常重要的一个......确保你正在启动self.physicsBody,例如......
  4.   

    self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopF​​romRect:self.frame];

答案 2 :(得分:-1)

可能因为你没有设置场景的重力属性。

在你的SKScene:

self.physicsWorld.gravity = CGVectorMake(0,x) // replace x with your desired gravity magnitude and direction (I suggest -9.8)