- 43
- 0
问题描述
网上找了一段canvas小球碰撞运动的代码,代码很棒,但是有个问题就是当两个小球一开始就是交叉的时候,它们的运动轨迹是一样的,按理说运动轨迹是随机的,不知道为什么会出现一起跑的情况?
相关代码
window.onload = function () {
var canvas = document.getElementById("ball");
var cxt = canvas.getContext("2d");
var r = 20;
var maxNum = 5;
var ballArray = new Array();
var maxX = canvas.width;
var maxY = canvas.height;
for (var n = 0; n < maxNum; n++) {
var x = {
x: getRandomNumber(r, maxX - r),
y: getRandomNumber(r, maxY - r),
r: r,
vX: getRandomNumber(0.5, 1),
vY: getRandomNumber(0.5, 1),
color: getRandomColor(),
}
ballArray.push(x);
}
function getRandomColor() {
return (function (m, s, c) {
return (c ? arguments.callee(m, s, c - 1) : '#') +
s[m.floor(m.random() * 16)]
})(Math, '0123456789abcdef', 5)
}
draw();
function draw() {
cxt.fillStyle = "#000";
cxt.fillRect(0, 0, canvas.width, canvas.height);
for (i in ballArray) {
var x = i;
ballArray[i].x += ballArray[i].vX /2;
ballArray[i].y += ballArray[i].vY/2;
if (ballArray[i].x >= maxX - r) {
ballArray[i].x = maxX - r;
ballArray[i].vX = -ballArray[i].vX;
}
if (ballArray[i].x <= r) {
ballArray[i].x = r;
ballArray[i].vX = -ballArray[i].vX;
}
if (ballArray[i].y >= maxY - r) {
ballArray[i].y = maxY - r;
ballArray[i].vY = -ballArray[i].vY;
}
if (ballArray[i].y <= r) {
ballArray[i].y = r;
ballArray[i].vY = -ballArray[i].vY;
}
for (var j = 0; j < maxNum; j++)
if (j !== x) {
if (Math.round(Math.pow(ballArray[x].x - ballArray[j].x, 2) +
Math.pow(ballArray[x].y - ballArray[j].y, 2)) <=
Math.round(Math.pow(r + r, 2))) {
var tempX = ballArray[x].vX;
var tempY = ballArray[x].vY;
ballArray[x].vX = ballArray[j].vX;
ballArray[j].vX = tempX;
ballArray[x].vY = ballArray[j].vY;
ballArray[j].vY = tempY;
}
}
cxt.beginPath();
cxt.fillStyle = ballArray[i].color;
cxt.arc(ballArray[i].x, ballArray[i].y, ballArray[i].r, 0, Math.PI * 2, true);
cxt.closePath();
cxt.fill();
}
setTimeout(function () {
draw();
}, 10);
}
function getRandomNumber(min, max) {
return (min + Math.floor(Math.random() * (max - min + 1)))
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
按理说运动轨迹是随机的,互不影响的。
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
