0

我有他的代码,用于通过水平位置移动对象。

#define kAccelerationSpeed 10
#define kAccelerometerFrequency 200


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


    CGPoint pt =  thePlayer.position ;
    CGFloat accel = acceleration.x * kAccelerationSpeed;
    pt = [[CCDirector sharedDirector] convertToGL:pt];


        pt = ccp (pt.x+accel>0 , yLocationOfPlayer+accel<768 );


}

在初始化语句中

-(id) init
{
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super" return value
    if( (self=[super init])) {
 [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / kAccelerometerFrequency)];
        [[UIAccelerometer sharedAccelerometer] setDelegate:self];
    }

上面的代码有什么问题,它不起作用,当我倾斜屏幕时,它没有为“theplayer”对象做任何移动。请帮我这样做。

提前致谢。

4

2 回答 2

0

您确定您的代表已设置为报告加速度计信息吗?您是否还在加速度计回调中分配了 thePlayer.position ?我不记得为什么,但我确实记得在回调中尝试分配,结果相当卡顿和有问题。对我来说,解决方案是有一个变量,加速度计委托调用将根据委托回调中的变量更新来修改并分配滴答脚本中 thePlayer 的位置。

于 2012-10-29T19:05:40.513 回答
0

你没有分配玩家精灵的位置。尝试这个:

NSLog(@"position before = %@", [NSValue valueWithCGPoint:thePlayer.position]);
thePlayer.position = ccp (pt.x+accel>0 , yLocationOfPlayer+accel<768 );     
NSLog(@"position after = %@", [NSValue valueWithCGPoint:thePlayer.position]);

日志记录将帮助您确定 1) 委托方法是否被触发,以及 2) 位置是否符合您的预期。

于 2012-10-29T18:32:28.383 回答