衝突テストを手伝ってくれませんか。
フラッシュでは、Hittestを使用し、実行には2分かかりますが、HTML5は少し異なります。
以下は私のコードです。赤いブロックの内側でボールを簡単に跳ね返らせることができますが、真ん中に灰色のブロックがあり、ボールも跳ね返り、ifステートメントが乱雑になって機能しなくなります。これを行う簡単な方法はありますか、助けてください。ありがとう
<html>
<head>
</head>
<script>
var context;
var x=50;
var y=100;
var speedX=-2;
var speedY=-2;
var counter=0;
var ballCoordinates ='';
function init()
{
var c = document.getElementById('myCanvas');
context= c.getContext('2d');
setInterval(draw,10);
}
function draw()
{
context.clearRect(0,0, 300,400);
//draw number
context.fillStyle = '#fff';
context.font="160px Arial";
context.fillText(counter,10,150);
context.fillStyle = '#fff';
context.font="20px Arial";
context.fillText(ballCoordinates,10,400);
//draw ball
context.beginPath();
context.fillStyle="#0000ff";
context.arc(x,y,20,0,Math.PI*2,true);
context.closePath();
context.fill();
//draw block
context.fillStyle = '#333';
context.fillRect(100,200,100,100);
// Boundary Logic
//if( x<0 || x>300) dx=-dx;
//if( y<0 || y>300) dy=-dy;
if(x>280){
speedX=speedX * -1;
}else if(y<20){
speedY=speedY * -1;
}else if(x<20){
speedX=speedX * -1;
}else if(y>380){
speedY=speedY * -1;
}else if( x>80 && y >180 && y <320) {
speedY=speedY * -1;
}else if( x<220 && y >180 && y <320) {
speedY=speedY * -1;
}else if( y>180 && x>80 && x<220) {
speedX=speedX * -1;
}else if( y<180 && x>80 && x<220) {
speedX=speedX * -1;
}
x+=speedX;
y+=speedY;
ballCoordinates = x + 'x ' + y + 'y ' + speedX + 'speedx ' + speedY + 'speedy';
}
</script>
<body onLoad="init();">
<canvas id="myCanvas" width="300" height="400" style="background:red" >
</canvas>
</body>
</html>