在使用面向对象的方法时,是否可以使用不属于任何特定类的函数。就我而言,我希望有一个check_collision()
函数,它将两个SDL_Rect
作为参数,然后返回true
或false
。 SDL_Rect
可以在现有对象中找到,如字符类或tile类。有这个功能的好地方吗?我是否忽视了解决这个问题的更好方法?
答案 0 :(得分:1)
我将用于面向对象的碰撞检测的方法是让对象具有check_collision()函数,该函数接收另一种类型,并以这种方式执行检查。然后,您可以使用多态和继承来定义形状树,并通过单个函数执行所有检查
答案 1 :(得分:0)
我会使用某种“DisplayObject”类来继承您可能要检查碰撞的所有可显示元素。然后,将碰撞检查放在其中。
答案 2 :(得分:0)
我会发布唯一的不同答案(暂时)。由于您已经存在一个您不拥有的类型(SDL_Rect
)(它包含在第三方中),我建议您将其作为自由函数实现,如您在原始答案中所建议的那样。在我的opinoin中,对于你的直接问题,这将是最干净的方法。
bool check_collision(const SDL_Rect& l, const SDL_Rect& r);
你的另一个选择是编写一个包装SDL_Rect
并提供碰撞检测的类,如下所示:
class CD_SDL_Rect
{
public:
bool check_collision(const SDL_Rect& r);
private:
SDL_Rect r_;
};
但对于这种特殊情况来说,这似乎有些过分。
如果您已经有一个DisplayableObject
类,那么从I派生的所有可显示对象都可能会摇摆建议将其添加为成员,但情况似乎并非如此。
答案 3 :(得分:0)
使用免费功能是一种有效的方法。在命名空间内声明它,因此您不会填充全局范围。 如果函数可以声明为不是类的朋友,那就更好了。