0

タッチが画面の特定の側で開始された場合、左側または右側の BOOL をほぼ YES に設定し、次にタッチが移動するときにチェックして、画面の側を変更するかどうかを確認するチュートリアルでこのコードを見つけました。他の BOOL はい。

だから私は今マルチタッチを実装しようとしていますが、次のコードでどのように機能するかわかりませんか? 誰かが私がそれをどのように行うかについて何か考えがありますか?

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    touchStartPoint = [touch locationInView:self.view];
    if (touchStartPoint.x < 160.0) {
        touchLeftDown = TRUE;
    }
    else if (touchStartPoint.x > 160.0) {
        touchRightDown = TRUE;
    } 
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPoint = [touch locationInView:self.view];

    if (touchStartPoint.x < 160.0 && currentTouchPoint.x < 160.0) {
        touchLeftDown = TRUE;
    }
    else if (touchStartPoint.x > 160.0 && currentTouchPoint.x > 160.0)
    {
        touchRightDown = TRUE;
    }
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    touchLeftDown = touchRightDown = FALSE;
}

ありがとう!

Edit1: これらはブールがゲーム ループで行っていることです。私が達成しようとしているのは、両側に同時にタッチがある場合、両側のタッチがキャンセルされるため、TOUCH_INCREMENT が 0 になることです。お互いアウト。どうすればそれを達成できますか?とにかく、これは私が話しているコードです:

if (touchLeftDown == TRUE) {
        touchStep -= TOUCH_INCREMENT;
    }
    else if (touchRightDown == TRUE) {
        touchStep += TOUCH_INCREMENT;
    }
    else {
        touchStep = SLOWDOWN_FACTOR * touchStep;
    }
    touchStep = MIN(MAX(touchStep, -MAX_ABS_X_STEP), MAX_ABS_X_STEP);
    pos.x += touchStep;
4

1 に答える 1

1

touchStartPoint(i)varがなくても、おそらくこれを機能させることができます。重要なことは、使用せず-anyObject、代わりに各タッチを検査することです。次のコード変更が有効な場合があります。

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

    int leftTouches=0;
    int rightTouches=0;

    for (UITouch *touch in touches) 
    { 
        CGPoint location = [touch locationInView:touch.view];
        //just in case some code uses touchStartPoint
        touchStartPoint=location;

        if (location.x < 160.0) {
            leftTouches++;
        }
        else if (location.x > 160.0) {
            rightTouches++;
        }
    }

    //reset touch state
    touchLeftDown=FALSE;

    //set touch state if touch found
    if(leftTouches>0){
        touchLeftDown=TRUE;
    }

    touchRightDown=FALSE;
    if(rightTouches>0){
        touchRightDown=TRUE;
    }

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

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

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    touchLeftDown = touchRightDown = FALSE;
}

ここでは、同じロジックを実装する必要があるため、touchesBegan と touchesMoved によって呼び出される関数を作成しました。touchStartPointコードで何らかの形で使用されている場合、意図しない副作用が発生する可能性があります。

于 2013-02-02T07:59:39.730 に答える