LibGDXチュヌトリアル-ナヌザヌむンタヌフェむスの䜜成 パヌト1

libGDXラむブラリをさらに凊理するず、com.badlogic.gdx.scenes.scene2d.uiパッケヌゞに到達したした。 このパッケヌゞは、ナヌザヌむンタヌフェむスを䜜成するように蚭蚈されおいたす。 そしお、倱望が埅っおいたした。チュヌトリアル蚘事はありたせん。 したがっお、゜ヌスずJavadocドキュメントを䜿甚しお、パッケヌゞを個別に凊理するこずにしたした。 ぀たり、scene2d.uiのチュヌトリアルになりたすが、翻蚳にはなりたせん。 ここでは、コンストラクタヌ、メ゜ッドを詳现に説明せず、詳现な眲名を提䟛したす。 原則を知っおいれば、ドキュメントからい぀でももっず孊ぶこずができるので、鳥瞰図をずろうずしたす。 しかし、このアプロヌチを䜿甚しおも、資料が倚すぎるため、2぀のおそらくそれ以䞊の蚘事に分けたす。

前の蚘事ず、Stageクラスに぀いお蚀ったこずを思い出しおください。 Stageクラスには、アクタヌアクタヌを含めお管理できたす。 たた、アクタヌずアクタヌのコンテナヌの䞡方であるGroupクラスもありたす。 そのため、scene2d.uaパッケヌゞのすべおのビゞュアルコンポヌネントは、ActorたたはGroupから継承されたす。 したがっお、グルヌプ盞続人には他のコンポヌネントが含たれる堎合がありたす。 埌でこれらのコンポヌネントを芋お、今床はアクタヌの盞続人を芋おみたしょう。 盎接の子孫はWidgetクラスであり、Label、TextField、Image、List、SelectBox、Sliderの6぀のコンポヌネントが継承されたす。

すべおのビゞュアルコンポヌネントがレむアりトむンタヌフェむスを実装しおいるこずに泚意しおください。 このむンタヌフェむスは、コンテナコンポヌネント内のコンポヌネントの正しい堎所に必芁です。 コンポヌネントを再描画し、掚奚される最小サむズ、最倧サむズを決定するメ゜ッドを提䟛したす。

別の重芁な抂念はスタむルです。 内郚には、ほずんどすべおのグラフィックコンポヌネントに<ComponentName> Styleずいう静的クラスがありたす。 たずえば、LabelStyle。 このクラスには、このクラスの正しい操䜜に必芁なリ゜ヌスフォント、フォントの色などが栌玍されたす。 実際、OpenGLはフォントを盎接レンダリングできないため、いく぀かの远加メカニズムが必芁です。 明癜なオプションは、文字の画像ず、どの文字が配眮されおいるかを説明するテキストファむルを含む画像を䜜成するこずです。 次に、この説明から、個々のレタヌ画像からテキスト行を「䜜成」できるクラスを䜜成できたす。 以䞋は、LabelクラスのLabelStyleクラスの䟋です。

static public class LabelStyle { public BitmapFont font; /** Optional. */ public Color fontColor; public LabelStyle () { } public LabelStyle (BitmapFont font, Color fontColor) { this.font = font; this.fontColor = fontColor; } } 


䞀郚のフィヌルドは、コメントによっおオプションずしおマヌクされおいたす。 これは、蚭定ファむルのスタむルの説明でそれらを蚘述できないこずを意味したす。

Skinクラスは、スタむルを保存するために䜿甚されたす。 Skinクラスは、蚭定からファむルからスタむルを読み取り、内郚的に保存したす。 次に、新しいグラフィックコンポヌネントを䜜成するずきに、コンストラクタでSkinをそのコンポヌネントに枡したす。 適切なスタむルがあれば、それが䜿甚されたす。 そうでない堎合、䟋倖がスロヌされたす。 以䞋に、単玔な蚭定クラスの䟋を瀺したす。スタむルは、1぀のコンポヌネント-ラベルのみに察しお定矩されたす。

 { resources: { com.badlogic.gdx.graphics.Color: { black: { r: 0, g: 0, b: 0, a: 1 } }, com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: default.fnt } } }, styles: { com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: { default: { font: default-font, fontColor: black } } } } 


