cocos2d-x V3.0 调用重力加速器 Acceleration

今天解决了一个问题心情很爽 哈哈;

今天解决的就是cocos2d-x 3.0 调用重力加速器的问题,网上搜了很多的资料 发现都是不行的,不能解决问题,不知道是不是我使用的是3.0 的版本问题,但是网上有些教程说的也是3.0 的版本啊,难道beta版和正式版也有那么大差别么?坑爹啊,

就说这个重写的方法吧:网上搜索的到好多都是重写父类的 didAccelerate(CCAcceleration* pAccelerationValue);方法,但是我用的3.0 根本就没有了这个方法,搜索的3.0 还是有说这个,蛋疼;

最后在看官方的testCpp例子的时候发现了现在调用重力加速器的方法;例子的位置:X:\你的cocos2d-x\tests\cpp-tests\Classes\AccelerometerTest

其中要重写的方法为:onAcceleration(Acceleration* acc, Event* event); TMD差别好大有么有啊;

cocos2d-x每个版本都有变化有么有啊,坑爹……

不过坑爹归坑爹,引擎还是不错的,只能说咱学的不好吧;

OK 废话太多了,开始说正事;

既然找到了正确的方法,那就好解决了,首先是在.h头文件中定义好方法

#include "cocos2d.h"

class GameScene : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();

    virtual bool init();
    //重写的父类的方法,用来处理重力加速器方法
    void onAcceleration(cocos2d::Acceleration* acc, cocos2d::Event* event);
    CREATE_FUNC(GameScene);
};

接着就是在cpp文件中去实现这个方法就OK了

//重写重力加速器方法
void GameScene::onAcceleration(Acceleration* acc, Event* event){
auto director = Director::getInstance();
if(img == NULL){
return;
}

auto imgSize = img->getContentSize();
auto imgPosition = img->getPosition();
auto imgX = img->getPositionX();
auto imgY = img->getPositionY();

imgX += acc->x * gravityValue;
//imgY += acc->y * gravityValue;
//auto imgTemp = director->convertToUI(imgPosition);

//imgTemp.x += acc->x * gravityValue;
//imgTemp.y -= acc->y * gravityValue;
//auto imgNext = director->convertToGL(imgTemp);

FIX_POS(imgX, (origin.x + imgSize.width/2), (origin.x + visibleSize.width - imgSize.width/2));
FIX_POS(imgY, (origin.y + + imgSize.height/2), (origin.y + visibleSize.height - imgSize.height/2));
img->setPosition(Point(imgX, imgY));

log("onAcceleration: acc->x: %f, acc->y: %f, acc->z: %f, imgX: %f, imgY: %f",
acc->x, acc->y, acc->z, imgX, imgY);
}

可以看到其中有我注释掉的一部分代码,这是本来官方示例文件中的根据“屏幕坐标系”以及“OpenGL坐标系”互相转换的方法,将例子中精灵的坐标互相转换,然后进行设置精灵坐标

其实后来根据输出log测试,我发现cocos2d-x的默认的getPosition()获取的坐标是和OpenGL的坐标是一直的,所以最后我就注释掉了例子中的转化方式,直接根据坐标点来设置精灵位置,这样是和经过转化的一样的效果的;

下边我画了几张图来简单的说明一下OpenGL坐标系,屏幕UI坐标系(只是我自己认为,如果有不对的地方,望朋友们指正)

首先这个立方的 是我绘制的OpenGL的重力加速器的三维空间坐标系,旁边的蓝色表示一个手机平放时与坐标系的对应情况;根据图中箭头的方向,x、y、z三个坐标轴的值都是趋向于-1的;

下面这两个是平面的UI坐标系和GL坐标系

UI坐标系的坐标原点是在左上角,Y轴向下延伸,其中精灵A位置为(10,10)

GL坐标系的原点是在左下角,Y轴向上延伸,精灵B(相当于UI坐标戏中的精灵A)位置为(10, 1280)(屏幕分辨率为720*1280时)

这就是在官方Test例子中UI坐标系和GL坐标系为什么要进行转换

cocos2d-x中的默认坐标系是和OpenGL的坐标系是相同的,所以我直接根据getPosition()方式获取了精灵的位置,这样就少去了复杂的转换,不过既然官方进行转换可能有他们的意图吧,现在也不用深究了;

本博客内容与个人原创博客同步更新:Melove 我爱

OK继续垒码了

cocos2d-x V3.0 调用重力加速器 Acceleration

时间: 2024-12-09 23:10:41

