21

私はこれを数時間調べましたが、役に立ちませんでした。基本的に私は持っています

struct rectangle {
    int x, y, w, h;
};

rectangle player::RegionCoordinates() // Region Coord
{
    rectangle temp;
    temp.x = colRegion.x + coordinates.x;
    temp.w = colRegion.w;
    temp.y = colRegion.y + coordinates.y;
    temp.h = colRegion.h;

    return temp;
}

// Collision detect function
bool IsCollision (rectangle * r1, rectangle * r2)
{
    if (r1->x < r2->x + r2->w &&
        r1->x + r1->w > r2->x &&
        r1->y < r2->y + r2->h &&
        r1->y + r1->h > r2->y) 
        {
            return true;
        }
    return false;
}

//blah blah main while loop
if (IsCollision(&player1.RegionCoordinates(), &stick1.RegionCoordinates())) //ERROR
{
    player1.score+=10;
    stick1.x = rand() % 600+1;
    stick1.y = rand() % 400+1;
    play_sample(pickup,128,128,1000,false);
}

何か案は?それは本当に明白なことだと確信していますが、私の人生ではそれを理解することはできません.

4

3 に答える 3

20

RegionCoordinates()オブジェクトを値で返します。これは、 の呼び出しRegionCoordinates()が の一時的なインスタンスを返すことを意味しますrectangle。エラーが示すように、この一時オブジェクトのアドレスを取得しようとしていますが、これは C++ では合法ではありません。

IsCollision()とにかくポインターを取るのはなぜですか?const 参照によってパラメータを取得する方が自然です。

bool IsCollision (const rectangle &r1, const rectangle &r2) {
if (r1.x < r2.x + r2.w &&
    r1.x + r1.w > r2.x &&
    r1.y < r2.y + r2.h &&
    r1.y + r1.h > r2.y) {
        return true;
    }
        return false;
}
//blah blah main while loop
if (IsCollision(player1.RegionCoordinates(), stick1.RegionCoordinates())) //no error any more
{
player1.score+=10;
stick1.x = rand() % 600+1;
stick1.y = rand() % 400+1;
play_sample(pickup,128,128,1000,false);
}
于 2013-05-10T11:53:25.280 に答える