这是对另一个问题的后续问题。
我想知道是否存在一个通用/典型/最佳模式来缩放我对世界的表示(当前为160Kmx160Km)以使其适合绘图区域(当前为800x600像素)。
我可以想到至少四种不同的方法:
天真(到目前为止我的方式)。我实现了一个全局函数sc(vector)
,该函数将简单地返回传入的向量的按比例缩小的副本。这当然有效,但是必须我编写如下代码:
drawCircle(sc(radius), sc(position))
包装功能。我可以定义几个函数,每个函数都包装原始的中间件。例如,我可以定义myDrawCircle
先缩放需要缩放的参数,然后再调用drawCircle
后者。这可能会使我的代码更具可读性,并且更易于维护,但是我应该编写很多包装函数,听起来很傻。
功能装饰器。我可以简单地装饰现有的中间件功能,对所有属于这个类的一个实例参数提供自动缩放Vector3D
,但问题是,这些功能也使用相同的参数是工作list
还是Vector2D
也和装饰就没有办法知道哪些列表需要缩放(例如半径),哪些不缩放(RGB值)。
表面初始化。在定义要绘制的表面时,我可以定义比例因子(这样我就可以使用米而不是像素作为参数)。这将对我透明地工作,并且是我选择的解决方案,但是当然应该在中间件中实现,因此这不是一个真正的选择。
...无论如何:由于这是一个非常普遍的问题,所以我想知道是否存在一种可以很好地解决我未能找到的问题的既定模式。
PS:对于这个项目,我正在使用python(与pygame一起使用),但是-尽管对python / pygame特定的答案非常,但我对模式的一般/高级描述而不是其具体实现更感兴趣。
预先感谢您的时间和专业知识。