本文没你想象的那么,,复杂。事实上就是通过重力感应控制个小球移动而已。

先看头文件:

  1. #ifndef __HELLOWORLD_SCENE_H__
  2. #define __HELLOWORLD_SCENE_H__
  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5. class HelloWorld : public cocos2d::CCLayer
  6. {
  7. public:
  8. HelloWorld(void);
  9. ~HelloWorld(void);
  10. // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
  11. virtual bool init();
  12. // there's no 'id' in cpp, so we recommand to return the exactly class pointer
  13. static cocos2d::CCScene* scene();
  14. // a selector callback
  15. void menuCloseCallback(CCObject* pSender);
  16. virtual void didAccelerate(CCAcceleration* pAccelerationValue);
  17. // implement the "static node()" method manually
  18. CREATE_FUNC(HelloWorld);
  19. protected:
  20. CCSprite* m_pBall;
  21. double    m_fLastTime;
  22. };
  23. #endif  // __HELLOWORLD_SCENE_H__

看.cpp

  1. #include "HelloWorldScene.h"
  2. using namespace cocos2d;
  3. #define FIX_POS(_pos, _min, _max) \
  4. if (_pos < _min)        \
  5. _pos = _min;        \
  6. else if (_pos > _max)   \
  7. _pos = _max;        \
  8. HelloWorld::HelloWorld()
  9. : m_fLastTime(0.0)
  10. {
  11. }
  12. HelloWorld::~HelloWorld()
  13. {
  14. m_pBall->release();
  15. }
  16. CCScene* HelloWorld::scene()
  17. {
  18. CCScene * scene = NULL;
  19. do
  20. {
  21. // 'scene' is an autorelease object
  22. scene = CCScene::create();
  23. CC_BREAK_IF(! scene);
  24. // 'layer' is an autorelease object
  25. HelloWorld *layer = HelloWorld::create();
  26. CC_BREAK_IF(! layer);
  27. // add layer as a child to scene
  28. scene->addChild(layer);
  29. } while (0);
  30. // return the scene
  31. return scene;
  32. }
  33. // on "init" you need to initialize your instance
  34. bool HelloWorld::init()
  35. {
  36. bool bRet = false;
  37. do
  38. {
  39. CC_BREAK_IF(! CCLayer::init());
  40. CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
  41. "CloseNormal.png",
  42. "CloseSelected.png",
  43. this,
  44. menu_selector(HelloWorld::menuCloseCallback));
  45. CC_BREAK_IF(! pCloseItem);
  46. // Place the menu item bottom-right conner.
  47. pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));
  48. // Create a menu with the "close" menu item, it's an auto release object.
  49. CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
  50. pMenu->setPosition(CCPointZero);
  51. CC_BREAK_IF(! pMenu);
  52. // Add the menu to HelloWorld layer as a child layer.
  53. this->addChild(pMenu, 1);
  54. //add Accelerometer
  55. CSize size = CCDirector::sharedDirector()->getWinSize();
  56. setAccelerometerEnabled(true);//打开重力感应
  57. m_pBall = CCSprite::create("ball.png");
  58. m_pBall->setPosition(ccp(size.width/2, size.height/2));
  59. addChild(m_pBall);
  60. m_pBall->retain();
  61. bRet = true;
  62. } while (0);
  63. return bRet;
  64. }
  65. <pre name="code" class="cpp">void HelloWorld::menuCloseCallback(CCObject* pSender)
  66. {
  67. // "close" menu item clicked
  68. CCDirector::sharedDirector()->end();
  69. }
  70. void HelloWorld::didAccelerate(CCAcceleration* pAccelerationValue)
  71. {
  72. //     double fNow = pAccelerationValue->timestamp;
  73. //
  74. //     if (m_fLastTime > 0.0)
  75. //     {
  76. //         CCPoint ptNow = convertToUI
  77. //     }
  78. //
  79. //     m_fLastTime = fNow;
  80. CCSize size = CCDirector::sharedDirector()->getWinSize();
  81. CCDirector* pDir = CCDirector::sharedDirector();
  82. /*FIXME: Testing on the Nexus S sometimes m_pBall is NULL */
  83. if ( m_pBall == NULL ) {
  84. return;
  85. }
  86. CCSize ballSize  = m_pBall->getContentSize();
  87. CCPoint ptNow  = m_pBall->getPosition();
  88. CCPoint ptTemp = pDir->convertToUI(ptNow);
  89. //9.8 重力加速度
  90. ptTemp.x += pAccelerationValue->x * 9.81f;
  91. ptTemp.y -= pAccelerationValue->y * 9.81f;
  92. CCPoint ptNext = pDir->convertToGL(ptTemp);
  93. FIX_POS(ptNext.x, (0+ballSize.width / 2.0), (size.width - ballSize.width / 2.0));
  94. FIX_POS(ptNext.y, (0+ballSize.height / 2.0), (size.height - ballSize.height / 2.0));
  95. m_pBall->setPosition(ptNext);
  96. }</pre>
  97. <p></p>
  98. <pre></pre>

