iphone游戏开发之cocos2d ( 八 )使用加速计(重力感应)控制精灵移动UIAcceleration
来源:互联网 发布:淘宝上旗舰店和专卖店 编辑:程序博客网 时间:2024/05/17 00:58
holydancer原创,如需转载,请在显要位置注明:
转自holydancer的CSDN专栏,专栏地址:http://blog.csdn.net/holydancer
上次我们实现了一个不停运动的精灵(一个不停摇尾巴的小鱼),今天我们来尝试用重力感应控制这个小鱼的游动,通过摇摆倾斜手上的设备(模拟器不行,像GPS,加速计这些都需要硬件支持的,你懂的),来控制精灵的游动,像好多赛车游戏,都需要用到这种技术;
首先需要强调的是ios设备上,包括大部分设备上的加速计都是支持三轴立体感应的,我们将iphone屏幕向上放到桌上,那么z轴上的力就是-1g,如果竖着放(home键在下)那么Y轴上的力就是-1g;g是单位,我们在应用中调用的一般都是纯粹的符点数字,甩一甩或者摇一下的话,那么作用在某一个方向上的力就会突然加大,力度不同,值也不同,一般情况下绝对值会在1.5左右;另外在cocos2d中,只需要开启加速计支持,不需要再额外设定delegate,该层就可以直接调用-(void)accelerometer: didAccelerate:方法来获取加速计返的数值;
核心方法有两个:
-(void)update:(ccTime)delta
//用来根据返回不同的加速计值来更新精灵的位置;
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
//用来读取加速计返回的值并设定一下灵敏度之类;
在IntroLayer.h中设定一个
CGPoint posChange,用来根据加速计返回的力值来做出不同的精灵移动速率;
在IntroLayer.m中开启加速计功能,我们的操作要在该层上进行,所以该层要响应加速计方法;
layer.isAccelerometerEnabled=YES;
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ posChange.x = posChange.x *0.4f+ acceleration.x *7.0f; posChange.y = posChange.y *0.4f+ acceleration.y *7.0f;// CCLOG(@"acceleration.x = %f,acceleration.y = %f,posChange.x=%f,posChange.y =%f ",acceleration.x,acceleration.y,posChange.x,posChange.y); if (posChange.x>100) { posChange.x=100; } if (posChange.x<-100) { posChange.x=-100; } if (posChange.y>100) { posChange.y=100; } if (posChange.y<-100) { posChange.y=-100; }}
其中acceleration.x,acceleration.y分别是在x轴和y轴上的力,有正负之分,代表中左右上下的不同倾斜,acceleration.z我们用不到,这里不考虑;
其中
posChange.x = posChange.x *0.4f+ acceleration.x *7.0f;这个计算是为了将返回的不同方向的值转化为每帧精灵移动的距离,0.4和7.0大家可以随意做更改,一般可以多做几次尝试来调试出合适的参数,赛车游戏中不同车的操控感也是因为这个算法不同引起的;
然后实现update方法,实现每帧画面的变化;
-(void)update:(ccTime)delta
{
CCSprite *sprite = (CCSprite *)[self getChildByTag:1];
CGPoint pos = [self getChildByTag:1].position;
pos.y -= posChange.x;
//因为坐标系的原因,这里要做下反向处理;
//该项目我是默认的横屏的,所以精灵的位置坐标是以左下角为原点的;
pos.x += posChange.y;
//下面是用来使精灵不至于飞到界面外;
if (pos.x>1024) {
//我用的是ipad,所以分辨率为1024 x 768
pos.x = 1024;
posChange.x = 0;
posChange.y = 0;
}
if (pos.x<0) {
pos.x = 0;
posChange.x = 0;
posChange.y = 0;
}
if (pos.y>768) {
pos.y = 768;
posChange.x = 0;
posChange.y = 0;
}
if (pos.y<0) {
pos.y = 0;
posChange.x = 0;
posChange.y = 0;
}
[self getChildByTag:1].position = pos;
CCLOG(@"pos.x = %f,pos.y = %f,sprite.content.size.width=%f",pos.x,pos.y,sprite.contentSize.width);
//用来跟踪精灵的坐标;
}
最后在该层的onEnter方法中记得调用
[selfscheduleUpdate];
现在在真机上可以看出效果了;另外今天的代码是在上次的基础上实现的,所以有的地方描述的不够详细,主要是记录一下思路,代码比较粗糙,大家将就看吧;
- iphone游戏开发之cocos2d ( 八 )使用加速计(重力感应)控制精灵移动UIAcceleration
- 加速计(重力感应功能)的使用
- iOS - 加速计(重力感应)
- 关于cocos2d-html5 中使用重力感应于重力加速
- 加速及控制精灵移动,加速计值的处理
- UIAccelerometer 加速计 UIAcceleration
- UIAccelerometer 加速计 UIAcceleration
- 【iphone游戏开发】iphone-Cocos2d游戏开发之四:精灵实现缩放,旋转,跳动,移动等动画
- 【iphone游戏开发】iphone-Cocos2d游戏开发之四:精灵实现缩放,旋转,跳动,移动等动画
- 【iphone游戏开发】iphone-Cocos2d游戏开发之四:精灵实现缩放,旋转,跳动,移动等动画
- 【学习笔记】Cocos2d-x 重力加速计的使用
- 【iphone游戏开发】iphone-Cocos2D游戏开发之二:精灵表的详细讲解(一)和Zwoptex工具的使用
- 【iphone游戏开发】iphone-Cocos2D游戏开发之二:精灵表的详细讲解(一)和Zwoptex工具的使用
- 【iphone游戏开发】iphone-Cocos2D游戏开发之二:精灵表的详细讲解(一)和Zwoptex工具的使用
- 【iphone游戏开发】iphone-Cocos2D游戏开发之二:精灵表的详细讲解(一)和Zwoptex工具的使用
- iphone游戏开发之cocos2d ( 十 )使用纹理图册,更方便生成精灵动画
- iphone游戏开发之cocos2d( 十一 )使用CCSpriteBatchNode和纹理图册,提高精灵动画效率;
- 【iphone游戏开发】iphone-Cocos2d游戏开发之三:精灵表的详细讲解(二)小鸟眨眼睛
- 图像分割
- redhat5.5添加使用直连方式的Gisserver Mapservice
- 删除目录下相同文件的python代码(逐级优化)
- 关于修改android原生键盘上按键大小的方法
- 打造个人专属的微型Linux--启动原理篇
- iphone游戏开发之cocos2d ( 八 )使用加速计(重力感应)控制精灵移动UIAcceleration
- MyEclipse6.5安装SVN插件的三种方法
- Oracle 删除数据的几种方法
- Hello, world!
- 牛奶和豆浆我们应该选择哪一种
- sharepoint 2010 性能检测
- c++ 类 构造函数
- 拿两千块的薪水要有一万块的范儿
- 软件公司的职位缩写