2012-03-27 10 views
5

मैं सोच रहा था कि libgdx में एंड्रॉइड गेम बनाने का कोई तरीका था, इसलिए वे सभी 480x800 के समान रिज़ॉल्यूशन साझा करते हैं। Gdx.graphics.setDisplayMode (480, 800, सत्य) का उपयोग करना कुछ भी बदलना प्रतीत नहीं होता है। 800 से 800 के ऑर्थोग्राफिक कैमरे को बनाने से यह 800 तक 800 हो जाता है, लेकिन यह पूर्णस्क्रीन में ज़ूम नहीं करता है और पूरी स्क्रीन लेता है जैसा कि मैंने उम्मीद की थी। जब मैंने अपने फोन पर इसका परीक्षण किया, तो फोन ने 480x800 रिज़ॉल्यूशन में गेम के दौरान बाकी स्क्रीन को भरने के लिए रिक्त स्थान का उपयोग किया। यहां वह कोड है जिसका मैं उपयोग कर रहा हूं।libgdx खेलों के लिए एंड्रॉइड पर पूर्णस्क्रीन रिज़ॉल्यूशन

public class GameScreen implements Screen { 

private Game game; 
private OrthographicCamera guiCam; 
private SpriteBatch batch; 
private Texture texture; 
private Rectangle glViewport; 

public GameScreen (Game game) 
{ 
     this.game = game; 
     guiCam = new OrthographicCamera(GAME_WIDTH, GAME_HEIGHT); 
     guiCam.position.set(GAME_WIDTH/2, GAME_HEIGHT/2, 0); 
     batch = new SpriteBatch(); 
     texture = new Texture(Gdx.files.internal("data/c2.png")); 
     glViewport = new Rectangle(0, 0, GAME_WIDTH, GAME_HEIGHT); 
} 

@Override 
public void render(float delta) { 
    if (Gdx.input.justTouched()) { 
      texture = new Texture(Gdx.files.internal("data/c1.png")); 
    } 
    GL10 gl = Gdx.graphics.getGL10(); 
    gl.glClearColor(1, 0, 0, 1); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
    gl.glViewport((int) glViewport.x, (int) glViewport.y, 
      (int) glViewport.width, (int) glViewport.height); 

    guiCam.update(); 
    guiCam.apply(gl); 
    batch.setProjectionMatrix(guiCam.combined); 
    batch.begin(); 
    batch.draw(texture, 0, 0, 0, 0, 142, 192); 
    batch.end(); 
} 

private static final int GAME_WIDTH = 480; 
private static final int GAME_HEIGHT = 800; 
} 

अग्रिम धन्यवाद।

उत्तर

10

आपने अपना glViewport 480x800 पर सेट किया है, इसका मतलब है कि आप 480x800 विंडो के लिए फ़ोन हार्डवेयर से पूछ रहे हैं। चूंकि अधिकांश (सभी?) फोन हार्डवेयर स्क्रीन स्केलिंग नहीं करते हैं (जैसे आपका डेस्कटॉप मॉनीटर करता है), वे आपको स्क्रीन पर केवल 480x800 क्षेत्र देते हैं।

आपको अपनी स्क्रीन को "ज़ूम" करने के लिए ओपनजीएल प्राप्त करने की आवश्यकता है, और आप glViewport() को अपने डिवाइस के भौतिक संकल्प (मॉड्यूलो पहलू अनुपात चेतावनी!) पर सेट करके ऐसा करते हैं। आपको कैमरे को 'आभासी' रिज़ॉल्यूशन पर छोड़ना चाहिए (इसलिए इस मामले में 480x800)। अब ओपनजीएल आपके सभी प्राइमेटिव्स को स्क्रीन के रिज़ॉल्यूशन तक स्केल करेगा।

एक त्वरित परीक्षण के रूप में, इस प्रयास करें:

gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

अगले समस्या यह है कि हार्डवेयर पहलू अनुपात अपने 'आभासी' पहलू अनुपात से मेल नहीं खाता है। उस स्थिति में आपको एक तरफ काले सलाखों को छोड़कर, या अपने वर्चुअल पहलू अनुपात को बदलने के बीच निर्णय लेने की आवश्यकता है। कैमरा/व्यूपोर्ट सेटअप पर अधिक जानकारी के लिए इस ब्लॉग पोस्ट को देखें, और पहलू अनुपात के मुद्दे के कुछ समाधान: http://blog.acamara.es/2012/02/05/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/

+0

धन्यवाद, यह वास्तव में सहायक था। – MasterBirdy

संबंधित मुद्दे