cocos2d-x V3.0 调用重力加速器 Acceleration的相关文章

cocos2d-x V3.0 呼叫加速度计 Acceleration

今天克服了一个问题,我觉得非常酷 哈哈. 今天得到解决cocos2d-x 3.0 呼叫重力加速器问题,上网查了很多资料 发现是不够,不解决这个问题,我不知道如果我使用3.0 这一问题的版本号,但是,这也有一些在线教程3.0 版本号啊.是beta有那么大区别么?坑爹啊, 就说这个重写的方法吧:网上搜索的到好多都是重写父类的 didAccelerate(CCAcceleration* pAccelerationValue);方法,可是我用的3.0 根本就没有了这种方法,搜索的3.0 还是有说这个,蛋

【cocos2d-js官方文档】十八、Cocos2d-JS v3.0中的属性风格API

1. 新的API风格 我们直接来看看你可以如何使用Cocos2d-JS v3.0: 以前的API 新的API node.setPosition(x, y); node.x = x; node.y = y; node.setRotation(r); node.rotation = r; 如表格中可以看到的,设置position属性的函数调用在3.0版中会被替换为直接的对象属性存取.不仅仅是示例中的x,y和rotation,几乎所有节点类型中关于属性存取的函数都会被替换为直接的对象属性访问.具体的属

【cocos2d-js官方文档】十八、Cocos2d-js v3.0的对象构造和类继承

在Cocos2d-JS中,对象的构造方式和Cocos2d-x一样,使用各个类的create函数来构造.在Cocos2d-JS v3.0我们还将为你带来一种传统的方式,即使用new操作符.另外,在v3.0 alpha1版本中,因为我们还没有找到较好的解决办法,所以不能继承JSB中的引擎类.但是在v3.0 alpha2中,这个问题已经解决了.由于使用new操作符,编写继承代码也更加容易了. 在这篇文档中,我们将会介绍如何使用它们,以及简要的实现原理. 1. 弃用的create函数 由于Cocos2d

从Cocos2d-html5 v2.2.x到Cocos2d-JS v3.0 alpha2升级指南

1. 事件管理机制 1.1 在2.2.2版中分散的事件分发器cc.TouchDispatcher, cc.MouseDispatcher, cc.KeyboardDispatcher, cc.AccelerometerDispatcher的所有功能都已经被合并到cc.eventManager,所以事件(鼠标,触摸,键盘,陀螺仪, 用户自定义)都将由cc.eventManager负责分发,也都将通过它进行注册. 更多关于cc.eventManager的信息可以查看这篇详细文档 1.2 由于新的事件

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

爱客猴(echo)内容管理系统 v3.0

爱客猴(echo)内容管理系统 v3.0 版本,基于国内流行的ThinkPHP3.2.3框架研发,UI插件采用简洁.直观.强悍的Bootstrap3.3.5前端开发框架以及口碑极佳的web弹层组件LayerUI,全新的设计理念,带来更舒爽的体验. 系统采用多站点切换一个后台管理多个站点的设计方案,巧妙地解决了一站一后台的传统弊端,不仅方便站点的管理,也节省更多的研发时间,在新版本的系统中还集成了微信公众号.Ucenter用户中心等一系列常用功能! 由于系统没有自带模板标签功能,所以这就要求使用者

【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象

为何将单例模式移除 在Cocos2d-JS v3.0之前.全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环.可惜的是,这样的统一性也在非常大程度上限制了Cocos2d-html5的发展,有一些在C++中非常有意义的涉及搬到Html5平台后却使得Cocos2d-html5变得臃肿.所以在3.0版中,我们决定将一些API改造成更适合JavaScript开发者的API.这篇文档中将要展示的是单例类的改造. 拿cc.SpriteFrameCache为例: /

Cocos2d-x v3.0 新的事件调度方法 lambda表达式的使用

欢迎添? Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/24603251 Cocos 2d-x 3.0 版本号中引入了C++ 11的特性.当中就包括了回调函中使用Lambda对象. 以下我们来看一段TestCpp中的代码: 在上图的触摸事件的回调函数中,共使用了三次Lambda表达式: [ ](Touch * touch,Event * event){ }; 以下我们就来介绍一

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增系统参数管理

欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“系统参数管理”模块.系统参数管理的功能就非常广了,可以发挥我们的想象把所有可能的东西放在这儿定义,比如:系统的分页大小.系统的数据库类型.用户的访问限制等等一切可能的东西都可以在这儿定义,定义后通过框架提供的接口来使用即可.当然“系统参数”管理界面中有一些数据是系统生成的默认数据