GraphicItem是滑板、砖块、小球等类的基类。它包含着将一个图像部件渲染到屏幕上所需的基本信息。
以下代码中,各种get方法是我留下的坑,其实把geometry设为public就行了,但由于这是面向对象实习,我觉得一刀切全public可能会影响分数。。。于是。。。
class GraphicItem { public: GraphicItem(void); GraphicItem(SDL_Texture *t); ~GraphicItem(void); // 具体使用哪个材质,由具体的类根据宏定义去选择 virtual void set_texture(SDL_Texture **textures) = 0; SDL_Texture* get_texture(); POINT speed; //POINT get_pos(); // 几何信息的set和get void set_speed_x(int s); void set_speed_y(int s); void set_pos(int x, int y); void set_pos(POINT p); POINT get_pos(); SDL_Rect get_geometry(); void set_geometry(int x, int y, int w, int h); void set_geometry(SDL_Rect rect); void set_width(int w); virtual void update(); // 获取图像的边界坐标 int get_left_edge(); int get_right_edge(); int get_top_edge(); int get_bottom_edge(); // 获取图像的中点坐标 int get_v_mid(); int get_h_mid(); SDL_Texture **textures; protected: SDL_Texture *texture; SDL_Rect geometry; };
对于一个可渲染的图像部件而言,需要有它的位置、大小、移动速度、当然还有贴图。对于砖块而言,速度当然是没有意义的。
类中的set_texture方法是一个纯虚函数,所以这个类是一个虚基类。之所以这样做,是因为我希望每个具体的图像部件知道自己所需的贴图在贴图列表中的索引。所以在具体的类中实现这个方法时,会提供宏定义的索引,上级对象只需提供贴图列表即可。