Cocos2D和iPhone的加速度计



下午好!

今天我开始开发一款游戏,遇到了一个麻烦。所以,首先我想说我没有开发游戏的经验......

因此,我在图层中有一个CCSprite,我想在具有边距(顶部,底部,左侧和右侧)的场景之间移动它。

最小 X 应为

-0.8(在 X 轴中使用加速度计),最大值应为 8。最小 Y 应

为 -1(在 Y 轴上)或 0 在 Z 轴上,最大值应为 0(在 Y 轴上)或 -1(在 Z 轴上)。

好的,知道这一点,我尝试使用最小和最大空间以及加速度计值之间的范围来执行此操作,但我还没有让它垂直工作(iPhone 上的 Y 轴)。然后我在网络上得到了一个完成的代码,但是当我想将对象移回去时,这不起作用(对象只去)。

有人知道如何解决这个问题吗?

我的实际代码:

- (void)updatePosition:(ccTime)dt {
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    float maxY = winSize.height - car.contentSize.height/2 - 20;
    float minY = car.contentSize.height/2 + 20;
    float newY = car.position.y + (carPointsPerSecY * dt);
    newY = MIN(MAX(newY, minY), maxY);
    float maxX = winSize.width - car.contentSize.width/2 - 40;
    float minX = car.contentSize.width/2 + 40;
    float newX = car.position.x + (carPointsPerSecX * dt);
    newX = MIN(MAX(newX, minX), maxX);
    car.position = ccp(newX, newY);
}    
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    float speedY = acceleration.y * 500;
    if(carPointsPerSecY < speedY) {
        carPointsPerSecY = MIN(carPointsPerSecY + 10, speedY);
    } else {
        carPointsPerSecY = MAX(carPointsPerSecY - 2, speedY);
    }
    float speedX = acceleration.x * 200;
    if(carPointsPerSecX < speedX) {
        carPointsPerSecX = MIN(carPointsPerSecX + 10, speedX);
    } else {
        carPointsPerSecX = MAX(carPointsPerSecX - 10, speedX);
    }
    NSLog(@"Acceleration: X (%f) - Y (%f) - Z (%f)", acceleration.x, acceleration.y, acceleration.z);
}

我不确定我是否完全理解您想要什么,但我希望这对您的最终目标有所帮助:

-(void)updatePosition:(ccTime)dt {
    CGSize size = [[CCDirector sharedDirector] winSize];
    int margin = 20;
    float speed = 15;
    float maxX = size.width - car.contentSize.width / 2 - margin;
    float minX = car.contentSize.width / 2 + margin;
    float maxY = size.height - car.contentSize.height / 2 - margin;
    float minY = car.contentSize.height / 2 + margin;
    float newX = MIN(MAX(car.position.x + xAccel * speed, minX), maxX);
    float newY = MIN(MAX(car.position.y + yAccel * speed, minY), maxY);
    car.position = ccp(newX, newY);
}
//define in header: float xAccel, yAccel;
- (void)accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration {
    yAccel = acceleration.x;
    xAccel = -acceleration.y;
}

最新更新