質問: Player1Ball.GetDegree(); //下からぶつかった時 if (((Player1Block[Blocknum].BlockColider[BOTTOM_LEFT].xPlayer1Ball.GetPosX() - 10.0f)) && (Player1Ball.GetPosY()>Player1Block[Blocknum].BlockColider[TOP_LEFT].y)) { if (temp <= 270.0f) { Player1Ball.SetDegree(180.0f - (temp - 180.0f)); } else if (270.0f <= temp) { Player1Ball.SetDegree(360.0f - temp); } } //上からぶつかった時 if (((Player1Block[Blocknum].BlockColider[TOP_LEFT].xPlayer1Ball.GetPosX() - 10.0f)) && (Player1Ball.GetPosY()< Player1Block[Blocknum].BlockColider[BOTTOM_LEFT].y)) { if (temp <= 90.0f) { Player1Ball.SetDegree(90.0f + (90.0f - temp)); } else if (90.0f <= temp) { Player1Ball.SetDegree(180.0f - temp); } } //右からぶつかった時 if (((Player1Block[Blocknum].BlockColider[TOP_RIGHT].y >Player1Ball.GetPosY() + 10.0f) && (Player1Block[Blocknum].BlockColider[BOTTOM_RIGHT].y < Player1Ball.GetPosY() - 10.0f)) && (Player1Ball.GetPosX()>Player1Block[Blocknum].BlockColider[TOP_RIGHT].x)) { if (270.0f <= temp) { Player1Ball.SetDegree(90.0f - (temp - 270.0f)); } else if (90.0f >= temp) { Player1Ball.SetDegree(360.0f - temp); } } //左からぶつかった時 if (((Player1Block[Blocknum].BlockColider[TOP_LEFT].y > Player1Ball.GetPosY() + 10.0f) && (Player1Block[Blocknum].BlockColider[BOTTOM_LEFT].y < Player1Ball.GetPosY() - 10.0f)) && (Player1Ball.GetPosX()
回答: 頭がごっちゃりしたので全部検証していませんが、 画面の左下が(0,0)の位置ではないのでしょうか? 当たり判定自体あっているでしょうか。 デバッグモードにしてステップ実行してやればわかりそうですが、上跳ね返り以降の、左右跳ね返り処理に入っていってませんか? 各々が該当すれば、returnで返してやればいいような気もします それと float temp = Player1Ball.GetDegree(); はボールの進入角度(進む方向)だと思いますが、 コメントが正しいとすると、上から来たときは下にしか行かないような ``` if (temp <= 90.0f) { Player1Ball.SetDegree(90.0f + (90.0f - temp)); } else if (90.0f <= temp) { Player1Ball.SetDegree(180.0f - temp); } ``` 上(270) 左(180) 右(360=0) 下(90) なのだから、90+90-tempでは、180以下は確定なので全部下方向 180-tempでも同じ、全部下方向ではないですか?