本例子是一个小游戏。
这个例子有点长,但我们必须一点一点的去研究。
看看Character这个类,人物类,人物就需要控制人物左右移动,就需要有生命数,这里还有所接的物体(catchs),这里人物是一个PositionAttitudeTransform,用于控制左右的移动,生命值显示,接住的物体显示用Switch。
创建人物的代码:
osg::Geometry* geometry = osg::createTexturedQuadGeometry(pos,width,height);
osg::StateSet* stateset = geometry->getOrCreateStateSet();
stateset->setTextureAttributeAndModes(0,new osg::Texture2D(image),osg::StateAttribute::ON);
stateset->setMode(GL_BLEND,osg::StateAttribute::ON);
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
osg::Geode* geode = new osg::Geode;
geode->addDrawable(geometry);
_character = new osg::PositionAttitudeTransform;
_character->setName(name);
这个例子有点长,但我们必须一点一点的去研究。
看看Character这个类,人物类,人物就需要控制人物左右移动,就需要有生命数,这里还有所接的物体(catchs),这里人物是一个PositionAttitudeTransform,用于控制左右的移动,生命值显示,接住的物体显示用Switch。
创建人物的代码:
osg::Geometry* geometry = osg::createTexturedQuadGeometry(pos,width,height);
osg::StateSet* stateset = geometry->getOrCreateStateSet();
stateset->setTextureAttributeAndModes(0,new osg::Texture2D(image),osg::StateAttribute::ON);
stateset->setMode(GL_BLEND,osg::StateAttribute::ON);
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
osg::Geode* geode = new osg::Geode;
geode->addDrawable(geometry);
_character = new osg::PositionAttitudeTransform;
_character->setName(name);

本文详细介绍了osgcatch游戏的例子,包括人物类Character的创建与移动,接住的物体类CatchableObject,以及游戏交互类GameEventHandler。游戏逻辑涉及物体下落、碰撞检测及各种特效。同时,文章提及osg的ReaderWriter和Viewer的realize操作,讨论了OpenGL对象的编译和缓存处理。
4071

被折叠的 条评论
为什么被折叠?



