Oop 花栗鼠:如何删除身体?
删除花栗鼠尸体的正确方法是什么?简单地调用Oop 花栗鼠:如何删除身体?,oop,chipmunk,Oop,Chipmunk,删除花栗鼠尸体的正确方法是什么?简单地调用cpBodyFree或cpBodyDestroy似乎不起作用,因为主体仍然显示在cpSpaceEachBody迭代中 if(body->p.y < -260 || fabsf(body->p.x) > 340) { /* body is permanently off the screen */ /* so it needs to be permanently deleted */ cpBodyFre
cpBodyFree
或cpBodyDestroy
似乎不起作用,因为主体仍然显示在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); ??
}
if(body->p.y<-260 | | fabsf(body->p.x)>340){
/*身体永远离开屏幕*/
/*所以它需要被永久删除*/
cpBodyFree(body)??
cpBodyDestroy(body)??
}
查看
调用cpBodyFree
(它在内部调用cpBodyDestroy
更新:除非您不需要验证和
cpfree(body)
call;)以下是删除body的方法:
body->data=shape;
if (body->p.y < -260 ) {
cpSpaceRemoveShape(space, body->data);
cpSpaceRemoveBody(space, body);
cpShapeFree(body->data);
cpBodyFree(body);
}
if(正文->年度<-260){
cpSpaceRemoveShape(空间、主体->数据);
cpSpaceRemoveBody(空间、主体);
cpShapeFree(主体->数据);
cpBodyFree(body);
}
您必须确保形状是否已添加为静态,可能以下代码会有所帮助:
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;
}
好吧,对于一个从未听说过你在说什么的人来说,这是一个奇怪的问题的开始。令人惊讶的是,这不是一个Ruby库time@mmyers,在你指出之前,它看起来并不奇怪。幸好这不是一个叫“我的同事”的包裹!好的,但是如果你不再需要它,你只会删除这个空间,对吗?如果你有其他花栗鼠的身体,你需要保持空间,对吗?好的,我试着从静态cpBool begin或preSolve花栗鼠方法中调用一个方法。我把它放在了,但当然它不起作用,因为它不是C++代码而是Objc。[自我改造屏蔽:屏蔽];如何在C++中编写?
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;
}