日期:2014-05-16  浏览次数:20366 次

javascript小程序,为什么两物体碰撞后不是按照90度改变方向前进
现在是按照180度碰撞折返了,但我明明是等于40的情况下,只改变了一个x或y,应该是90度才对啊,现在却变成想x和y同时改变,为什么啊,代码哪里出问题了,即使是180度折返,那也应该只有|x1-x2|=40,|y1-y2|=40这情况啊,现在却是碰了就180度返回

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-type" content="text/html;charest=UTF-8">
<title>総合演習1</title>
<style type="text/css">
#box{
position: absolute;background-color:black;
left:50px;top:50px;
width:400px;height:300px;
}
#star{
position:absolute;
left:50px;top:180px;
}
#moon{
position:absolute;
left:50px;top:180px;
}
</style>
<script type="text/javascript">
var x1 = 50;
var y1 = 180;
var x2 = 380;
var y2 = 250;
var dx1 = 5;
var dy1 = 5;
var dx2 = 5;
var dy2 = 5;
var timer;

function moveImg() {
x1 = x1 + dx1;
y1 = y1 + dy1;
x2 = x2 + dx2;
y2 = y2 + dy2;
imgStar = document.getElementById("star");
imgMoon = document.getElementById("moon");
imgStar.style.left = x1 + "px";
imgStar.style.top = y1 + "px";
imgMoon.style.left = x2 + "px";
imgMoon.style.top = y2 + "px";


if(x1 <= 50 || x1 >= 410 || ((Math.abs(x1 - x2) == 40) && (Math.abs(y1 - y2) <= 40))){
dx1 = -dx1;
}
if(x2 <= 50 || x2 >= 410 || ((Math.abs(x1 - x2) == 40) && (Math.abs(y1 - y2) <= 40))) {
dx2 = -dx2;
}
if(y1 <=50 || y1 >= 310 || ((Math.abs(y1 - y2) == 40) && (Math.abs(x1 - x2) <= 40))){
dy1 = -dy1;
}
if(y2 <=50 || y2 >= 310 || ((Math.abs(y1 - y2) == 40) && (Math.abs(x1 - x2) <= 40))) {
dy2 = -dy2;
}
timer = setTimeout("moveImg()", 25);
}

</script>
</head>

<body bgcolor="#FFFFFF" onload="moveImg();" >
<div id="box"></div>
<img src="images/star.png" id="star" />
<img src="images/moon.png" id="moon" />
</body>
</html>