[寒江孤叶丶的Cocos2d-x之旅_11]Cocos2d-x的重力感应Demo。如何使用重力感应。
生活随笔
收集整理的这篇文章主要介绍了
[寒江孤叶丶的Cocos2d-x之旅_11]Cocos2d-x的重力感应Demo。如何使用重力感应。
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
在开发一些赛车类,或者躲避类的游戏中,经常会用到重力感应的功能。比如以前玩儿的控制一个金属球走迷宫的游戏。
在最近这个版本的TestCPP中我没有找到关于重力感应的例程,不知道是官方没有添加还是我自己没找到。不管如何吧,我通过网上搜索资料。解决了自己所遇到的问题。在此分享出来希望对大家有用。
一下内容是自己的理解,不对之处欢迎指出!
首先先看一张图,这事一个XYZ轴的三维坐标图,通过XYZ轴指向的方向来获得一个-1到1的系数,来分辨出当前手机的姿势。 X是横轴 Y是纵轴,而Z则是一个穿过屏幕的法线。
如果箭头指向水平方向,是0,指向上方则是-1 而下方则是1,如图,YX 都为0 而Z 则是-1,如果这时,将Y轴往上翘起,Y会由0 慢慢的转化为-1 如果将X轴向下倾斜,则X会由0 变为1。
使用方法:
在init方法中,添加初始化的代码:
//开启重力感应Device::setAccelerometerEnabled(true);//设置监听的回调方法auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(HelloWorld::onAcceleration, this));//获取时间分发期,并向时间分发器添加监听时间Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);//创建一个用于测试的Spriteauto spTest = Sprite::create("CloseNormal.png");spTest->setPosition(Vec2(Director::getInstance()->getVisibleSize().width/2, Director::getInstance()->getVisibleSize().height/2));this->addChild(spTest);spTest->setTag(1000); 在头文件中添加一行成员函数的声明:(这里直接添加到HelloWorld类中了) void onAcceleration(cocos2d::Acceleration* acc, Event* unused_event); 最后将方法实现: void HelloWorld::onAcceleration(Acceleration* acc, Event* unused_event){//获取导演类对象auto dirInstance = Director::getInstance();//获取之前创建的Spriteauto spTest=this->getChildByTag(1000);//通过导演类中的方法,将Sprite的屏幕坐标转换为UIkit的坐标auto uiSpPoint = dirInstance->convertToUI(spTest->getPosition());//并将中里感应的数值乘上中里系数uiSpPoint.x += acc->x * 9.81f;uiSpPoint.y -= acc->y * 9.81f;//将计算后的UIkit坐标转换回屏幕中的坐标auto spNewPoint = dirInstance->convertToGL(uiSpPoint);spTest->setPosition(spNewPoint); }
总结
以上是生活随笔为你收集整理的[寒江孤叶丶的Cocos2d-x之旅_11]Cocos2d-x的重力感应Demo。如何使用重力感应。的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 使用Oracle VM Virtual
- 下一篇: C语言在TXT文件中搜索字符串