我有他的代码通过水平位置移动对象。
#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”对象做任何动作。请帮助我这样做。
提前感谢。
答案 0 :(得分: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)位置是您所期望的。
答案 1 :(得分:0)
您确定您的代表是否已设置为报告加速度计信息?你是否也在加速度计回调中分配了thePlayer.position?我不记得为什么,但我记得在回调中尝试分配,结果是相当结实和有问题的。对我来说,解决方案是有一个变量,加速度计委托调用将修改并根据委托回调中的变量更新在tick脚本内分配thePlayer的位置。