- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我第一次尝试碰撞算法。我尝试检查具有边界的对象的矩形大小。现在,在这个应用程序中,我制作了运行的子弹并检查是否在无时间延迟的 while 循环中发生碰撞。问题是,当我产生大约 30-40 颗子弹时,fps 变得如此之低。如果有人能教我一种可靠的方法来编写碰撞检测,我会很高兴。
对了,我用了java Vector集合(可能是迭代不够快?还是我的代码太乱了)
public void checkBoundary(int width, int height) //width and height of the applet
{
for(int i = 0; i < vec.size(); i++)
{
if(vec.get(i).x + vec.get(i).width <= 0 ||
vec.get(i).y + vec.get(i).height <= 0 ||
vec.get(i).x >= width ||
vec.get(i).y >= height)
vec.remove(i);
}
}
此 Vector 存储一个 Bullet 对象,左下角为 (x,y),(width,height)。
最佳答案
首先,您的算法不正确,因为当您使用 vec.remove(i);
删除时,i+1
元素变为 i
元素,所以你跳过一个元素。
性能问题来自这样一个事实,即在最坏的情况下,每个删除成本 O(n)
,因为每个后续元素都需要左移。试试这个:
public void checkBoundary(int width, int height) //width and height of the applet
{
LinkedList<T> outofbounds = new LinkedList<T>();
for(int i = 0; i < vec.size(); i++)
{
if(vec.get(i).x + vec.get(i).width <= 0 ||
vec.get(i).y + vec.get(i).height <= 0 ||
vec.get(i).x >= width ||
vec.get(i).y >= height)
outofbounds.add(vec.at(i));
}
vec.removeAll(outofbounds);
}
编辑:
正如Frozen Spider 指出的那样,removeAll
的开销很大。它的复杂度为 O(outofbounds.size()*vec.size())
,即 O(n^2)
。当稍微改变逻辑时,您可以推导出保证在 O(vec.size())
中工作的算法。
public void checkBoundary(int width, int height) //width and height of the applet
{
LinkedList<T> newvec = new LinkedList<T>();
for(int i = 0; i < vec.size(); i++)
{
if(vec.get(i).x + vec.get(i).width <= 0 ||
vec.get(i).y + vec.get(i).height <= 0 ||
vec.get(i).x >= width ||
vec.get(i).y >= height)
continue;
newvec.add(vec.at(i));
}
vec.clear();
// or vec = newvec if there are no others reference sharing the same object as vec
vec.addAll(newvec);
}
关于java - 我的碰撞检测在 Java 小程序中生成低帧率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9079306/
我使用 QBFC v13 和 Delphi XE6。 目标是从我的应用程序创建 Estimate 并将其参数设置到 QuickBooks 中。 我从 QBFC13 导入类型库并将其添加到我的项目中。
我有一个数据库,其中有很多格式不正确的地址。在这个地址中,我只有一个街道地址或带有城市名称的街道。在我的应用程序中,用户选择一些类别,然后我想在 map 上显示例如 50,100,300 等地址。(不
在大多数软件项目中,缺陷源自需求、设计、编码和缺陷更正。根据我的经验,大多数缺陷都源于编码阶段。 我有兴趣了解软件开发人员使用哪些实用方法来降低缺陷注入(inject)率。 我已经看到以下方法的使用取
我正在使用实时 API 中的标签订阅构建一个应用程序,并且有一个与容量规划相关的问题。我们可能有大量用户同时发布到订阅的主题标签,因此问题是 API 实际发布到我们的订阅处理端点的频率是多少?例如,如
尝试使用 NULLIF 或 IFNULL 函数,但仍收到被零除的消息。 SELECT client_id ,COUNT(distinct CASE WHEN status = 'failed' THE
我目前正在开发一个使用 Django-rest-framework 制作的 API。我必须根据每个用户组设置限制率。 我们目前使用默认配置的 memcached 作为缓存后端,即按站点缓存。 在使用
我认为有时在神经网络(特别是一般对抗网络)训练期间改变丢失率可能是一个好主意,从高丢失率开始,然后线性地将丢失率降低到零。您认为这有意义吗?如果是的话,是否有可能在 tensorflow 中实现这一点
我有一个 Windows Server 2008,Plesk 运行着两个网站。有时服务器运行缓慢,并且有一个 named.exe 进程使 CPU 峰值达到 100%。它持续很短的时间,过一会儿它又来了
我正在使用 scikit-learn 随机森林分类器,我想通过将成功投票所需的树数量从大于 50% 增加到 75% 来降低 FP 率,在阅读文档后我不这样做确定如何做到这一点。有没有人有什么建议。 (
当我连续按下按键事件(字母 k)时,为什么以下按键事件不会减慢 3000 密耳?如果我按住手指,计数会迅速增加,因为 mcount 上没有 setTimeout。这是为什么?每次计数之间应该有延迟,但
我是一名优秀的程序员,十分优秀!