首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >乒乓球比赛中通过桨的球

乒乓球比赛中通过桨的球
EN

Stack Overflow用户
提问于 2010-12-05 15:25:23
回答 4查看 1.5K关注 0票数 4

我正在用HTML5画布和JavaScript制作另一个乒乓克隆。我遇到的问题最好用下面的图表来描述:

如果球以每帧10 in的速度移动,我不能仅仅测试球是否接触到了桨,因为在这个框架步骤中,球有可能已经超过了桨。

有什么办法来测试球是否与桨相撞了?

编辑:目前我唯一能想到的两个解决方案是:

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-05 15:30:40

您可以通过确定由paddle定义的线和增量中转线是否相交来检测冲突。如果它们这样做了,那么您可以在交点应用反弹逻辑。

希望这能有所帮助。

鲍勃

请看这里:

http://mathcentral.uregina.ca/QQ/database/QQ.09.97/parsons1.html

记住,你的几何是简单的,因为你有一条垂直线作为桨。以下是简化(请看我这里的数学):

代码语言:javascript
复制
// line 1 (x1,y1) to (x2,y2)
var x1 = -1.0;
var y1 = 1.0;
var x2 = 1.0;
var y2 = -1.0;
// line 2 (x3,y3) to (x4,y4)
// note: this is the paddle and y3=y4
var x3 = -1.0;
var y3 = 0.5;
var x4 = 1.0;
var y4 = 0.5;

​var ix, iy;
function calculateIntersection(){
  var ixtop = x1*(y2-y3) + x2*(y3-y1);
  var ixbot = y2 - y1;
  var ix = ixtop/ixbot;

  var iy = y3;
}​

我相信这是最有效的方法,并会提供一个准确的答案。如果没有足够的分辨率,通过像素矩阵对角移动将导致伪影。

票数 3
EN

Stack Overflow用户

发布于 2010-12-05 15:30:17

复杂的解向量之类的。

简单的解决方案,如果通过简单地添加10 1px移动球,将其移动1 1px 10次,每次检查它是否碰撞:

代码语言:javascript
复制
for(var i = 0; i < 10; i++) {
   moveBallByOne();
   if (ballCollision()) { // you could check for a simple bounding box overlap here
       invertBallDirection();
       break;
   }
}
票数 2
EN

Stack Overflow用户

发布于 2010-12-05 15:29:30

每次你的球跳十个像素,你必须计算每一个位置之间,以确保它不是试图通过一个固体物体,正如你已经看到的会发生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4359488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档