我正在使用 SDL 开发个人游戏,我有两个数组:
float player[]={...};
float blueEnemy[]={...};
我还有一个功能:
float *moveOpposite(float *actor) {
// Skipped content.
return actor;
}
然后,我有一个有问题的:
float *collideWith(float *x, float *y, float *(f)(float *a)) {
if ((((x[0]+x[2])>y[0])&&(x[0]<(y[0]+y[2])))&&(((x[1]+x[3])>y[1])&&(x[1]<(y[1]+y[3])))) {
*x = *f(x);
}
return x;
}
忽略碰撞混乱。在我的游戏中,actors 是具有 xPos、yPos、宽度、高度、速度等的数组。前四个是强制性的。像“moveActor”或“moveOpposite”这样的函数可以任意地与所有actor一起工作。collideWith 是这些函数之一。所以,我来解释一下:
它将第一个参与者和第二个参与者(它们是至少大小为 4 的数组)作为参数,它还接受一个函数作为参数。这个参数函数也接受一个actor作为参数并返回它。在 collideWith 函数内部,在测试之后,我用参数函数的结果更新第一个参数,并返回结果。我会这样应用它:
*player=*collideWith(player,blueEnemy,*moveOpposite(player));
当我尝试编译它时,我得到一个可怕的错误:
cannot convert 'float' to 'float* (*)(float*)' for argument '3' to 'float* collideWith(float*, float*, float* (*)(float*))'|
这种将另一个函数作为参数的碰撞函数对我的引擎来说非常重要。