(cocos2d偷偷摸摸输入)当用touchLocation设置操纵杆位置时,精灵不会移动

时间:2012-01-22 16:45:43

标签: iphone ios cocos2d-iphone joystick

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

-(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];
    }

}

但结果是,操纵杆将出现并自动移除。但我的精灵不会动弹。 (我设置了断点,调用了sneakyUpdate方法。但是joystick.velocity总是为0.(并且thumbSprite没有跟随我们的手指。 请帮我。

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

2 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但我认为你应该使用ccTouchBegan而不是ccTouchesBegan,因为sneakyJoystick类使用ccTouchBegan / Moved / Ended / Cancelled。此外,还有一个触摸,这就是你想要的 我希望它有效!

答案 1 :(得分:0)

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