问题描述
|
我有一个球,当它与精灵碰撞时会触发动作。然后,在操作完成后,将其重置为
-(void)removeBall
{
[self stopAllActions];
_ballBody->SetTransform(b2Vec2(10,2),0);
}
但是,[self stopAllActions]不会停止该动作。如何停止该动作?
有任何想法吗?
谢谢
解决方法
==>您可以按照以下方式进行操作
==>销毁body对象并创建新对象并重置您要设置的位置
这肯定会工作
_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);
祝好运
, StopAllActions是Cocos2D,而不是Box2D。我要重用物体,精灵,粒子等的操作设置为visible = 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);
我已经在脑海中写下了额外的代码,所以我不能完全确定(语法上)它是正确的,但这就是我的方法。
, 我在用
-(void)update:(ccTime)delta
{
}
稳定检查ballBody是否已与另一个物体碰撞,并使用加速度计移动ballBody。因此,要重置ballBody的位置,我只需替换场景,该场景称为\“ dealloc \”,然后再次开始场景。
[[CCDirector sharedDirector] replaceScene:[HelloWorldLayer scene]];