2011-05-21 118 views
1

我正在爲iPhone上的Cocos2d遊戲工作。這段代碼爲什麼給EXC_BAD_ACCESS?

以我init方法我有一個對象(類型ID)聲明如下(也note注意bossDir被聲明爲1):在一計時器方法

bossMov = [CCMoveTo actionWithDuration:1.0f position:ccp(75*bossDir, 320-55)]; 
    [boss runAction:bossMov]; 

然後,我有:

if ([bossMov isDone] == YES) { 
    bossDir = -bossDir; 
    [boss stopAllActions]; 
    [boss runAction:bossMov]; 
} 

它移動的老闆一次,但之後它給EXC_BAD_ACCESS,並指出我的文件「CCTimer.m」這樣一行:

if(elapsed >= interval) { 
    impMethod(target, selector, elapsed); //This line in particular. 
    elapsed = 0; 
} 

我該如何解決這個問題?

回答

0

您不保留bossMov操作。所以當你撥打[boss stopAllActions];它被釋放和釋放。然後你試圖運行釋放的動作 - 所以你得到了不好的訪問。

1

你有沒有嘗試NSZombieEnabled,因爲我不是一個cocos2d的傢伙,但只是作爲一個建議,我告訴你這一點。因爲訪問錯誤只會在您指向不再存在於內存中的對象時纔會出現,並且如果您嘗試這樣做,應用程序會崩潰

+0

非常感謝這個答案,它真的救了我使用NSZombie!我有一個玩家實例(NSObject),它是一個autorelease對象,因爲我假定所有的CCSprite(cocos2d)等都是autorelease,但是我沒有想到的是,cocos2d庫將所有CCSprites存儲在數組中,所以它們被用在某處意味着它們不會被釋放,但是我的播放器實例在初始化後立即被釋放,然後當我的主定時器被調用時程序會崩潰。然後,我更改了要保留的玩家,並在我的分配中釋放它。再次感謝:) – 2012-01-19 13:33:01

+0

很高興幫助你 – Radix 2012-02-16 06:49:42