-4

C ++でエアホッケーゲームを作成しています(これはC ++での最初のプログラムです)。パックの速度に問題があります (速度は遅くなりますが、決して止まりません)。どうすればそれを機能させることができますか?パックとパドルの速度を制御するコードは次のとおりです (まだパドルは 1 つしかありません)。

(paddle1 には paddle1 の座標が含まれ、paddle1helper は前の座標です)

paddle1speed = Point(paddle1.x-paddle1helper.x,paddle1.y-paddle1helper.y);

if(puck.x > paddle1.x-40 && puck.x < paddle1.x+40 && puck.y < paddle1.y+40 && puck.y > paddle1.y-40) {
    if(paddle1speed.x <= 1 && paddle1speed.y <= 1)
        puckspeed*=-1;
    else puckspeed=paddle1speed;
}

puckspeed.x/=1,9;
puckspeed.y/=1,9;

puck+=puckspeed;
if((puck.y > winsize.y-15 || puck.y < 15))
    puckspeed.y *=-1;
if((puck.x > winsize.x-15 || puck.x < 15))
    puckspeed.x *=-1;

paddle1helper = paddle1;

私はそれが最善の解決策ではないことを知っています。アドバイスをいただけますか?

4

2 に答える 2

1

あなたが持っている1つの問題はここにあります:

puckspeed.x/=1,9;

式は次のように解析されるため、コンマ演算子, オペランドpuckspeed.x/=1およびを使用しています。9

(puckspeed.x/=1) ,(9);

コンマ演算子は、最初のオペランドを評価し、結果を破棄し、2 番目のオペランドを評価して、評価結果を返します。あなたの場合、式の正味の効果は

puckspeed.x/=1;

で除算するつもりだった可能性が非常に高く1.9、これは次のように実行できます。

puckspeed.x/=1.9;
              ^ HERE

-Wallフラグを付けてコンパイルすると、GCC は役立つ警告を表示します。

警告: コンマ演算子の右側のオペランドは効果がありません [-Wunused-value]

于 2013-06-09T08:24:21.643 に答える
1

存在しない Continental C++ 言語でプログラミングしています。浮動小数点定数の形式は (たとえば)1,9です。アングロサクソン C++ では、式1,9はコンマ演算子式であり、2 番目の引数に評価されます。この場合は9. 代わりにこれを試してください:

puckspeed.x/=1.9;
puckspeed.y/=1.9;
于 2013-06-09T08:07:48.653 に答える