首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有一种更有效的方法来处理这个问题吗?

有一种更有效的方法来处理这个问题吗?
EN

Stack Overflow用户
提问于 2020-01-31 03:40:23
回答 1查看 56关注 0票数 0

我目前正在用Java开发一个在线游戏的扩展。我目前正在处理隐形传送,以了解玩家是否传送了距离distance参数可以达到的特定距离。

问题是,我知道这在CPU上是一个超级密集的任务,即使我确实试图从主线程上卸载它。

有没有更有效的方法来处理这件事,或者我基本上必须重新组织整个事情?

this.square就是Math.pow();,this.sqrt就是Math.sqrt();,this.hypot如下:

代码语言:javascript
复制
default double hypot(double... numbers) {
        double squaredSum = 0.0;

        int length = numbers.length;
        int count = 0;

        while (count < length) {
            double number = numbers[count];
            squaredSum += Math.pow(number, 2.0);
            ++count;
        }
        return this.sqrt(squaredSum);
    }

这就是我检查玩家是否传送的方法

代码语言:javascript
复制
public boolean anyNear(CustomLocation location, double distance) {
    if (!this.locations.isEmpty()) {
        Iterator<TeleportSnapshot> iterator = this.locations.iterator();

        if (iterator.hasNext()) {
            TeleportSnapshot teleport = iterator.next();

            double deltaX = location.getX() - teleport.x;
            double deltaY = location.getY() - teleport.y;
            double deltaZ = location.getZ() - teleport.z;

            while (!(this.hypot(deltaX, deltaY, deltaZ) < this.sqrt(this.square(distance)))) {
                if (iterator.hasNext()) {
                    teleport = iterator.next();
                    deltaX = location.getX() - teleport.x;
                    deltaY = location.getY() - teleport.y;
                    deltaZ = location.getZ() - teleport.z;
                } else {
                    return false;
                }
            }
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-04 02:28:35

我同意大卫·齐默尔曼的观点,你可能不应该在计算中使用平方根。

而不是做

代码语言:javascript
复制
sqrt(dx^2 + dy^2 + dz^2) < sqrt(distance^2),

您可以使用:

代码语言:javascript
复制
dx^2 + dy^2 + dz^2 < distance^2

这对cpu更友好。不过,用于抵押权的辅助函数的名称将不再适合...

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

https://stackoverflow.com/questions/59993370

复制
相关文章

相似问题

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