SFML的vanilla開發包和完整的SDK下載都包含向量類聲明/定義文件。在文件Vector2.hpp和Vector2.inl中查找../include/SFML/System/(在任一軟件包中)。添加您的旋轉功能的一種方法是:
添加rotate方法的類聲明中Vector2.hpp:
...stuff...
template <typename T>
class Vector2
{
public :
....
void Rotate(T angle);
....
};
然後在vector2.inl定義的方法(按照約定):
template <typename T>
void Vector2<T>::Rotate(T angle) {
...your implementation here...
}
修改Vector2類的另一種方法是使用quite nifty, SFML-based Thor library中的擴展向量數學函數,該函數包含Rotate函數。最小(未改變的)文件,你從雷神SDK需要利用自己的2D矢量職能是:
- ../include/Thor/Vectors/VectorAlgebra2d.hpp
- ../include/雷神/詳細信息/ VectorAlgebra2D.inl
- ../include/Thor/Math/Trigonometry.hpp
- ../src/Trigonometry.cpp
隨着項目目錄中的那些文件,你可以旋轉一個sf :: Vector做這樣的事情:
#include <iostream>
#include <SFML/Graphics.hpp>
#include "VectorAlgebra2D.hpp"
....
sf::Vector2f rotate_THIS(10.0f,10.0f);
thor::Rotate(rotate_THIS, 180.0f); //pass by reference
std::cout << "(" << rotate_THIS.x << ", " << rotate_THIS.y << ")" << std::endl;
sf::Vector2f rotated = thor::RotatedVector(rotate_THIS, 180.0f); //returns object
std::cout << "(" << rotated .x << ", " << rotated .y << ")" << std::endl;
....
其輸出(可預見):
(-10,-10)
(10,10)
我只是通過無需修改某個項目的SFML向量類模板的同樣的過程去了,和周圍的源戳,並添加在數後功能(長度和點積),我偶然發現了托爾圖書館,這對我來說目前服務很好。
它也被稱爲.NET中的「擴展方法」。而'friend'將不起作用,因爲他無法訪問類定義。 – 2011-05-06 20:38:06