Cocos2d-x加速度计实例:运动的小球
下面我们通过一个实例介绍一下如果通过层加速度计事件实现访问加速度计。该实例场景如下图所示,场景中有一个小球,当我们把移动设备水平放置,屏幕向上,然后左右晃动移动设备来改变小球的位置。
下面我们再看看具体的程序代码,首先看一下HelloWorldScene.h文件,它的代码如下:
- #ifndef __HELLOWORLD_SCENE_H__
- #define __HELLOWORLD_SCENE_H__
- #include "cocos2d.h"
- #define kBall_Tag 100 ①
- #define SPEED 30.0 ②
- class HelloWorld : public cocos2d::Layer
- {
- public:
- static cocos2d::Scene* createScene();
- virtual bool init();
- virtual void onEnter();
- virtual void onExit();
- virtual voidonAcceleration(cocos2d::Acceleration* acc, cocos2d::Event *unused_event); ③
- CREATE_FUNC(HelloWorld);
- };
- #endif // __HELLOWORLD_SCENE_H__
上述代码第①行定义宏kBall_Tag,它是小球精灵的标签Tag数值。第②行定义宏SPEED,它表示小球运动的速度。第③行代码声明了onAcceleration函数,。
HelloWorldScene.cpp文件,它的主要代码如下:
- bool HelloWorld::init()
- {
- if( !Layer::init() )
- {
- returnfalse;
- }
- SizevisibleSize = Director::getInstance()->getVisibleSize();
- Pointorigin = Director::getInstance()->getVisibleOrigin();
- //贴图的纹理图片宽高必须是2的n次幂,128x128
- autobg = Sprite::create("BackgroundTile.png",
- Rect(0,0, visibleSize.width, visibleSize.height));
- //贴图的纹理参数,水平重复平铺,垂直重复平铺
- Texture2D::TexParamstp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
- bg->getTexture()->setTexParameters(tp);
- bg->setPosition(origin+ Point(visibleSize.width/2, visibleSize.height/2));
- addChild(bg,0);
- autoball = Sprite::create("Ball.png");
- ball->setPosition(origin+Point(visibleSize.width/2,visibleSize.height/2));
- addChild(ball,10, kBall_Tag);
- returntrue;
- }
- void HelloWorld::onEnter()
- {
- Layer::onEnter();
- log("HelloWorldonEnter");
- setAccelerometerEnabled(true); ①
- }
- void HelloWorld::onAcceleration(Acceleration*acc, Event *unused_event)
- {
- log("{x = %f, y = %f}", acc->x,acc->y);
- Size visibleSize = Director::getInstance()->getVisibleSize();
- Sprite* ball = (Sprite*)this->getChildByTag(kBall_Tag); ②
- Size s = ball->getContentSize(); ③
- Point p0 = ball->getPosition(); ④
- float p1x = p0.x + acc->x *SPEED ; ⑤
- if ((p1x - s.width/2) <0) { ⑥
- p1x = s.width/2; ⑦
- }
- if ((p1x + s.width / 2) > visibleSize.width) { ⑧
- p1x = visibleSize.width - s.width / 2; ⑨
- }
- float p1y = p0.y + acc->y *SPEED ;
- p1y = p1y < 0 ? -p1y : p1y;
- if ((p1y - s.height/2) < 0) {
- p1y = s.height/2;
- }
- if ((p1y + s.height/2) > visibleSize.height) {
- p1y = visibleSize.height - s.height/2;
- }
- ball->runAction(Place::create(Point( p1x, p1y))); ⑩
- }
- void HelloWorld::onExit()
- {
- Layer::onExit();
- log("HelloWorldonExit");
- }
上述代码①行开启加速计设备,这个代码是在HelloWorld::onEnter()函数中,意味着在进入层的时候就开启加速度计设备。
在第②行代码是通过标签属性获得小球精灵对象。第③行代码ball->getContentSize()获得小球尺寸大小。第④行代码ball->getPosition()是获得小球的位置。第⑤行代码是p0.x + acc->x * SPEED是获得小球的x轴方向移动的位置,但是需要考虑左右超出屏幕的情况,第⑥行代码是 (p1x - s.width/2) <0是判断超出左边屏幕,这种情况下我们需要通过第⑦行代码p1x = s.width/2重新设置它的x轴坐标。第⑧行代码(p1x+ s.width / 2) > visibleSize.width是判断超出右边屏幕,这种情况下我们需要通过第⑨行代码p1x = visibleSize.width - s.width / 2重新设置它的x轴坐标。类似的判断y轴也需要,代码就不再解释了。
重新获得小球的坐标位置后,通过第⑩行代码ball->runAction(Place::create(Point( p1x, p1y)))是执行一个动作使小球移动到新的位置。
Cocos2d-x加速度计实例:运动的小球的更多相关文章
- JavaScript实例:运动的小球
本篇博文通过制作一个小球运动动画的实例,来学习在HTML5的画布上实现动画制作的方法,同时理解面向对象程序设计的基本思想. 1.绘制小球 先在HTML页面中设置一个画布. <canvas id= ...
- 自定义View,随着手指运动的小球
这个实例是自定的view的初步介绍,要设计的是一个随着手指运动的小球.原理是随时获取手指的坐标,然后在这个坐标上面实时改变自定义view的坐标.这个view仅仅是画了一个圆形而已. 自定义的view ...
- Cocos2d入门--3--小球运动
本章直接上源代码.内容不难,主要就是 HelloWorldScene.h文件: #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H_ ...
- JavaScript动画实例:动感小球
已知圆的坐标方程为: X=R*SIN(θ) Y=R*COS(θ) (0≤θ≤2π) 将0~2π区间等分48段,即设定间隔dig的值为π/24.θ初始值从0开始,按曲线方程求得坐标值(x,y), ...
- canvas制作运动的小球
<!DOCTYPE html> <head> <title>canvas</title> <style> .canvas{ border: ...
- Windows Store App JavaScript 开发:小球运动示例
通过前面内容的学习,相信读者已经对开发基于JavaScript的Windows应用商店应用有了一定的了解,本小节通过一个小球运动的示例来介绍如何新建一个JavaScript的Windows应用商店项目 ...
- Win10系列:JavaScript小球运动示例
通过前面内容的学习,相信读者已经对开发基于JavaScript的Windows应用商店应用有了一定的了解,本小节通过一个小球运动的示例来介绍如何新建一个JavaScript的Windows应用商店项目 ...
- JavaScript动画实例:炸开的小球
1.炸开的小球 定义一个小球对象类Ball,它有6个属性:圆心坐标(x,y).小球半径radius.填充颜色color.圆心坐标水平方向的变化量speedX.圆心坐标垂直方向的变化量speedY. B ...
- Cocos2d-JS加速度计与加速度事件
在很多移动设备的游戏使用到了加速度计,Cocos2d-JS引擎提供了访问加速度计传感器的能力.本节我们首先介绍一下加速度计传感器,然后再介绍如何在Cocos2d-JS中访问加速度计.加速度计加速度计是 ...
随机推荐
- linux之unlink函数解析
[lingyun@localhost unlink]$ cat unlink.c /********************************************************* ...
- 我的VisualStudio工具箱
代码神器 ReSharper 毫无疑问,我认为R#是目前VS插件中有史以来最强大的,各种快捷生成代码的方式, 代码重构, 很多很多的快捷键支持.相比较原生VS的,VS的智能功能简直弱爆了. dimec ...
- Eclipse10大快捷键组合
一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. Ctrl+Shift+C 快速单行注释 也适用于 ...
- 直接下载Google Play市场的APK
传送门在这里:http://apps.evozi.com/apk-downloader/ 似乎很方便.很迅速的样子,忍不住在这里记录一下.
- SAP标准教材列表
AC010 mySAP Financials Overview to Financial Accounting and ReportingAC020 mySAP Financials Investme ...
- 用perl对字符串进行全角转半角操作
#全角转半角 #ljl use Encode; sub CheckSBC { my ($name)=@_; my @character; my $tmpname=$name; my $headname ...
- yii user 组件
yii/web/user enableAutoLogin:如果未登录,则会从cookie中登录 autoRenewCookie: 如果登录了,则会使用renewIdentityCookie更新cook ...
- myloader原理0
开源MySQL多线程逻辑导入工具myloader原理与改进 在上一篇中,介绍了多线程备份工具mydumper的实现及网易对其所做的优化,本篇聊聊与mydumper配合使用的myloader工具. my ...
- windows mysql utf-8中文乱码解决方法
今天写项目,无论如何实质调试,在mysql里始终是中文乱码,找了好多办法一个一个尝试,最终才找到解决办法: 打开wamp-> mysql→my.ini,在如图所示的地方添加相应的代码
- cocos2dx 背景用小尺寸图片滚动填充的方法
直接上代码 在初始化方法中添加图片: bool BackGroundLayer::init() { frameCache=CCSpriteFrameCache::sharedSpriteFrameCa ...