2010-07-20 78 views
4

我正嘗試用2D圖形創建一個相對簡單的遊戲,它具有一些複雜的動畫。我試圖用基本的Core Graphics和Core Animation庫開發遊戲,但遊戲對象的動畫表現並不令人滿意(即生澀/延遲)。支持iPhone 4的Cocos2d-iphone高分辨率

所以,我現在正在考慮Cocos2D,它看起來非常有希望,直到我檢查了iPhone 4的高分辨率支持。這似乎並沒有很好地工作,但是,我剛剛開始看看它。

的一件事文件似乎說的問題就那麼簡單地使用CCDirector設置比例因子,它可以像這樣做:

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 
    [[CCDirector sharedDirector] setContentScaleFactor: [[UIScreen mainScreen] scale] ]; 
} 

然而,這並沒有給行爲我預計。它只是使用的像素數量的兩倍,這意味着我必須在所有代碼中考慮「雙像素因子」。

在Core Graphics/Animation庫中,我們使用的座標空間不會改變。在窗簾後面,只需將所有內容翻倍即可充滿iPhone 4高分辨率屏幕,並在可用的情況下使用@ 2x圖像。這實際上效果很好,遊戲邏輯不需要考慮設備的分辨率。 Cocos2D似乎已經實現了這一點非常糟糕,使我不想登上Cocos2D火車。

我發現了一些關於該主題的其他主題,但沒有涉及解決方法的真正答案。這是否被修復?我做錯了,還是Cocos2D根本就不高準備? Cocos2D有什麼替代品可以給我我需要的嗎?

回答

3

對不起,無恥的自我推銷,但我想它可以幫助你。我最近在cocos2d上寫了兩篇關於高分辨率的小博客文章,並將它們放在我們的網站上。

第一個詳細介紹瞭如何讓cocos2d啓動並運行,其中包括如何實現常規和高清晰度圖像自動加載行爲的建議修復。

此外,還有第二篇文章試圖進入點和像素之間的差異的一些細節。 UIKit完全基於點,這就是爲什麼你不必重新處理所有座標。與UIKit相比,cocos2d基於像素工作,因此依賴於分辨率。您可以通過一些相當簡單的轉換爲cocos2d提供使用點而不是像素的方式。我已經將這些作爲CCDirector和CCNode的類別實現,以使它們易於使用。顯然,這些類別中的方法不是唯一應該「指出」的方法。例如,指定CCLabel上的大小或CCMoveBy上的任何位置都是基於像素的,因此也必須重新制作...

看看這個博客:http://apptech.next-munich.com/(我會直接鏈接到文章,但作爲一個新用戶,我只能在答案中發佈一個鏈接)。

希望這可以幫助你,讓你開始!

+0

嗨,謝謝你的回答。你的自我推銷是值得讚賞的,因爲你們都回答了我的問題,並且解釋得更簡單。的確,Cocos使用UIKit使用點的像素,這是我遇到的問題。您所描述的解決方案非常簡單,因爲它很有效。事實上,這樣的解決方案是必需的,這讓我說Cocos並不是真正的高分辨率,因爲它沒有實現像UIKit這樣的點座標空間。希望這將很快由Cocos2D實施。非的少;你已經回答我的問題,並因此獲得獎勵:) – 2010-07-22 13:09:25

+0

我很高興我能幫助你!我也認爲cocos2d應該逐漸採用點而不是像素的概念,儘管我認爲這將是一個相當大的變化,因爲框架中的每個類都很可能不得不被觸及。所以不要指望任何魔法太快:) – Benjamin 2010-07-22 13:12:55

0

的Cocos2D使用UIImage方法imageWithContentsOfFile:initWithContentsOfFile:其中,儘管該文件說什麼,不正確地返回在iPhone上的圖像時的2倍@版本4.

這是一個已知的bug,顯然是蘋果在它上面工作。

但是,有些人認爲這是正確的行爲,因爲它將路徑傳遞給特定文件,而不是文件的名稱,並讓系統決定使用哪一個文件。在那種情況下,我建議更新文檔以反映這個事實,如果它是真的。我們將看到蘋果如何迴應。

+0

感謝您的答覆。 我的確瞭解同樣的事情,但這不是我發現的唯一問題。如果cocos只能在iPhone4上使用低分辨率而不是高分辨率圖像,那麼結果就不那麼明快了,但仍然在與低分辨率(3GS)iPhone相同的座標空間中。不是這種情況。根據設備的分辨率,我不得不使用320x480和640x960處理所有代碼中的320x480。這我不喜歡:) – 2010-07-21 08:01:45

1

我正在找出一個非常簡單的解決方案。我的進度貼在這裏:http://www.cocos2d-iphone.org/forum/topic/8511#post-50361

基本上你在CCSprite中縮放你的紋理源矩形,但沒有別的,這樣你就可以使用相同的320x480座標系統(又稱積分系統),但你會得到高分辨率圖形。

你應該與此有一點#2本雅明的博客在這裏結合自己的技術,這樣你就不會得到內存的問題:http://apptech.next-munich.com/2010/07/high-res-using-cocos2d-on-ios-4.html