2014-03-27 190 views
0

我正在用iOS編寫cocos2d 版本3,通過以下this tutorial物理世界的界限

這真的很基礎。在應用程序中的一個CCScene,我們創建了一個世界:

_physicsWorld = [CCPhysicsNode node]; 
_physicsWorld.gravity = ccp(0,-100); 
_physicsWorld.debugDraw = YES; 
[self addChild:_physicsWorld]; 

,然後添加一個主角精靈與身體。

_protagonist = [CCSprite spriteWithImageNamed:@"player.png"]; 
_protagonist.position = ccp(self.contentSize.width/2, self.contentSize.height/2); 
_protagonist.physicsBody = [CCPhysicsBody bodyWithRect:(CGRect){CGPointZero, _protagonist.contentSize} cornerRadius:0]; 
[_physicsWorld addChild:_protagonist]; 

現在,這是我的問題。主角精靈下降,因爲有一個{0; -100}重力矢量。但是,它永遠不會停止。所以它離開了屏幕,永遠不會再被看到。

這是正常的,我明白了。

所以我試圖創建一個世界邊界框,與4 CCPhysicNode。舉例來說,最重要的一個大氣壓,將底線停止主角的秋天:

CCPhysicsNode* bottom = [CCPhysicsNode node]; 
bottom.contentSize = CGSizeMake(self.contentSize.width, 20); 
bottom.position = ccp(0, self.contentSize.height); 
bottom.physicsBody = [CCPhysicsBody bodyWithRect:(CGRect){CGPointZero, bottom.contentSize} cornerRadius:0]; 
[_physicsWorld addChild:bottom]; 

據我瞭解的cocos2d的花栗鼠整合,這應該:

  • 創建一個cocos2d的物理節點在座標(0,1136)和大小的框架(320,20)
  • 附加花栗鼠身體與物理節點的大小形狀(320,20)
  • 檢測與主角的衝突(或應該嗎?它應該在相同的collisionGroup?)

屏幕上會發生什麼:什麼都沒有。是的,與debugDraw=true,沒有任何東西被繪製。主角精靈像甘道夫一樣不斷下降,而不是像厄運一樣跌落到軸線無窮遠處(甚至更遠!)的深淵。

要更改,添加bottom CCPhysicsNode不會改變一件事情。

幫助!

非常感謝回報。

+1

你在哪裏?哦,你的意思是'試驗'。 :)我不太瞭解新的CCPhysicsNode和花栗鼠,但是你應該製作一個靜態的身體(邊緣,鏈條......),而不是一個動態的身體。動態的身體也會下降。 – LearnCocos2D

+0

哦,是的!一個靜態的東西,是我需要的。不過,我不知道如何用新的API做到這一點。去環顧四周。 Btw:[pérégrination](http://en.wiktionary.org/wiki/p%C3%A9r%C3%A9grination) –

+0

正如前面所說的「LearnCocos2D」,你需要創建一個靜態主體並將其添加到主物理節點。 physicsNode僅用於包含物理實體,它不可見。因此,儘量讓一個附有靜態物理體的精靈,然後將它添加到與主角相同的物理節點 – mursang

回答

0

CCPhysicsNode只是一個容納你遊戲中所有物理對象的世界容器。不要爲每個物理對象創建一個新的。相反,創建一個CCNode並附加它的物理主體。然後將您的新CCNode添加到CCPhysicsNode。換句話說,你的代碼看起來沒問題,除了第一行應該是這樣的:

CCNode* bottom= [CCNode node];