2013-02-01 74 views
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; 
} 

謝謝!

編輯1: 這些是bools在遊戲循環中所做的事情,我試圖實現的幾乎是,如果在兩側同時觸摸,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; 
+1

這個問題可能更具體。您應該首先定義多個觸摸應該如何工作。假設有兩個觸摸,觸摸1出現在左側,觸摸2出現在右側,您會如何預期變量的行爲? 「touchLeftDown」和「touchRightDown」都是「真」嗎?如果在左邊有兩個觸點,那麼該怎麼辦? –

+0

如果1同時觸摸每側,則兩者都爲YES。如果一側有2個,另一側有1個,如果有觸摸,無論該側的觸摸次數如何,這兩個布爾將是肯定的。 –

+0

您可以通過在countTouches結尾計算leftTouches - rightTouches來獲得您想要的touchStep,但是您的編輯提到TOUCH_INCREMENT爲0,並且我沒有看到在任何地方進行了修改,它看起來像TOUCH_INCREMENT是一個常量。 –

回答

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,您可能會看到一些意想不到的副作用。

+0

感謝迄今,看看我的edit1。 :) –