[寒江孤叶丶的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文件中搜索字符串