gpt4 book ai didi

java - 使用公共(public)静态字段,良好的编程习惯/快速?

转载 作者:搜寻专家 更新时间:2023-10-31 19:50:34 26 4
gpt4 key购买 nike

我正在用 Java 编写一个大型游戏,我正在尝试优化代码,同时保持代码整洁有序。现在我不确定我是否应该使用单个类的公共(public)静态字段,这些类有几个被很多实例使用的变量。

例如,相机类有一个 x 和 y 位置,用于定义用户正在查看 map 的哪一部分以及需要将什么绘制到屏幕上。目前我正在对 50 000 个单位进行基准测试,我有以下选项来绘制它们。

1:在每个单元中存储对相机实例的引用,并在应该绘制时调用 getX() 和 getY():

public void paint()   
{
paint(x - camera.getX(), y - camera.getY());
}

2:在应该绘制时,将相机坐标作为参数提供给每个单元:

public void paint(int cameraX, int cameraY)  
{
paint(x - cameraX, y - cameraY);
}

3:将相机类的x和y变量设为静态:

public void paint()   
{
paint(x - Camera.x, y - Camera.y);
}

我感兴趣的是什么通常被视为最佳解决方案,以及它是否会影响性能。也许还有更多我还没有想到的方法可以做到这一点?

谢谢!

最佳答案

我建议您创建一个 Painter 类并执行以下操作:

public void paint(Painter painter)  
{
painter.draw(x, y, unit_sprite);
}

这样单位就不用担心摄像头的存在了。这与该单位的工作方式无关。该单元只需要知道如何在全局坐标方案上绘制自己,画家就会理解它与实际屏幕坐标的关系。

为什么这是个好主意?

  • 减少代码,每个单元不必担心转换到正确的坐标系。所有这些代码只存在于一个位置。
  • 易于改变。例如,假设您决定实现缩放功能。如果每个单元都进行自己的翻译,那将是一件痛苦的事情。但是,如果所有这些逻辑都在 painter 中,您可以修改 painter 以负责重新缩放图像并确定正确的偏移量。
  • 减少依赖性,单位不知道相机是什么,它们更简单,因为它们不用担心。

关于您提出的解决方案:

  1. 在您的对象上存储对相机的引用假定永远只有一个相机。如果你实现类似 Split View的东西怎么办?这可能不太可能,但通过存储引用,您几乎没有必要将自己锁定在一个视角中。
  2. 拆分变量的问题是逻辑上这两个部分是一个项目。这使得弄清楚发生了什么变得有点困难,如果您有一天需要更多参数,将会导致问题,并且还会向单元提供它实际上不需要的信息。
  3. 这会遇到与#1 相同的问题,它将您锁定在一个到处都在使用的相机中。该单位不应负责定义相机的使用方式。

关于性能:

差异几乎为零。我不确定哪种方法会在性能战中获胜,但我可以告诉您,如果您遇到性能问题,它们将出现在其他地方(我猜实际上是 blitting 函数)。通过将所有与偏移量相关的代码组合到一个位置,我提出的方法将使实现优化变得更加容易。例如,一个常见的优化是不绘制屏幕外的东西。如果您有 20 个函数都在计算偏移量和调用绘图函数,则您必须转到每个函数并进行更改。如果您使用画家,那么您只需更改画家类以忽略在可见区域之外绘制的请求即可。

关于一般的静态变量:

我认为静态变量(和单例)是全局变量,因此实际上从不使用它们。使它们静止使我与特定的决定联系在一起。我不够聪明,无法预先做出所有正确的决定,因此我需要我的代码具有灵 active 。

一些指南:

  1. 如果您发现自己需要访问对象内部的数据,即 x,y 值,请考虑您是否应该改为告诉该对象执行某些操作,即调用方法。 IE。告诉不要问。
  2. 如果一个对象(如 Painter)仅用于某个对象的特定任务,那么它应该是一个参数而不是成员变量。

关于java - 使用公共(public)静态字段,良好的编程习惯/快速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com