【问题标题】:Pixel perfect collision of canvas arcs画布弧线的像素完美碰撞
【发布时间】:2012-08-10 16:59:15
【问题描述】:

我在画布上有许多实体。我正在检查玩家实体是否正在触摸食物实体。玩家实体根据用户的输入移动,食物实体在屏幕周围随机缓慢移动。目前我正在这样做:

for (var i = 0; i < foodPieces.length; i++) {
    if (Math.abs(foodPieces[i].x - player.x) < (foodPieces[i].radius + player.radius) 
        && Math.abs(foodPieces[i].y - player.y) < (foodPieces[i].radius + player.radius))
    { 
        return true;        
    }
}

但是,玩家通常会提前检测到食物实体,最多相差 5-10 像素左右。如果重要的话,食物实体半径在一定程度上是随机的,并且玩家实体半径在整个游戏中都会增加。我试图弄清楚为什么会及早检测到碰撞以及如何让它正确检测到。有什么想法吗?

【问题讨论】:

    标签: javascript html canvas collision


    【解决方案1】:

    您基本上检查了边界矩形碰撞而不是圆形碰撞。

    尝试计算点之间的实际距离:

    var dist = Math.sqrt(Math.pow(foodPieces[i].x - player.x,2)+Math.pow(foodPieces[i].y - player.y,2));
    if (dist<(foodPieces[i].radius + player.radius)) return true;
    

    这使用毕达哥拉斯语句计算距离:C^2 = A^2 + B^2

    【讨论】:

    • 打败我。也许您可以为其他观众多解释一下真实的距离(直角三角形和所有爵士乐)?
    • 给我一点时间画点东西。
    • 也感谢您的精彩解释 :)
    • 这对我帮助很大,请注意 Math.abs() 消失了,因为平方负数变为正数。 +1
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2015-09-22
    相关资源
    最近更新 更多