重设精灵-Box2dCocos2d

问题描述

| 我有一个球,当它与精灵碰撞时会触发动作。然后,在操作完成后,将其重置为
-(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]];