注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

cocos2d-重力加速度  

2013-06-02 11:45:24|  分类: ios游戏开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

-(id) init

{

// always call "super" init

// Apple recommends to re-assign "self" with the "super's" return value

if( (self=[super init]) ) {

        ball = [CCSprite spriteWithFile:@"ball.png"];

        

        CGSize size = [CCDirector sharedDirector].winSize;

        ball.position = ccp(size.width/2,size.height/2);

        [self addChild:ball];

        

        self.isAccelerometerEnabled = YES;

//        [self scheduleUpdate];

        [self schedule:@selector(update:) interval:1.0];

}

return self;

}


-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{

    

    //最简单的使用加速计数据的方法,但不灵敏

    //  CGPoint pos = ball.position;

    //  pos.x += acceleration.x *10;

    //  pos.y += acceleration.y *10;

    //  ball.position = pos;

    //此处将添加更多代码

    

    

#define kFilteringFactor 0.1

#define kRestAccelY -0.6

#define kMaxDiffX 0.2

#define kMaxDiffY 0.2

#define kMaxPointsPerSecX (winSize.width*0.5)

#define kMaxPointsPerSecY (winSize.height*0.5)

    

    

    UIAccelerationValue rollingX,rollingY;

    //  UIAccelerationValue rollingZ;

    

    rollingX = (acceleration.x * kFilteringFactor) +(rollingX *(1.0 - kFilteringFactor));

    rollingY = (acceleration.y * kFilteringFactor) +(rollingY *(1.0 - kFilteringFactor));

    //  rollingZ = (acceleration.z * kFilteringFactor) +(rollingZ *(1.0 - kFilteringFactor));

    

    float accelX = acceleration.x - rollingX;

    float accelY = acceleration.y - rollingY;

    //  float accelZ = acceleration.z - rollingZ;

    

    CGSize winSize = [CCDirector sharedDirector].winSize;

    

    float accelFractionX = accelX / kMaxDiffX;

    float pointsPerSecX = kMaxPointsPerSecX * accelFractionX;

    

    float accelDiffY = accelY - kRestAccelY;

    float accelFractionY = accelDiffY /kMaxDiffY;

    float pointsPerSecY = kMaxPointsPerSecY * accelFractionY;

    

    velocityX = pointsPerSecX;

    velocityY = pointsPerSecY;

}


-(void)update:(ccTime)delta{

    

    CGSize winSize = [CCDirector sharedDirector].winSize;

    

    //设置小球在横向和纵向的移动边界

    

    float maxY = winSize.height -ball.contentSize.height/2;

    float minY = ball.contentSize.height/2;

    

    float maxX = winSize.width - ball.contentSize.width/2;

    float minX = ball.contentSize.width/2;

    

    //根据加速度数据计算出小球的最终y坐标,注意使用了一个简单的算法来确保小球不会超出边界

    

    float newY = ball.position.y + (velocityY *delta);

    newY = MIN(MAX(newY, minY),maxY);

    

    //根据加速度数据计算出小球的最终x坐标,注意使用了一个简单的算法来确保小球不会超出边界

    

    float newX = ball.position.x + (velocityX *delta);

    newX = MIN(MAX(newX, minX),maxX);

    

    //更新小球的位置

    ball.position = ccp(newX/2,newY);

}


  评论这张
 
阅读(157)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017