用屏幕触摸控制替换加速器输入

时间:2010-07-18 12:05:58

标签: iphone objective-c cocos2d-iphone

我正在开发一款使用加速度计进行控制的iPhone游戏。我还没有Apple Developer Program用户,所以我无法在我的设备上进行测试,所以我试图根据我在屏幕上的位置给游戏增加一些加速度计值。

我试图做的事情: 我试图将屏幕中间作为中点,然后从中点开始的点击偏移将是加速度计的XY。我知道这些值将超过1,并且我需要的值从1到-1,所以我尝试做很多事情来让它工作。我经常很亲密,但我无法让它发挥作用。

另外,我希望有一个限制,如果距离中点的距离超过100,(你知道,sqrt(dx dx + dy dy),那么它需要距离为100,而不是像193或其他什么。

到目前为止,这是我的代码:

- (void) ccTouchesMoved: (NSSet *)touches withEvent: (UIEvent *)event
{
    if(IS_SIMULATOR)
    {
        for( UITouch *touch in touches ) {
            CGPoint location = [[CCDirector sharedDirector] convertToGL: [touch locationInView: [touch view]]];
            CGFloat dx = location.x - middleOfScreen.x;
            CGFloat dy = location.y - middleOfScreen.y;
            CGFloat d = sqrtf(dx*dx+dy*dy);
            CGFloat a = atan2(dy, dx);
            CGFloat accX = /*acceleration value x*/
            CGFloat accY = /*acceleration value y*/

            //[mlRef setAcceleration: ccp(accX, accY)];
        }
    }
}

我希望你明白我想要的,请帮忙。 :)

此外,在任何人推荐之前,不,我不想使用iSimulate,我的家庭网络不喜欢它。 :(

1 个答案:

答案 0 :(得分:1)

所以你的问题实际上是如何规范化dx和dy?只需将它们的最大值分开,dx应为160,dy应为240。

否则,只需NSLog或printf所有值并只跟踪值。如果您仍然无法解决问题,请发布日志记录代码及其输出以进行单次触摸。