如何通过在cocos2d中标题屏幕来移动对象

时间:2012-10-29 18:26:34

标签: iphone ios cocos2d-iphone

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

#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”对象做任何动作。请帮助我这样做。

提前感谢。

2 个答案:

答案 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的位置。