cocos2D-X Vec2类详解:
一、类中基本数据成员
1.首先转到Vec2类的定义,在类定义上有一小段注释,翻译一下就是 : 定义一个2维的浮点坐标向量
2.看了全部源码后,发现该类只要public成员,没有private私有成员,
类中只定义了两个float变量x,y用来表示向量坐标,接下来慢慢看类中的这些函数声明.
二、构造析构函数
- Vec2()构造函数;
没有任何的函数体,注释的意思是,构造一个新的坐标,且初始化成全为0的值
- Vect(const float* array)构造函数;
传入一个float的数组,数组中的值必须是按x,y的顺序排的,通过这个数组的x,y坐标可以构建一个新向量
- Vec2(const Vec&2 p1,const Vec2& p2)构造函数;
传入两个Vec向量,根据这两个向量可以构造出一个新的向量来描述这两个向量间的方向
-
Vec2(const Vec2& copy)构造函数;
传入一个Vec2向量,返回一个该向量的复制品.
- ~Vec2()析构函数;
没有函数体,无含义.
三、成员函数
- inline bool isZero()const;
接下来就是类中的函数成员,不再是构造析构函数了
内联常量函数,返回真假,用来确定这个向量是否是全为0的向量,是就返回真,其他情况全为假.
- inline bool isOne()const;
内联常量函数,返回真假,用来判断这个向量是否是全为1的向量,是返回真,其他情况全为假.与上面那个函数差不多一样的.
- static float angle(const Vec2& v1,const Vec2& v2);
静态函数,返回值float,传参两个Vec2向量
返回这两个向量间的角度(单位弧度)
- inline void add(const Vec2& v);
内联无返回值函数,传参一个Vec2向量,将所传向量加到当前向量
- static void add(const Vev2& v2,const Vec2& v2, Ver2* dst);
静态无返回值函数,传参两个Vec2向量和一个Vec2指针,将这两个向量相加后的结果存储到传入的Vec2* dst指针中.
- void clamp(const Vec2& min, const Vec2& max);
无返回值,传参两个Vec2向量,将当前向量限制在传入的两个向量大小之间.
-
static void clamp(const Vec2& v, const Vec2& min, const Vec2& max, Vec2* dst);
静态无返回值,传入一个向量v,一个最小向量min,一个最大向量max,然后将v限制在min和max之间,并将最后得到的向量结果
存储在传入的dst指针中.
-
float distance(const Vec2& v)const;
返回值float,传入一个向量,返回当前向量和传入向量之间的距离.
-
inline float distanceSquared(const Vec2& v) const;
内联,返回值为float,用来返回当前向量和传入向量的距离的平方值,这个函数用在没有必要获取两向量间的精准距离的时候,
比方说需要大致比较这不同向量间的距离远近就这个用这个函数 -
inline float dot(const Vec2& v) const;
内联,返回值为float,返回由传入向量和当前向量的点积.
-
static float dot(const Vec2& v1, const Vec2& v2);
静态函数,返回传入向量v1和传入向量v2的点积.
-
float length() const;
返回当前向量的模长.
-
inline float lengthSquared() const;
内联,返回值float,返回模长的平方.这个函数主要用在不需要获取精准的向量模长时,比方说用来比较不同向量的模长.
-
inline void negate();
内联,将当前向量方向反转.
-
void normalize();
将当前坐标单位化;
-
Vec2 getNormalized() const;
返回单位化后的坐标.
-
inline void scale(float scalar);
内联无返回值,传入一个float变量,按这个变量大小缩放当前向量的所有元素。
-
inline void scale(const Vec2& scale);
内联无返回值,传入一个向量scale,按传入向量缩放当前向量.
-
void rotate(const Vec2& point, float angle);
传入一个向量和一个弧度,将传入向量按所给弧度旋转.
-
inline void set(float xx, float yy);
内联无返回值,将当前向量的坐标重设为传入的坐标值.
-
void set(const float* array);
将当前向量重设为传入的数组中的x,y的值,数组中的值依次为x,y的值.
-
inline void set(const Vec2& v);
内联无返回值,将当前向量重设为传入向量的值.
-
inline void set(const Vec2& p1, const Vec2& p2);
内联无返回值,将当前向量重设为由传入的两个向量构成的方向向量(p1指向p2)
-
inline void setZero();
将当前向量重设为全为0.
-
inline void subtract(const Vec2& v);
内联无返回值,使当前向量的值改为减去传入向量v后的值.
-
static void subtract(const Vec2& v1, const Vec2& v2, Vec2* dst);
静态无返回值,将v1向量减去v2向量后的值保存在传入的dst指针中.
-
inline void smooth(const Vec2& target, float elapsedTime, float responseTime);
内联无返回值,传入参数1目标向量,参数2调用之间的所需时间,参数3响应时间;
这个函数我并没有完全理解它是什么意思,以下是翻译:
使用平滑函数向给定目标更新此向量。给定的响应时间决定平滑量(滞后)。较长的响应时间会产生更平滑的结果和更大的滞后。
四、运算符重载:
- inline const Vec2 operator+(const Vec2& v) const;
重载"+"号,返回当前向量加上传入向量后产生的新向量
-
inline Vec2& operator+=(const Vec2& v);
重载"+="号,返回当前向量加上传入向量后产生的新向量的引用;
-
inline const Vec2 operator-(const Vec2& v) const;
重载"-"号,返回当前向量减去传入向量后产生的新向量
-
inline Vec2& operator-=(const Vec2& v);
重载"-="号,返回当前向量减去传入向量后产生的心向量的引用;
-
inline const Vec2 operator-() const;
重载"-",返回当前向量的反向量,这不会对当前向量有任何修改;
-
inline const Vec2 operator*(float s) const;
重载"*",返回当前向量按传入s倍数缩放比列后的新向量,这不会对当前向量有任何修改;
-
inline Vec2& operator*=(float s);
重载"*=",返回当前向量按传入s倍数缩放比列后的新向量引用.
- inline const Vec2 operator/(float s) const;
重载"/",返回当前向量按传入s倍数缩小比例后的新向量.
-
inline bool operator<(const Vec2& v) const;
重载"<",用于判断传入向量与当前向量的大小
-
inline bool operator>(const Vec2& v) const;
重载">",用于判断传入向量与当前向量的大小
-
inline bool operator==(const Vec2& v) const;
重载"==",用于判断传入向量与当前向量的是否相等
-
inline bool operator!=(const Vec2& v) const;
重载"!=",用于判断传入向量与当前向量的是否不相等
到这里基本的函数都结束了,再往下是一些增加兼容性的函数,暂时不用管它.
五、静态常量成员
到最后,有一些定义的静态常量成员,分别代表了一些向量:
六、类外
1.定义了一个重载运算符"*"的函数,用来返回所给向量v和所给变量x的点积后的新向量.
2.将Vec2类型取名为Point,也就是说Point也就是Vec2类型.