2011-07-27 57 views
0

如何在MenuItem按鈕被按下時重複一個動作? 我試圖讓在CCMenuItemImage一個子類,並取得如何在MenuItem按鈕被按下時重複一個動作? (cocos2d)

@implementation CCMenuItemSpriteHoldable 

@synthesize buttonHeld; 

-(void) selected 
{ 
[super selected]; 
buttonHeld = true; 
} 
-(void) unselected 
{ 
[super unselected]; 
buttonHeld = false; 
} 

@end 

,並把這個在我的init

CCMenuItem *upButtonItem = [CCMenuItemSpriteHoldable 
          itemFromNormalImage:@"up.png" selectedImage:@"upsel.png" 
          target:self selector:@selector(upButtonTapped:)]; 

但它確實沒有什麼... :( 它只是加載(無效)upButtonTapped時我鬆開按鈕。 有沒有什麼辦法讓一個按鈕,允許ü按住?

謝謝

回答

2

您必須在CCLayer中添加CCSprite,當用戶敲擊CCSprite(使用[yourSprite boundingBox])並按下按鈕啓動選擇器時,實現CCLayer觸摸(開始,移動,結束)捕捉:當用戶觸摸開始通過按鈕時CCSprite並在觸摸結束時取消選擇程序選擇器!

N.B.取消調度按下:選擇器如果在觸摸移動觸摸按鈕退出按鈕CCSprite邊界框

0

我只能回答Cocos2dX,但它應該是相同的機制。實現這個功能有點難以理解,所以我建議你按照子類化Sprite的方式去添加一個CCLayerTouch。

但是,如果你想使用CCMenuItem,我可以告訴你你應該在哪裏開始尋找。 每次用戶觸摸CCMenuItem(節點)時,該類將檢查哪些孩子被觸摸並將這些孩子設置爲選中狀態。當你釋放你的手指時,它會將其設置回未選中狀態並觸發分配給它的選擇器(動作)。這是一次性行動。

兩種方法現在:

  1. 爲了使解僱所有的時間,你需要繼承CCMenuItem和覆蓋四個觸摸回調(不調用超)。在touchbegan中,你將你的精靈註冊爲被觸摸,並在註釋中註銷它。你的類還需要一個update()方法,它將在你的runloop的每一幀被調用。在這個update()方法中,測試是否觸及精靈,如果是的話,你會觸發。這是一種較少的椰子風格的方法。

  2. 如上所述。註冊一個調度程序,並在觸摸結束時取消註冊。

觸摸移動的方法在這種情況下沒有做任何事情。 touchCancelled方法的行爲與touchEnded類似。

相關問題