2013-03-17 51 views
0

這必須是一個相當簡單的解決方案,我只是想念。如何使用KKInput實現簡單的拖放操作?如何使用KKInput實現在Kobold2d中的拖動?

我想在更新方法中這樣的東西。

KKInput* input = [KKInput sharedInput]; 
if ([input touchesAvailable]){ 
    if ([input isAnyTouchOnNode:[self getChildByTag:0] touchPhase:KKTouchPhaseAny]) { 
     [sprite setPosition:[input locationOfAnyTouchInPhase:KKTouchPhaseAny]]; 
    } 
} 

它工作正常,但有兩個問題。 1.你可以通過移動真正的快速和2來避開拖動。如果拖動精靈下面的標籤,它抓住了那個。

我錯過了什麼?

+1

觸摸開始於精靈:設置拖動標誌,記住精靈。移動事件=更新精靈pos以觸摸pos。觸摸結束:清除拖動標誌。 – LearnCocos2D 2013-03-17 20:50:36

+0

我的歉意,你能解釋一下設置拖動標誌的過程嗎?仍然在這裏失去。謝謝你回答Steffen。 – Hartix 2013-03-18 00:10:43

+0

dragging = YES; ;) – LearnCocos2D 2013-03-18 00:25:33

回答

0

經過LearnCocos2D的一些幫助,這裏是我所做的。

首先,我創建了一個名爲isDragging的BOOL,並在init中將其設置爲no。我還創建了一個屬性來跟蹤哪個精靈正在被觸摸。

if ([input touchesAvailable] && isDragging == NO){ 
    if ([input isAnyTouchOnNode:[self getChildByTag:0] touchPhase:KKTouchPhaseAny]) { 
     draggedSprite = zero; // Grab this pointer for use next 
     isDragging = YES; 
    } 
} 

然後我設置拖動到NO是沒有觸摸可用。

if (![input touchesAvailable]) { 
    isDragging = NO; 
} 

然後只需更新被拖動到觸摸位置的當前精靈。

if (isDragging){ 
    draggedSprite.position = [input locationOfAnyTouchInPhase:KKTouchPhaseAny]; 
} 
相關問題