cocos2d-x 重力感应的更多相关文章

  1. cocos2dx 3.x(让精灵随着重力感应的方向移动而移动)

    // // GameScene.hpp // HelloWord // // Created by apple on 2017/1/7. // // #ifndef GameScene_hpp #de ...

  2. Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)

    这节我们来学习Cocos2d-x的最后一节.怎样处理重力感应事件.移植到Android后加入再按一次返回键退出游戏等.我这里用的Android.IOS不会也没设备呃 效果图不好弄,由于是要移植到真机上 ...

  3. H5案例分享:html5重力感应事件

    html5重力感应事件 一.手机重力感应图形分析 1.设备围绕z轴的旋转角度为α,α角度的取值范围在[0,360). 设备在初始位置,与地球(XYZ)和身体(XYZ)某个位置对齐. 设备围绕z轴的旋转 ...

  4. 【Android开发学习笔记】【第九课】重力感应

    概念 使用重力感应技术的Android游戏已经屡见不鲜,不知道自己以后会不会用到,所以先研究了一下. 在网上学习了一下,貌似没有api,所以得自己去分析手机处在怎样状态下.注意: 下面提供的demo程 ...

  5. iOS 重力感应 学习1 陀螺仪 水平仪 指南针

    小球可以随着重力感应 四处乱撞. 放大了坐标位移 就可以看见小球动了. 然后规定小球的路径 当滑到中间时候 弹出一张图片 作为提示. 我做了一个小demo 效果不错哦 CMMotionManager ...

  6. 移动终端学习2:触屏原生js事件及重力感应

    如今智能移动设备已经渗透到人们生活的方方面面,用户数量也在不断迅速增长(市场研究机构 eMarketer 在今年初发表的趋势报告中预测,2014年至2018年,中国智能手机用户从总人口的 38.3%增 ...

  7. Android重力感应开发

    http://blog.csdn.net/mad1989/article/details/20848181 一.手机中常用的传感器 在Android2.3 gingerbread系统中,google提 ...

  8. 基于野火M3开发板(STM32F103VET6)的迷宫小球(重力感应控制)游戏开发

    2013-03-03 这是研一上学期<实时嵌入式系统实验>课程的大作业,是利用野火板的资源,加上一个AHRS(Attitude and Heading Reference System,姿 ...

  9. iOS设备的重力感应

    重力感应是每台iOS设备都具备的功能,所以在应用用好重力感应会有意想不到的效果 1.添加CoreMotion框架 2.在需要使用重力感应的类中添加头文件 #import <CoreMotion/ ...

随机推荐

  1. linux学习之使用fdisk命令进行磁盘分区(八)

    linux下使用fdisk命令进行磁盘分区 目录 分区类型 分区方法表示 文件系统 fdisk命令分区过程 分区类型 主分区:总共最多只能分四个 扩展分区:只能有一个,也算作主分区的一种,也就是说主分 ...

  2. 不会python?那就换一种姿势爬虫!Java爬虫技术总结

    -本博客为原创内容,转载需注明本人- 前几天有个师妹将要毕业,需要准备毕业论文,但是论文调研需要数据资料,上知网一查,十几万条数据!指导老师让她手动copy收集,十几万的数据手动copy要浪费多少时间 ...

  3. ACM差分约束笔记

    https://www.cnblogs.com/31415926535x/p/10463112.html 很早之前学最短路的时候就看了一眼差分约束,,当时以为这种问题不怎么会出现,,而且当时为了只为了 ...

  4. Java 并发编程整体介绍 | 内含超多干货

    前段时间一直在学习多线程相关的知识,目前也算有了一个整体的认识,今天呢,主要从整体介绍一下,只谈造火箭,拧螺丝这种细节还需要自己深究. 首先是操作系统级别对于多线程的支持,由 CPU 的多级缓存.缓存 ...

  5. Java设计模式从精通到入门二 装饰器模式

    介绍 ​ 我尽量用最少的语言解释总结: ​ Java23种设计模式之一,属于结构型模式,允许向一个现有的对象添加新的功能,不改变其结构. 应用实例: ​ 给英雄联盟种的射手,添加不同的装备.先装备攻速 ...

  6. node+express+mongodb初体验

    从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整 ...

  7. JSONObject基本内容(二)

    参考内容:http://swiftlet.net/archives/category/json  十分感谢!!! 这部分的内容主要是讲述 javaBean转换为JSONObect时,如果有些属性不需要 ...

  8. BZOJ.2229.[ZJOI2011]最小割(最小割树)

    题目链接 题意:给定一张无向图,求任意两点之间的最小割. 在所有点中任选两个点作为源点\(S\).汇点\(T\),求它们之间的最小割\(ans\),并把原图分成两个点集\(S',T'\),用\(ans ...

  9. 潭州课堂25班:Ph201805201 第七课:控制流程 (课堂笔记)

    # 条件判断 s = '储蓄卡' if s == '男': # 如果if 表达式成立 ,则执行下级语句 print('男性') elif s == '女': # 如果上面表达式不成立,执行本次判断,本 ...

  10. Putty 工具使用

    如何使用Putty远程(SSH)管理Linux VPS Putty是一个免费的.Windows 32平台下的telnet.rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具.用它 ...