0

私はSDLを使用して個人的なゲームに取り組んでおり、2つの配列があります:

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;
}

衝突の混乱を無視します。私のゲームでは、アクターは xPos、yPos、幅、高さ、速度などの配列です。最初の 4 つは必須です。「moveActor」や「moveOpposite」などの関数は、すべてのアクターで任意に機能します。CollideWith はこれらの関数の 1 つです。だから、私はそれを説明します:

最初のアクターと 2 番目のアクター (少なくともサイズ 4 の配列) をパラメーターとして取り、関数もパラメーターとして取ります。この引数関数もアクターを引数として取り、それを返します。テストの後、collideWith 関数内で、最初の引数を引数関数の結果で更新し、結果を返します。私は次のように適用します:

*player=*collideWith(player,blueEnemy,*moveOpposite(player));

コンパイルしようとすると、恐ろしいエラーが発生します。

cannot convert 'float' to 'float* (*)(float*)' for argument '3' to 'float* collideWith(float*, float*, float* (*)(float*))'|

別の関数を引数として取るこの衝突関数は、私のエンジンにとって非常に重要です。

4

1 に答える 1