我有他的代码通过水平柱使对象进行移动。
#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 );
}
在Init Statment
中-(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"对象进行任何动态。请帮助我执行此操作。
预先感谢。
您确定您的代表是否设置以报告加速度计信息?您是否还分配了player.position在加速度计回调中?我不记得为什么,但我确实记得在回调中尝试作业,结果很结实且有问题。对我来说,解决方案是要有一个变量加速度计委托呼叫将根据委托回调中的变量更新来修改和分配tick脚本中的播放器的位置。
您没有分配玩家精灵的位置。尝试以下操作:
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)位置如您所期望的。