摘要:
预处理器运算符:#:实参两边加双引号,如#define(a) #a ,表示"a"#@:实参两边加单引号##:实参连接标记,如#define(a, b) a##b,表示ab自制小示例:#include <iostream>using namespace std;#define QUOTES(a) #a#define TEXTLINK(a, i, b) QUOTES(a##i##b) int main(){ cout << TEXTLINK(out, 1, .txt) << endl;}输出:out5.txt 阅读全文
摘要:
增加动画:Ogre::Entity* _ent; // 增加动画效果的实体的指针Ogre::AnimationState* _aniState; // 所使用动画状态的指针_aniState = _ent->getAnimationState("Dance"); // 获取“Dance”动画状态_aniState->setEnabled(true); // 允许动画_aniState->setLoop(true); // 允许动画循环_aniState->addTime(evt.timeSinceLastFrame); // 距上次刷新的时间设定移动 阅读全文
摘要:
FrameListener:class Example25FrameListener : public Ogre::FrameListener // 帧监听{private: Ogre::SceneNode* _node;public: Example25FrameListener(Ogre::SceneNode* node) { _node = node; } bool frameStarted(const Ogre::FrameEvent &evt) // 每一帧开始前所做的工作 { _node->translate(Ogre::Vector3(0.1,0,0)); // 每 阅读全文
摘要:
创建平面:Ogre::Plane plane(Vector3::UNIT_Y, -10); // 通过法线创建一个平面Ogre::MeshManager::getSingleton().createPlane("plane", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z); // Vector3::UNIT_Z定义了面的正向Ogre::Entity* ent = mSceneMgr->createEntity(& 阅读全文
摘要:
旋转:Ogre::Entity* ent2 = mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");Ogre::SceneNode* node2 = mSceneMgr->createSceneNode("Node2");node->addChild(node2);node2->setPosition(10,0,0);node2->pitch(Ogre::Radian(Ogre::Math::HALF_PI)); // 绕x轴旋转, 旋转方式: 弧度nod 阅读全文
摘要:
析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。 阅读全文
摘要:
polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphically),就不应该声明virtual析构函数。 阅读全文
摘要:
为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。class Uncopyable{protected: Uncopyable(){} ~Uncopyable(){}private: Uncopyable(const Uncopyable&); Uncopyable& operator=(const Uncopyable&); }; 阅读全文
摘要:
编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。 阅读全文
摘要:
为内置型对象进行手工初始化,因为C++不保证初始化它们。构造函数最好使用成员初值列(member initialization list),而不要在构造函数本体内使用赋值操作(assignment)。初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同。为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象。 阅读全文