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坐标系

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHphbjEz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

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

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

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

cocos2d-x中的默认坐标系是和OpenGL的坐标是相同的,所以我直接依据getPosition()方式来获得位置的精神。这少了复杂的转换,由于只有官方的兑换可能有他们的意图权。现在不深究。

该博客的内容和个人原创博客同步更新:Melove 我爱

OK继续垒码

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

【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 由于新的事件

高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering is good but it is beginning to feel somehow antiquate and moreover it doesn't actually leverage modern multi core CPUs so popular nowadays on most mo

HOWTO Use Python in the web — Python v3.0.1 documentation

HOWTO Use Python in the web - Python v3.0.1 documentation mod_python? People coming from PHP often find it hard to grasp how to use Python in the web. Their first thought is mostly mod_python because they think that this is the equivalent to mod_php.

cocos2d-x v3.0的window平台搭建和编译成andriod程序

首先添加这个地址到系统环境变量,path 然后打开CMD,输入如下语句 现在就可以创建一个新项目了 这样一个空的cocos2d-x v3.0的项目就创建好了 接下来编译andriod程序 先在系统环境变量中添加一个NDK_ROOT 然后打开cmd 然后就开始编译了 接下来打开ADT中的eclipse 再添加andriod文件夹到工程里 cocos2d-x v3.0的window平台搭建和编译成andriod程序,布布扣,bubuko.com

Rivix.RiverTools.V3.0.3 地形和河流网系提取及分析软件

Mosek.Optimization.Tools.v6.0.0.52 SCHLUMBERGER.PETREL.V2009.1 油藏模拟软件 SIEMENS.PLM.NX.NASTRAN.V7.0 SIEMENS.PLM.NX.V7.0.CAST Simufact.Forming.v9.0 SOLIDCAM2009SP2 Tekla.Structures.V15SR5 WaveMetrics.IGOR.Pro.v6.1.2 鸿业市政道路8.0 Altera.Quartus.II.v9.1 AUTO