2012-07-31 36 views
2

我有幾個使用Cocos2D創建的應用程序。與1.0相比Cocos2D 2.0的不同行爲

我正在將其中一些升級到Cocos2D的新版本2.0。我使用的方法是:

  1. 我從標準模板創建一個新的空白項目
  2. 我的所有文件移動到新的項目

我一般保持層HelloWorld作爲我的初始層。我注意到Cocos2D創建了一個introLayer作爲最初的一個,我已經刪除了它,並恢復了像之前一樣加載Helloworld的行爲。說我注意到幾件事情:

  1. Helloworld的init方法內部的行爲現在是不同的。我已經注意到方向在init方法中現在報告不正確。即使該應用只是風景,它也會始終將其報告爲肖像。我注意到的還有,就像導演還沒有完全初始化。如果我嘗試使用導演的觀點,這一點得到了證實。如果我嘗試在Helloworld的init方法中使用它,這個視圖總是無效的。

爲了解決這個問題,我將所有的代碼都移到了Helloworld的onEnter方法中。現在,Helloworld和導演完全初始化,一切正常。

此方法適用於我爲Cocos2D 1.0升級到2.0的第一批應用程序,但是我現在從Cocos2D 2.0beta轉換爲2.0 final的應用程序出現問題。

我現在的問題是,是的Helloworld觸發沒有任何聯繫,是的,我有這樣的到位:

-(void) registerWithTouchDispatcher 
{ 
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 
} 


- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 
    return YES; 
} 

什麼可以阻止的Helloworld從檢測觸摸的2.0?我如何使Helloworld的init方法像2.0 beta或1.0中那樣行事?

注意:當加載Helloworld時,ccTouchBegan和registerWithTouchDispatcher永遠不會被調用。

謝謝。

回答

0

此問題的解決方案是將onEnter方法放在[super onEnter]上。

-(void) onEnter { 
    [super onEnter]; 
    self.isTouchEnabled = YES; 
} 

缺乏此行是創造所有類型的應用問題,如調度不靈,ccMove的怪異的行爲,ccTransition不會觸發onEnterTransitionDidFinish和所有類型的問題。

3

旋轉問題是一個已知的錯誤。即使應用程序僅設置爲橫向模式,第一個場景也將以縱向模式初始化。這是因爲init在方向被應用程序委託更新之前發生。將代碼放入onEnter可以修復該問題,或者只是加載一個「介紹」場景,然後加載實際的第一個場景修復。

觸摸問題可能不是Cocos2d 2.0的問題。也許這不像設置self.isTouchEnabled = YES那麼簡單。如果未調用registerWithTouchDispatcher方法,則isTouchEnabled未設置爲YES,或者您不在CCLayer類中執行此操作,而可能是CCScene。

+0

我現在發現,我必須把它放在onEnter上:[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];出於某種原因,在Helloworld中,registerWithTouchDispatcher不會自動調用。另一件事是,現在我必須將CCTargetedTouchDelegate放在界面的Helloworld委託聲明中。這樣做後,ccTouchBegan現在被觸發。現在我必須爲支持觸摸的所有類執行此操作......這是一個錯誤嗎? – SpaceDog 2012-07-31 20:16:45

+0

是的,我正在做一個CClayer類。 Helloworld是由默認模板創建的。我現在已經發現了很多其他問題,並且我可能會使用2.0測試版保持該項目,直到2.0被修復。不管怎樣,謝謝。 – SpaceDog 2012-07-31 20:42:30

相關問題