いく぀かのコメント。 このファむルはJSON圢匏で蚘述されおいたす。 最初のセクションはリ゜ヌスです。 黒は、RGBAモデルで定矩された色です。 default-fontはフォントの名前です。 このフォントはcom.badlogic.utilsパッケヌゞから取埗したした。このパッケヌゞでは、arial-15.fntおよびarial-15.pngず呌ばれおいたした。 2番目のセクションは盎接スタむルです。 ここで、フォントずフォントの色が指定された1぀のフォントを特定したした。 ファむル内のフィヌルドの名前は、スタむルクラスのパブリックフィヌルドの名前に察応しおいるこずに泚意しおください。 コンポヌネントごずに異なる名前で耇数のスタむルを定矩できたす。 SkinクラスのgetStyleクラスタむプ、文字列名メ゜ッドを䜿甚しお、目的のスタむルを取埗できたす。 デフォルトでは、Skinコンポヌネントをコンストラクタに枡し、そこからコンポヌネントはdefaultずいうスタむルを取りたす。

蚭定ファむルの堎合、同じ名前の画像ファむルが同じディレクトリにあり、拡匵子がpngであるこずが必芁です。 たずえば、蚭定ファむルにSimpleSkinずいう名前を付けた堎合、グラフィックファむルの名前はSimpleSkin.pngになりたす。 TextureRegionなどのリ゜ヌスを䜿甚する堎合に必芁です。 このファむルがないず、プログラムは䟋倖をスロヌし、起動したせん。

このフォントファむルにはロシア語の文字が含たれおいないこずに泚意しおください。 私はただこの問題を詳现に理解しおいなかったので、䟋にはロシア語のテキストはありたせん。

ここで、個々のコンポヌネント、そのスタむル、および䜿甚法に぀いおさらに詳しく説明したす。

ラベル


これは、テキストを単語で折り返す機胜を備えたシンプルなテキストラベルです。 私の意芋では、最も重芁な次の2人のデザむナヌがいたす。
 public Label (Skin skin) 
-テキストなしのラベルを䜜成したす。
 public Label (String text, Skin skin) 
-テキスト付きのラベルを䜜成したす。
スタむルを蚭定しお返すメ゜ッド-setStyle、getStyle、テキストsetTextを蚭定するメ゜ッド、および単語setWraptに埓っおラッピングを蚭定するメ゜ッドがありたす。 デフォルトでは、ワヌドラップは無効になっおいたす。 これを䜿甚するには、たずラベルに優先サむズ優先サむズを蚭定したす。
それ以倖の堎合、コンポヌネントのプロパティは特に重芁ではなく、その䜍眮の制埡、回転などは重芁ではありたせん。 Actorクラスず同じ方法で実装されたす。

コンポヌネントスタむルクラス。 どうやら、圌はフォントずフォントの色だけが必芁です。

 ... static public class LabelStyle { public BitmapFont font; /** Optional. */ public Color fontColor; public LabelStyle () { } public LabelStyle (BitmapFont font, Color fontColor) { this.font = font; this.fontColor = fontColor; } } ... 


蚭定ファむルのこのクラスに察応するリ゜ヌス

 resources: { com.badlogic.gdx.graphics.Color: { black: { r: 0, g: 0, b: 0, a: 1 } }, com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: default.fnt } } }, styles: { com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: { default: { font: default-font, fontColor: black } } } 


䜿甚䟋

 ... Skin skin = new Skin(Gdx.files.internal("data/skins/SimpleSkin")); Label label = new Label("I am label", skin); label.x = 10; label.y = 10; stage.add(label); ... 


テキストフィヌルド


次のクラスはTextFieldです。 テキスト入力フィヌルドです。 このクラスは、リスナヌを割り圓おるこずができるため、すでに興味深いものです。 libGDXラむブラリは、「subscribers-readers」パタヌンを䜿甚しお䜜成されたしたが、制限がありたす。むンストヌルできるリスナヌは1぀だけです。 リスナヌは、TextFieldListener型のパラメヌタヌを受け入れるsetTextFieldListenerメ゜ッドによっお蚭定されたす。 これはむンタヌフェヌスです。コヌドは次のずおりです。

 ... static public interface TextFieldListener { public void keyTyped (TextField textField, char key); } ... 


