2014-11-08 64 views
1

我根據蘋果的編程指南做了一個精靈,但是當遊戲開始時,精靈應該落下(根據指南),但它不會。SpriteKit物理不起作用

這是我如何做的:

- (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; 
} 

createContent中方法由didMoveToView稱爲

爲什麼不呢,像指南中指出蘋果,驟降通過底部的屏幕

+0

你能詳細說一下嗎?你看到玩家精靈,它只是沒有移動,或者玩家精靈沒有出現? – jonogilmour 2014-11-11 00:42:09

+0

好吧,這可能是一個小故障,或者我可能錯過了一些東西,但它現在正在工作 – SemAllush 2014-11-11 07:07:01

回答

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)座標位於左下角

+0

玩家的位置不會改變,它仍然是它的第一個放置位置 – SemAllush 2014-11-08 17:26:35

+0

需要更多的信息你如何初始化你的SKView? 「SKScene」中的其他內容?只是fyi,當您選擇遊戲模板時,我正在Xcode的模板項目上測試此代碼。也許你也可以從那裏開始。 – Peter 2014-11-09 00:49:41

-1

可能是因爲您沒有設置場景的重力屬性。

在你SKScene:

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

重力默認在(0,-9.81)。這不應該是問題。 – Scott 2014-11-11 00:06:00

0

使用爲Cmd + Shift + F查找搜索的幾件事情。

  1. 確保您沒有意外設置.dynamic = NO;
  2. 請確保您沒有意外地將物理世界引力設置爲不希望的東西。 (像0,0)
  3. 很重要的一條......確保你INITING self.physicsBody如...

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