0

我想让用户选择操纵杆的位置。即,当用户触摸一个位置时,操纵杆将出现在那里并准备好使用,并在手指松开时移除。

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    if ([self getChildByTag:kTagJoyStick] == nil) {
        [self addJoystickWithPosition:[Helper locationFromTouches:touches]];
    }

}


-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    if ([self getChildByTag:kTagJoyStick] != nil) {
        [self removeChildByTag:kTagJoyStick cleanup:YES];
    }

}
-(void) ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    [self ccTouchesEnded:touches withEvent:event];
}

(在 ccTouchesMoved 方法中什么都不做)

摇杆的更新方法是:

-(void) sneakyUpdate {

    if ([self getChildByTag:kTagJoyStick] != nil) {
        if (joystick.velocity.x < 0) {
            [self controlLeft];
        }
        else if (joystick.velocity.x > 0) {
            [self controlRight];
        }
        else {
            [self controlStop];
        }

    }
    else {
        [self controlStop];
    }

}

但结果是,操纵杆会出现并自动移除。但我的精灵不会移动。(我设置了断点,确实调用了偷偷摸摸的更新方法。但是joystick.velocity始终为0。(并且thumbSprite没有跟随我们的手指。请帮助我。

更新:事实证明我必须使用 2 个手指(一个用于触摸一次并让操纵杆出现,将我的手指移开,然后用另一根手指控制操纵杆)

4

2 回答 2

0

看起来问题出在您的操纵杆类中。我见过的每个操纵杆实现都使用 ccTouchesBegan 方法来激活操纵杆,然后在 ccTouchesMoved 方法中,确保在使用之前激活它。我看到的问题是您在触摸开始方法之后创建并添加了操纵杆,这意味着您的操纵杆永远不会“激活”。绕过这一点的一种方法是在创建操纵杆的方法中执行所有操纵杆的 ccTouchesBegan 函数,并通过传递对将使用它的触摸的引用从那里“激活”它。

于 2012-02-04T00:26:57.703 回答
0

我不是 100% 确定,但我认为你应该使用 ccTouchBegan 代替 ccTouchesBegan,因为偷偷摸摸的操纵杆类使用 ccTouchBegan/Moved/Ended/Cancelled。此外,只需轻轻一按,这就是您想要的。
我希望它有效!

于 2012-01-29T15:45:04.787 回答