2015-06-04 20 views
1

當處於完成等級模式時,我在PNG中打印屏幕我的遊戲屏幕並將其保存到文件中(saveScreenshotNamePath)。然後我想使用shareGoogleImage將該關卡圖片上傳到Google+。我只用文本測試了共享功能,它可以工作,但我在圖像共享部分遇到問題。在LIBGDX中保存關卡並上傳到Google+

打印屏幕無法在Google上載對話框中看到,我只看到標題文本;顯然圖像沒有附加。這裏可能是什麼問題?

下面的代碼:

這節省了打印屏幕文件:

public static String saveScreenshotNamePath(String name){ 
    try{ 
     FileHandle fh; 
     do{ 
      fh = new FileHandle(name + ".png"); 
     }while (fh.exists()); 
     Pixmap pixmap = getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); 
     PixmapIO.writePNG(fh, pixmap); 
     pixmap.dispose(); 
     return fh.file().getAbsolutePath(); 
    }catch (Exception e){ 
     return ""; 
    }   
} 

這將啓動意圖:

@Override 
public void shareGoogleImage(int no_level, String path) { 
    try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } 
    Intent share = new PlusShare.Builder(this) 
     .setText("See my latest Game Level " + Integer.toString(no_level) + " score") 
     .setType("image/png") 
     .setStream(Uri.parse(path)).getIntent(); 
    startActivityForResult(share, 0); 
} 

我也試過MediaStore變量,但我有同樣的結果:

@Override 
public void shareGoogleImage(int no_level, String path) { 
    File tmpFile = new File(path); 
    String photoUri = ""; 
    try { 
     photoUri = MediaStore.Images.Media.insertImage(getContentResolver(), tmpFile.getAbsolutePath(), null, null); 
    } catch (FileNotFoundException e1) { e1.printStackTrace(); } 

    try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } 
    Intent share = new PlusShare.Builder(this) 
     .setText("See my latest Game Level " + Integer.toString(no_level) + " score") 
     .setType("image/png") 
     .setStream(Uri.parse(photoUri)) 
     .getIntent(); 
    startActivityForResult(share, 0); 
} 

這是在遊戲中(核心文件)觸發(Scene2D的ImageButton按)在我的遊戲畫面,供位於內部AndroidLauncher.java(活動文件)的shareGoogleImage功能:

ShareGoogleButton.addListener(new ClickListener() { 
@Override 
public void clicked(InputEvent event, float x, float y){ 
    if(!share_pressed){ 
     share_pressed = true; 
     ShareGoogleButton.clearActions(); 
     ShareGoogleButton.addAction(sequence(moveBy(0f, 12f, 0.1f), moveBy(0f, -12f, 0.2f), run(new Runnable(){ 
      public void run(){ 
       String pathto_screencap = ScreenshotFactory.saveScreenshotNamePath("google_share_image"); 
       game.google_facebook_services.shareGoogleImage(level_no, pathto_screencap); 
       share_pressed = false; 
      } 
     })));     
     } 
    } 
}); 

回答

2

有在這裏至少有兩個問題:無限循環和絕對文件路徑。由於您將其封裝在一個無法記錄的全部catch塊中,因此沒有獲取任何日誌消息來幫助您進行調試。

在第一次調用方法後,這將是一個無限循環,因爲該文件將存在(假設它已成功寫入)。不知道你爲什麼這樣。

do{ 
    fh = new FileHandle(name + ".png"); 
}while (fh.exists()); 

無論如何,你需要將它與這個保存到外部目錄(不是絕對的),如果你想讓它與其他應用程序,如G +共享,因此替換它:

fh = Gdx.files.external(name + ".png"); 

您還需要清單中的寫入外部存儲權限:

<manifest ...> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    ... 
</manifest> 
+0

嗨!謝謝,從來沒有那樣做......而。我剛剛粘貼了這裏的代碼:https://github.com/libgdx/libgdx/wiki/Take-a-Screenshot。謝謝! – gogonapel