【发布时间】:2026-01-23 23:05:01
【问题描述】:
我使用矩形编写了一个简单的碰撞检测。我必须检查渲染方法中的重叠。你能告诉我第一种方法更快吗:
render()
{
Rectangle playerRectangle = new Rectangle(
playerTransformComponent.x,
playerTransformComponent.y,
playerDimensionsComponent.width,
playerDimensionsComponent.height);
for(Rectangle block : blocksList){
//check collision
}
}
或者第二种方式:
Rectangle playerRectangle = new Rectangle();
render()
{
playerRectangle.x = playerTransformComponent.x;
playerRectangle.y = playerTransformComponent.y;
playerRectangle.width = playerDimensionsComponent.width;
playerRectangle.height = playerDimensionsComponent.height;
for(Rectangle block : blocksList){
//check collision
}
}
【问题讨论】:
-
内部 for 循环需要时间,如果您关心性能,则需要研究碰撞检测算法,不必担心创建单个对象。
-
一种有效的方法是使用动态 AABB 树。您可以在网上冲浪以获取更多信息。速度取决于“检查碰撞”循环的实施
-
你必须知道,渲染平均每秒被调用 55 次(这可能会有所不同,但重点是它会被一次又一次地调用)所以在渲染中创建一个矩形对象每秒会创建一个新对象 55 次,这反过来会调用垃圾收集,你的游戏会有延迟,你的第二种方法比第一种更好
-
为什么重要?您不妨问问我们,这两者中哪一个看起来更好打印、装裱并挂在您休息室的壁炉上方