###前提・実現したいこと
DirectX9.0cでブロック崩しを作っています
###発生している問題・エラーメッセージ
ブロック崩しを作っているのですが
上からあたったときに上に跳ね返りません
###該当のソースコード
c
1///Cseanebattle.cpp 2///当たったかどうかの処理 3void MainScene::ManageColisonPlayer1Block() 4{ 5 for (int i = 0; i < 36; i++) 6 { 7 8 if ((Player1Block[i].BlockColider[TOP_LEFT].x < (Player1Ball.GetPosX() + 10.0f)) && (Player1Block[i].BlockColider[TOP_RIGHT].x>(Player1Ball.GetPosX() - 10.0f))) 9 { 10 if (Player1Block[i].BlockColider[TOP_LEFT].y < (Player1Ball.GetPosY() + 10.0f) && Player1Block[i].BlockColider[BOTTOM_LEFT].y>(Player1Ball.GetPosY()- 10.0f)) 11 { 12 if (Player1Block[i].GetBlockUse() == true) 13 { 14 15 Player1Block[i].HitBlock(Player1Block,Player2Block, i,&Player1Status,&Player2Status); 16 ManageColisonPlayer1BlockBounde(i); 17 } 18 19 20 } 21 } 22 } 23} 24///ボール反射の処理 25void MainScene::ManageColisonPlayer1BlockBounde( int Blocknum) 26{ 27 float temp = Player1Ball.GetDegree(); 28 //下からぶつかった時 29 if (((Player1Block[Blocknum].BlockColider[BOTTOM_LEFT].x<Player1Ball.GetPosX() + 10.0f) 30 && (Player1Block[Blocknum].BlockColider[BOTTOM_RIGHT].x>Player1Ball.GetPosX() - 10.0f)) 31 && (Player1Ball.GetPosY()>Player1Block[Blocknum].BlockColider[TOP_LEFT].y)) 32 { 33 34 if (temp <= 270.0f) 35 { 36 Player1Ball.SetDegree(180.0f - (temp - 180.0f)); 37 } 38 else if (270.0f <= temp) 39 { 40 Player1Ball.SetDegree(360.0f - temp); 41 } 42 } 43 //上からぶつかった時 44 if (((Player1Block[Blocknum].BlockColider[TOP_LEFT].x<Player1Ball.GetPosX() + 10.0f) 45 && (Player1Block[Blocknum].BlockColider[TOP_RIGHT].x>Player1Ball.GetPosX() - 10.0f)) 46 && (Player1Ball.GetPosY()< Player1Block[Blocknum].BlockColider[BOTTOM_LEFT].y)) 47 { 48 if (temp <= 90.0f) 49 { 50 Player1Ball.SetDegree(90.0f + (90.0f - temp)); 51 } 52 else if (90.0f <= temp) 53 { 54 Player1Ball.SetDegree(180.0f - temp); 55 } 56 57 58 } 59 //右からぶつかった時 60 if (((Player1Block[Blocknum].BlockColider[TOP_RIGHT].y >Player1Ball.GetPosY() + 10.0f) 61 && (Player1Block[Blocknum].BlockColider[BOTTOM_RIGHT].y < Player1Ball.GetPosY() - 10.0f)) 62 && (Player1Ball.GetPosX()>Player1Block[Blocknum].BlockColider[TOP_RIGHT].x)) 63 { 64 if (270.0f <= temp) 65 { 66 Player1Ball.SetDegree(90.0f - (temp - 270.0f)); 67 } 68 else if (90.0f >= temp) 69 { 70 Player1Ball.SetDegree(360.0f - temp); 71 } 72 } 73 //左からぶつかった時 74 if (((Player1Block[Blocknum].BlockColider[TOP_LEFT].y > Player1Ball.GetPosY() + 10.0f) 75 && (Player1Block[Blocknum].BlockColider[BOTTOM_LEFT].y < Player1Ball.GetPosY() - 10.0f)) 76 && (Player1Ball.GetPosX()<Player1Block[Blocknum].BlockColider[TOP_LEFT].x)) 77 { 78 if (180.0f <= temp) 79 { 80 Player1Ball.SetDegree(90.0f + (270.0f - temp)); 81 } 82 else if (temp <= 180.0f) 83 { 84 Player1Ball.SetDegree(180.0f + (180.0f - temp)); 85 } 86 } 87}
ボールの半径は20 ブロックの大きさは横80縦80
TOP_LEFTはブロックの左上
TOP_RIGHTはブロックの右上
BOTTOM_LEFTはブロックの左下
BOTTOM_RIGHTはブロックの右下の座標をそれぞれ表しています
SetDegreでベクトルの角度を度で指定しています
270℃で真上
360℃で右
90℃で下
180℃で左に行きます
###試したこと
角度などを変えてみたのですが直りませんでした
足りない情報等あればお手数ですが教えてもらいたいです
###補足情報(言語/FW/ツール等のバージョンなど)
VS2013
DirectX 9.0c
回答2件
あなたの回答
tips
プレビュー