我有一個球,當它與精靈發生碰撞時觸發一個動作。隨後的動作完成後,重置它的位置與重置Sprite - Box2d(Cocos2d)
-(void)removeBall
{
[self stopAllActions];
_ballBody->SetTransform(b2Vec2(10, 2), 0);
}
不過,[自stopAllActions]不會停止行動。我怎樣才能停止這一行動? 有什麼建議嗎?
感謝
我有一個球,當它與精靈發生碰撞時觸發一個動作。隨後的動作完成後,重置它的位置與重置Sprite - Box2d(Cocos2d)
-(void)removeBall
{
[self stopAllActions];
_ballBody->SetTransform(b2Vec2(10, 2), 0);
}
不過,[自stopAllActions]不會停止行動。我怎樣才能停止這一行動? 有什麼建議嗎?
感謝
我使用
-(void)update:(ccTime)delta
{
}
以不斷檢查球體是否與其他球體碰撞並使用加速度計移動球體。所以,要重置球體的位置,我只需更換場景,即調用「dealloc」,然後再次啓動場景。
[[CCDirector sharedDirector] replaceScene:[HelloWorldLayer scene]];
這不是你想要的方式 – NIKHIL 2011-06-14 06:24:36
==>你可以做我在下面
做的方式==>銷燬身體對象,並創建新的復位位置是你想要設置 這肯定會工作
_world->DestroyBody(_body);
b2BodyDef _playerBodyDef;
_playerBodyDef.type=b2_dynamicBody;
_playerBodyDef.position.Set(160/PTM_RATIO,240/PTM_RATIO);
_playerBodyDef.userData=_ball;
_body=_world->CreateBody(&_playerBodyDef);
//create the shape for the rounded stick
b2CircleShape PlayerShape;
PlayerShape.m_radius = 15.0/PTM_RATIO;
//fixtureDef specifying the shape to circle
b2FixtureDef _playerShapeDef;
_playerShapeDef.shape = &PlayerShape;
_playerShapeDef.density = 1.0f;
_playerShapeDef.friction = 0.5f;
_playerShapeDef.restitution = 1.0f;
_playerShapeDef.filter.groupIndex =k_largeGroup;
_body->CreateFixture(&_playerShapeDef);
好運
哦,好的,謝謝,所以我基本上只是完全刪除球體,然後再添加它?我必須去上班,但當我回來時我會測試它。 – Jonathan 2011-06-13 11:01:37
它沒有工作。這是因爲我正在「更新」方法中運行該操作(我在身體與另一個主體發生碰撞之後運行該操作)。所以,我剛剛替換了場景([[CCDirector sharedDirector] replaceScene:[HelloWorldLayer scene]]「 – Jonathan 2011-06-13 20:35:22
」您需要查看您的代碼並將一個方法放入刻度計時器方法中,然後調用該方法,以便可以再次銷燬該對象你也可以重置位置 – NIKHIL 2011-06-14 06:22:01
StopAllActions是Cocos2D,而不是Box2D。我所做的重用身體,精靈,粒子等被設置爲可見= NO和body-> SetActive(false)。
這是停用對象:
CCSprite *sprite = [projectiles objectAtIndex:i];
// Just to continue a loop if the sprite is not visible
if(sprite.visible == NO) continue;
sprite.visible = NO;
b2Body *body = projectileBodyTracker[i];
body->SetActive(false);
這是重新激活的對象:
CCSprite *sprite = [projectiles objectAtIndex:i];
sprite.position = moveToPosition;
b2Body *body = projectileBodyTracker[i];
body->SetTransform(moveToPositionVector, rotation);
body->SetActive(true);
我已經寫了額外的代碼了我的頭頂,所以我不能完全確定它是正確的(語法上),但這是我做到這一點的方式。
我使用cocos2d來運行所需的操作,我需要重置精靈,使其可見= no不是不足icient – Jonathan 2011-06-14 19:40:19
簡化:Cocos2D與Box2D兼容,但Box2D與Cocos2D不完全兼容。如果你用Cocos2D移動精靈,你正在打破物理模擬。如果您只想使用Box2D進行碰撞檢測(並且根本不模擬任何物理),那麼您將您的身體設置爲傳感器,並使用您的聯繫人偵聽器告訴您何時發生了碰撞。 – 2011-06-15 00:21:01
我爲我的遊戲使用了Box2d,但我也在使用和動作來爲精靈製作動畫時,它會「脫落」平臺。然後,我需要它重置。 – Jonathan 2011-06-15 00:28:36
你在stopAllActions中執行了什麼? – NIKHIL 2011-06-13 07:39:15