2013-08-30 2 views
8

私はlibgdxのscene2d featuresについて、UI要素を含めて読んだことがありますが、動作させることはできません。それらはすべてスキンオブジェクトを使用するようですが、どのように作成するのですか?libgdxでscene2d.uiを使用する:スキンはどこから来ますか?

私はバケツに雨滴を引くシンプルなlibgdxゲームを作成nice tutorialを通じて行ってきた、と私はtexture atlasで画像をロードすることによって、簡単なボードゲームアプリを作成しました。しかし、scene2dは、ボードゲームアプリや、ボタンやメニュー内の動く部分を制御するためのより良い方法のように聞こえる。

答えて

19

スキンをロードするには、libgdxテストプロジェクトで使用されているサンプルスキンファイルを使用します。

  1. Atlaspack File
  2. Json File
  3. Atlaspack Image
  4. Font File

あり、もう少し詳しくはthis questionにだ、と私は避けるために、資産のサブディレクトリにファイルを移動するために持っていたことが分かりましたHTML版のバグ。 (ファイルをassetsフォルダに残しておけば、「GwtApplication:exception:ファイルデータを読み込む際のエラー/ uiskin.json」というエラーメッセージが表示されます)complete exampleは1つのボタンを表示し、面白いコードはすべてgame classです。この例は非常に単純なので、シーンとボタンを保持するために2つのメンバ変数が必要です。

private Stage stage; 
private TextButton button; 

スキンを作成するには、データファイルをロードするだけです。

Skin skin = new Skin(Gdx.files.internal("data/uiskin.json")); 

ボタンをステージに配線します。

stage = new Stage(); 
button = new TextButton("Click Me!", skin); 
stage.addActor(button); 

リスナーをボタンに配線し、ステージを登録してイベントを受信します。

button.addListener(new ClickListener() { 
    @Override 
    public void clicked(InputEvent event, float x, float y) { 
     button.setText("Clicked!"); 
    } 
}); 
Gdx.input.setInputProcessor(stage); 

render()方法は、基本的には、stage.draw()への呼び出しです。

Gdx.gl.glClearColor(1, 1, 1, 1); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1/30f)); 
stage.draw(); 

次に、サイズ変更時に画面をレイアウトするだけで済みます。

button.setPosition(
     (width-button.getWidth())/2, 
     (height-button.getHeight())/2); 

画面が複雑な場合は、Tableを使用することを検討してください。

別のフォントを使用する場合は、Hieroを使用してフォントファイルと画像ファイルを生成できます。あなたがそれをした後、新しいフォントイメージを取ってTexturePackerを使用してもう1つのskin assetsでそれを再パックする必要があります。

関連する問題