2013-04-15 9 views
6

私はゲームを構築しようとしていますが、異なる解像度と画面サイズをどのようにサポートするのかと不思議に思っていました。スプライトの位置については、特定の比率に従って位置を設定する基本的な機能を実装しました。これは、sharedDirectorのwinSizeメソッドから画面の幅と高さを取得することによって取得されます。さまざまな解像度をサポートするアンドロイド用のCocos2d

しかし、私はまだデバイスの解像度に応じてスプライトのスケーリング係数を計算する何かを開発していないので、このアプローチはテストされていません。誰かが私にスプライトのスケーリングを正しく計算し、スプライトのピクセル化を避けるためのシステムを提案する方法やヒントを教えてもらえますか?

私はGoogleで検索し、Cocos2d-xが異なる解像度とサイズをサポートしていることを確認しましたが、私はCocos2dのみを使用することになっています。

EDIT:これは私の最初のゲームなので少し混乱しています。私の間違いを指摘してください。

答えて

9

私は最終的に私はLDPI、MDPI、hdpi、およびxhdpi用0.75,1,1.5,2.0によってPTM率を乗じています

getResources().getResources().getDisplayMetrics().densityDpi 

し、それに基づいたようなデバイス表示denitiyを取得することによってこれをしなかったわかりましたそれぞれ、

私はそれに応じてスプライトのスケールも変更しています。そして私はベースとして320X480を維持し、次に現在のxとyのピクセルとベースピクセルとの比率を乗算して配置しました。

EDIT:より良く理解するためにいくつかのコードを追加:

public class MainLayer extends CCLayer() 
{ 
CGsize size; //this is where we hold the size of current display 
float scaleX,scaleY;//these are the ratios that we need to compute 
public MainLayer() 
{ 
    size = CCDirector.sharedDirector().winSize(); 
    scaleX = size.width/480f;//assuming that all my assets are available for a 320X480(landscape) resolution; 
    scaleY = size.height/320f; 

    CCSprite somesprite = CCSprite.sprite("some.png"); 
    //if you want to set scale without maintaining the aspect ratio of Sprite 

    somesprite.setScaleX(scaleX); 
    somesprite.setScaleY(scaleY); 
    //to set position that is same for every resolution 
    somesprite.setPosition(80f*scaleX,250f*scaleY);//these positions are according to 320X480 resolution. 
    //if you want to maintain the aspect ratio Sprite then instead up above scale like this 
    somesprite.setScale(aspect_Scale(somesprite,scaleX,scaleY)); 

} 

public float aspect_Scale(CCSprite sprite, float scaleX , float scaleY) 
    { 
     float sourcewidth = sprite.getContentSize().width; 
     float sourceheight = sprite.getContentSize().height; 

     float targetwidth = sourcewidth*scaleX; 
     float targetheight = sourceheight*scaleY; 
     float scalex = (float)targetwidth/sourcewidth; 
     float scaley = (float)targetheight/sourceheight; 


     return Math.min(scalex,scaley); 
    } 
} 
+0

こんにちは、私はまた、Cocos2d-アンドロイドに取り組んで、私はゲームにwrkingていますので、私はcocos2dでアンドロイドで多重解像度を処理するために、どのように適切なアイデアを得るdidntのようにXMLはNTですCCLayerとALl Imageのアセットフォルダから来ることができますか?私にいくつかの簡単なアイデアを教えてくださいこの画像を修正するにはどうすればいいですか? – ishu

+0

あなたにはすべての画像をアセットだけに入れなければならない画面の解像度に合わせて拡大縮小します。私は基本解像度として320X480を維持してきたので、私の資産はすべて320X480に合っているので、私は幅の画面と私のベース解像度の幅を取得しているので、cocos2dからwinsizeを取得してくださいこれは私にX倍率を与えます。私はこのスケールをすべてのスプライトに適用します。あなたはそれを持っていますか? –

+0

私はそれを持っていますが、私はすべての画像サイズの異なる別のフォルダを作成していますか? – ishu

関連する問題