花栗鼠:如何删除身体?

时间:2010-02-12 22:31:05

标签: oop chipmunk

删除花栗鼠身体的正确方法是什么?简单地调用cpBodyFreecpBodyDestroy似乎不起作用,因为正文仍显示在cpSpaceEachBody次迭代中。

if(body->p.y < -260 || fabsf(body->p.x) > 340) {
    /* body is permanently off the screen    */
    /* so it needs to be permanently deleted */
    cpBodyFree(body);      ??
    cpBodyDestroy(body);   ??
}

3 个答案:

答案 0 :(得分:4)

以下是删除正文的方法:

  1. 如果有与身体相关联的形状,请从空间中删除形状并将其删除。
  2. 从空间中移除身体。 (这是我失踪的部分。)
  3. 删除空格。
  4. 以下是如何让Plink演示版在一次五角形淋浴中降雨并在清洁时进行清理 他们离开了屏幕。

    1. 将此行添加到“//添加大量五边形”循环中。这样我们可以释放附着在身体上的形状。

      body->data=shape;
      
    2. 从空间中移除形状和身体,然后释放形状和身体。它没有 如果你首先移除/释放形状或者首先释放形状,只要你这么做似乎很重要 请记住,当你释放身体时,你会失去指向形状的指针。将 eachBody 功能更改为:

      if (body->p.y < -260 ) {
          cpSpaceRemoveShape(space, body->data);
          cpSpaceRemoveBody(space, body);
          cpShapeFree(body->data);
          cpBodyFree(body);
      }
      

答案 1 :(得分:0)

查看lib code

void cpBodyDestroy(cpBody *body){}

void
cpBodyFree(cpBody *body)
{
    if(body){
        cpBodyDestroy(body);
        cpfree(body);
    }
}

调用cpBodyFree(它在内部调用cpBodyDestroy。

更新:除非您不需要验证和cpfree(body)电话; )

答案 2 :(得分:0)

你必须确定形状是否已经添加为静态,可能这段代码会有所帮助:

    if(shape != NULL)
    {
        int isStatic = 1;
        cpBody *bd = cpShapeGetBody(shape);
        if(bd != NULL)
        {
            if(!cpBodyIsRogue(bd) && !cpBodyIsStatic(bd)) //second condition is just to make sure
            {
                isStatic = 0;
                cpSpace *sp1 = cpBodyGetSpace(bd);
                if(sp1 != NULL)
                {
                    cpSpaceRemoveBody(sp1, bd); //remove body from space and then free it
                }
            }
            cpBodyFree(bd);
        }

        cpSpace *sp = cpShapeGetSpace(shape);
        if(sp != NULL)
        {
            if(isStatic)
                cpSpaceRemoveStaticShape(sp, shape);
            else
                cpSpaceRemoveShape(sp, shape); //remove shape from space and then free it
        }

        cpShapeFree(shape);
        shape = NULL;
    }