2013-09-12 3 views
1

Я делаю специфичную для Android игру и хотел бы использовать API Android. Но мне интересно, возможно ли иметь как меню Android, а оттуда вызывать libGdx? Я пробовал адаптировать манифест в части Android, поэтому андроидная активность (меню) является активностью LAUNCHER и сначала вызывается. Затем я подумал, что могу запустить ApplicationListener с намерением, но это не сработает. Что я делаю не так? Возможно ли это?Запуск libGdx с кодом android

ответ

1

Это довольно просто:

// my call of the loading screen from inside a fragment 
Intent intent = new Intent(getActivity(), LoadingScreenActivity.class); 
startActivity(intent); 

и LoadingScreenActivity есть, думаю, что, деятельность.

// the onCreate method 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); 
    cfg.useGL20 = true; 
    cfg.useAccelerometer = false; 
    cfg.useCompass = false; 

    initialize(new LoadingScreen(), cfg); 
} 

и LoadingScreen является ApplicationListener вы уже упоминали

public class LoadingScreen implements ApplicationListener { 
    // create(), resize() and more 
} 

Поэтому в основном вам нужно вставлять libgdx внутри деятельности ...

Edit:

Вот мой полная загрузка экрана активности, которая использует libgdx. Он должен работать (просто удалите материал CustomApplication, которого у вас нет).

public class LoadingScreenActivity extends AndroidApplication { 
    private final static String LOG_TAG = LoadingScreenActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); 
     cfg.useGL20 = true; 
     cfg.useAccelerometer = false; 
     cfg.useCompass = false; 

     initialize(new LoadingScreen(), cfg); 
    } 

    private class LoadingScreen implements ApplicationListener { 
     private OrthographicCamera mCamera = new OrthographicCamera(); 
     private SpriteBatch mBatch; 
     private Stage mStage; 
     private ShapeRenderer mProgressLine; 

     @Override 
     public void create() { 
      AssetManager manager = CustomApplication.getAssetManager(); 
      manager.load("ic_launcher.png", Texture.class); 

      mStage = new Stage(); 
      mProgressLine = new ShapeRenderer(); 

      mBatch = new SpriteBatch(); 

      mCamera.setToOrtho(false, DesignUtil.getScreenWidth(), DesignUtil.getScreenHeight()); 
      mStage.setCamera(mCamera); 
     } 

     @Override 
     public void resize(int width, int height) { 
      mStage.setViewport(width, height, true); 
     } 

     @Override 
     public void render() { 
      if (CustomApplication.getAssetManager().update()) { 
       IntentUtil.startActivity(LoadingScreenActivity.this, GameActivity.class); 
       finish(); 
       return; 
      } 

      Gdx.gl.glClearColor(0, 0, 0, 1); 
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

      // tell the camera to update its matrices. 
      mCamera.update(); 

      // tell the SpriteBatch to render in the 
      // coordinate system specified by the camera. 
      mBatch.setProjectionMatrix(mCamera.combined); 

      mBatch.begin(); 
      mProgressLine.begin(ShapeRenderer.ShapeType.Rectangle); 
      mProgressLine.rect(0 + mStage.getWidth()/5, mStage.getHeight()/2, mStage.getWidth() - mStage.getWidth()/2.5f, DesignUtil.percentToPixel(5, mStage.getHeight())); 
      mProgressLine.setColor(0, 1, 0, 1); 
      mProgressLine.end(); 
      mProgressLine.begin(ShapeRenderer.ShapeType.FilledRectangle); 
      mProgressLine.filledRect(0 + mStage.getWidth()/5, mStage.getHeight()/2, (mStage.getWidth() - mStage.getWidth()/2.5f) * CustomApplication.getAssetManager().getProgress(), DesignUtil.percentToPixel(5, mStage.getHeight())); 
      mProgressLine.setColor(0, 1, 0, 1); 
      mProgressLine.end(); 
      mBatch.end(); 
     } 

     @Override 
     public void pause() { 

     } 

     @Override 
     public void resume() { 

     } 

     @Override 
     public void dispose() { 
      mBatch.dispose(); 
      mStage.dispose(); 
      mProgressLine.dispose(); 
     } 
    } 
} 
+0

@ user2685747 Я добавил свой полный класс Activity, который простирается от AndroidApplication. Если у вас все еще есть ошибки, скажите мне, какой из них я могу вам помочь. – WarrenFaith

1

Если это помогает, вы можете использовать элементы интерфейса Android от Libgdx. Таким образом, вы можете получить нужное поведение, но не тот метод, который вы хотите.

http://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements

http://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup

+0

Да, я знал об этом, но все равно большое спасибо, это может помочь кому-то еще! – user2685747

Смежные вопросы