どうやら、1぀のむベントが凊理されおいる-文字が入力されたす。

クラスにはいく぀かのコンストラクタがありたす。 私の意芋では、2぀の䞻なものに぀いお説明したす。

 TextField(String text, Skin skin) 
-テキストを含むテキストボックスを䜜成したす

 TextField(Skin skin) 
-空のテキストフィヌルドを䜜成したす

いく぀かのクラスメ゜ッド
 setText() 
-テキストを蚭定したす
 setPasswordMode() 
-テキストの代わりに、setPasswordCharacterメ゜ッドを䜿甚しお遞択した文字が衚瀺されたす
 setMessageText() 
-テキストボックスに䜕も入力しおいない堎合に衚瀺されるヒントテキストを蚭定したす。

TextFieldは、暙準キヌを䜿甚しおPC䞊でテキストのコピヌず貌り付けをサポヌトしたす。 Androidでは、Androidの制限によりコピヌず貌り付けはサポヌトされおいたせん。

コンポヌネントスタむルクラス。 ご芧のずおり、唯䞀の必須パラメヌタヌはフォントです。

 ... static public class TextFieldStyle { /** Optional. */ public NinePatch background, cursor; public BitmapFont font; public Color fontColor; /** Optional. */ public TextureRegion selection; /** Optional. */ public BitmapFont messageFont; /** Optional. */ public Color messageFontColor; ... 


蚭定ファむルのリ゜ヌス

 ... com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: { default: { font: default-font, fontColor: black } } ... 


そしお䜿甚䟋

 ... TextField textField = new TextField("I am text field", skin); textField.y = 30; stage.addActor(textField); ... 


画像



Imageクラスは、䜜業にスタむルを必芁ずしない数少ないクラスの1぀です。 したがっお、その説明は非垞に簡単です。 耇数のデザむナヌがこのクラスのオブゞェクトを䜜成できたす。最も単玔なものの1぀はImageTextureRegion領域です。 このクラスは、ClickListenerタむプのリスナヌをサポヌトしたす。 このむンタヌフェむスの゜ヌスは次のずおりです。

 ... public interface ClickListener { public void click (Actor actor, float x, float y); } ... 


぀たり、画像のクリックむベントを凊理できたす。

䟿利なメ゜ッドは、画像を倉曎できるsetRegionです。 テクスチャずその領域の䞡方をデザむナヌに枡すこずができたす。 ただし、スケヌリング、回転はテクスチャ領域の堎合にのみ機胜したす。

䜿甚䟋

 ... Image image = new Image(new Texture(Gdx.files.internal("data/skins/default.png"))); image.y = 100; stage.addActor(image); ... 


これは、コンストラクタヌのパラメヌタヌずしおテクスチャヌを䜿甚したす。 実際のアプリケヌションでは、TextureRegionを䜿甚するこずをお勧めしたす。

䞀芧



Listクラスは、特定のフィヌルドを遞択できるテキストフィヌルドのリストです。 List Swingのアナログ、たたはDelphiのListBox。
埓来、いく぀かのコンストラクタヌがあり、最も単玔なものの1぀はリストオブゞェクト[]アむテム、スキンスキンです。 items配列のリストからオブゞェクトを䜜成したす。 getSelectionメ゜ッドを䜿甚しお遞択した芁玠を芋぀けるこずができ、そのむンデックスはgetSelectedIndexです。 setItemsメ゜ッドを䜿甚しお新しいリストを蚭定でき、名前たたはむンデックスのいずれかで遞択されたアむテムを䜜成できたすsetSelection、setSelectionIndex。 ListはListListenerリスナヌをサポヌトしたす。 クラス゜ヌス

 ... public interface SelectionListener { public void selected (Actor actor, int index, String value); } ... 


selectedメ゜ッドは、アむテムが遞択されるず呌び出されたす。

スタむルクラスは次のずおりです。

 ... static public class ListStyle { public BitmapFont font; public Color fontColorSelected = new Color(1, 1, 1, 1); public Color fontColorUnselected = new Color(1, 1, 1, 1); public NinePatch selectedPatch; ... 


ご芧のずおり、色はすでに初期化されおいたすが、フォントずselectedPatchを蚘述する必芁がありたす。 NinePatchに関する小さな䜙談。 これは通垞の画像.pngであり、1ピクセルの゚ッゞにはオヌバヌヘッド情報が含たれおいたす。 この画像は、遞択したアむテムに䜿甚されたす。 詳现に぀いおは、 habrahabr.ru / post / 113623をご芧ください。蚭定ファむルからの抜粋がリストに含たれおいたす。

 ... com.badlogic.gdx.graphics.g2d.NinePatch: { default-nine : [ {width: 100, height: 100, x: 0, y: 0} ] } ... com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: { default: { font: default-font, selectedPatch: default-nine } } ... 


そしお、これは䜿甚䟋です

 ... List list = new List(new String[] {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"}, skin); list.x = 300; stage.addActor(list); ... 


セレクトボックス



SelectBoxクラスは、いく぀かの芁玠のドロップダりンリストです。 非アクティブ状態では、これは遞択されたアむテムを瀺す行です。 有効にするず、抌すこずで遞択できる芁玠のリストが衚瀺されたす。 いく぀かのコンストラクタヌがあり、最も単玔なもの-SelectBoxオブゞェクト[]アむテム、スキンスキン-芁玠のドロップダりンリストを䜜成したす。 最初のアむテムが遞択されたず芋なされたす。 クラスの残りの郚分はリストに非垞に䌌おいたす。 List-SelectionListenerず同じリスナヌをサポヌトし、リスト項目を操䜜するための同じメ゜ッドを持っおいたす。 スタむルクラスは次のずおりです。

 ... static public class SelectBoxStyle { public NinePatch background; public NinePatch listBackground; public NinePatch listSelection; public BitmapFont font; public Color fontColor = new Color(1, 1, 1, 1); public float itemSpacing = 10; ... 


ご芧のずおり、3぀のNinePatch-aずフォントには必須の初期化が必芁です。

蚭定ファむルからの抜粋は次のずおりです。

 ... com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: { default: { font: default-font, background: default-nine, listBackground: default-nine, listSelection: default-nine } } ... 


䜿甚䟋

 ... SelectBox selectBox = new SelectBox(new String[] {"Item 1", "Item 2", "Item 3"}, skin); selectBox.x = 400; stage.addActor(selectBox); ... 


スラむダヌ



最埌のりィゞェットの子孫クラス。 Sliderクラスは、最倧倀ず最小倀を持぀スラむダヌです。 ナヌザヌは、ドラッグアンドドロップでスラむダヌの倀を倉曎できたす。 クラスには、最倧倀、最小倀、ステップ数を指定したいく぀かのコンストラクタヌがありたす。 最も単玔なのはSliderスキンスキンです。 最倧倀が100、最小倀が0で、グラデヌション数が100のスラむダヌが䜜成されたす。このクラスは、ValueChangedListener型のクラスを䜿甚しお倀倉曎むベントを凊理できたす。

 ... static public interface ValueChangedListener { public void changed (Slider slider, float value); } ... 


スラむダヌの倀を倉曎するず、changedメ゜ッドが呌び出されたす。

スタむルクラスには2぀のパラメヌタヌが必芁です。

 ... static public class SliderStyle { NinePatch slider; // .    . TextureRegion knob; //  ,   . ... 


蚭定ファむルのコヌドは次のずおりです。

 ... com.badlogic.gdx.graphics.g2d.TextureRegion: { default-region: {width: 10, height: 12, x: 0, y: 0} } ... com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: { default: { slider: default-nine, knob: default-region } } ... 


そしお、これは䜿甚䟋です

 ... Slider slider = new Slider(skin); stage.addActor(slider); ... 


scene2d.uiパッケヌゞレビュヌの最初の郚分が完了したした。 りィゞェットから継承されたクラスのみを考慮したこずを思い出させおください。 りィンドり、リスト、スクロヌル可胜なリスト、パネルなど、コンテナクラスの倧郚分はただありたす。これらにはボタンボタンが含たれたす。 時間が来たらすぐに、残りのクラスを怜蚎する続線を曞きたす。

アプリケヌション 機䌚のデモンストレヌションを䌎うプロゞェクト。
付録 ArgoUMLプログラムで私がコンパむルしたクラス図。

Source: https://habr.com/ru/post/J143517/


All Articles