欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

[寒江孤叶丶的Cocos2d-x之旅_11]Cocos2d-x的重力感应Demo。如何使用重力感应。

发布时间:2024/1/1 编程问答 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [寒江孤叶丶的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。如何使用重力感应。的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。