2014-04-27 46 views
0

這裏是我的3個CCSliders的代碼,他們改變了蝙蝠色精,我救了滑塊和那些工作正常,但我需要保存_SettingBat.color整個應用程序加載,這就是我有問題將顏色保存到NSUserDefaults。將CCColor保存爲NSUser默認值?

CCColor *batColor; 

-(void)redSlider 
{ 

    batColor = [CCColor colorWithRed:_redSlider.sliderValue green:_greenSlider.sliderValue blue:_blueSlider.sliderValue]; 
    _settingsBat.color = batColor; 

} 

-(void)greenSlider 
{ 

    batColor = [CCColor colorWithRed:_redSlider.sliderValue green:_greenSlider.sliderValue blue:_blueSlider.sliderValue]; 
    _settingsBat.color = batColor; 

} 

-(void)blueSlider 
{ 

    batColor = [CCColor colorWithRed:_redSlider.sliderValue green:_greenSlider.sliderValue blue:_blueSlider.sliderValue]; 
    _settingsBat.color = batColor; 

} 

-(void)save 
{ 

    NSLog(@"The Color is, %@",_settingsBat.color); 
    [[NSUserDefaults standardUserDefaults] setFloat:_redSlider.sliderValue forKey:@"redSlider"]; 
    [[NSUserDefaults standardUserDefaults] setFloat:_greenSlider.sliderValue forKey:@"greenSlider"]; 
    [[NSUserDefaults standardUserDefaults] setFloat:_blueSlider.sliderValue forKey:@"blueSlider"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 
    _savedLabel.visible = TRUE; 

    NSLog(@"My Key is, %@",[[NSUserDefaults standardUserDefaults] stringForKey:@"batColor"]); 

} 
+0

可以保存個人的argb組件分開 – LearnCocos2D

+0

我已經更新上面我的代碼。 – Jason

回答

0

這適用於cocos2D上V3

得到一個實例的UIColor:

UIColor *spriteUIColor = [_spriteColor.color UIColor]; 

存檔:

NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:spriteUIColor]; 
[[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"mySavedColor"]; 

要恢復它:

NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"mySavedColor"]; 
UIColor *restoredUIColor = [NSKeyedUnarchiver unarchiveObjectWithData:colorData]; 
+0

這不起作用。 – Jason

+0

我已經在一個空白的項目測試與此'的UIColor * saveColor = [[CCColor brownColor]的UIColor]',而不是'的UIColor * spriteUIColor = [_spriteColor.color的UIColor]',它工作正常。 – lucianomarisi

+0

是的,這將工作,但精靈的顏色是一個變量,用戶將設置3 rgb CCColor滑塊。 – Jason

0

我通常不同意歸檔對象作爲保存簡單值的方法。除了不是非常有效,也違反了數據的分離,從你的實現(也許不是什麼大不了的事在這裏,但是......),你可以碰到問題時,類實現變化等

我要說避免單獨保存頻道,因爲它們確實是一種價值。我會親自保存顏色爲數字RGB值,則使用這樣的宏:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]` 

(從this SO回答)

從存儲的RGB值創建UIColor在加載時間。

閱讀本SO Q/A瞭解位需要如何包裝/解壓縮到32位數字。傳統上,你通過使用第一個字節作爲A通道,第二個作爲R,第三個G,最後一個是B來做到這一點。在你的情況下,只要你解開它們,你怎樣打包它們並不重要,但是我發佈的宏預計ARGB。

我可以如何將顏色存儲爲一個32位的數字,如果你需要一個例子更新我的答案;以及如何從編號中重建UIColor

+0

是的,如果你可以添加完整的細節,我已經搜索了幾天,並從未見過你提供的來源。這會影響我的滑塊的代碼嗎?另外,16和8代表什麼?謝謝您的回覆! – Jason

+0

@Jason你的滑塊應該都連接到相同的方法,因爲他們*所有*彼此相同。根本沒有必要維護3個單獨的重複方法。 –

+0

你能添加完整的代碼細節嗎? – Jason