J'ai crée Bouton (s) utilisant simplement la classe Button, mais pensé que je vais essayer le ImageTextButton. Cependant, même avec seulement la classe Button, je ne suis pas tout à fait en train de suivre les docs sur la façon dont un fichier .pack (atlas) avec un fichier .json devrait fonctionner ensemble. En utilisant la classe Button, je peux «nommer» mon bouton comme je le veux dans le code, et le nommer dans le json en conséquence (voir les exemples ci-dessous), mais pour 'Image, je dois' nommer 'tout de même , de la construction en code, à travers les fichiers pack et json. Exemple de ce qui fonctionne:Libgdx manquant police LabelStyle pour ImageTextButton
Code:
// note the 'Constants' just point to the json and atlas files, respectively.
skinShops = new Skin(Gdx.files.internal(Constants.SKIN_SHOPS), new
TextureAtlas(Constants.TEXTURE_ATLAS_SHOPS));
// for this next line, note the json definition for Button$ButtonStyle:
Button buttonBuy = new Button(skinShops, "Button-Buy");
// for Images, it seems I cannot have a 'unique' name first, then the drawable name, which I thought refers to the json
Image imgItemsBackground = new Image(skinShops, "shop-items-background");
Si vous regardez le 'scene2d.ui.Image:' définitions, tout porte le même nom. Bien que cela fonctionne de cette façon, je ne comprends pas pourquoi.
Cela pourrait être 2 questions je suppose, la préoccupation précédente sur la nomenclature de nommage entre tous ces éléments, mais mon problème actuel, je ne peux pas passer est en train d'essayer de construire un ImageTextButton. Dans le code, je les construis de manière dynamique en fonction de l'endroit où se trouve le joueur: différentes boutiques ont des objets différents à vendre, et ceux-ci sont lus dans le tableau items [].
ImageTextButton buttonPurchase = new ImageTextButton(items[j], skinShops, "shop_item-button-background");
Trace de la pile:
Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: Missing LabelStyle font.
at com.badlogic.gdx.scenes.scene2d.ui.Label.setStyle(Label.java:78)
at com.badlogic.gdx.scenes.scene2d.ui.Label.<init>(Label.java:72)
at com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton.<init>(ImageTextButton.java:57)
at com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton.<init>(ImageTextButton.java:44)
at com.uv.screen.InteriorScreen.buildItemButtons(InteriorScreen.java:134)
Où dois-je être la création/le réglage de la police pour ces boutons?
fichier JSON:
{
com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {
Button-Exit: { down: Button_Exit_112x60, up: Button_Exit_112x60 },
Button-Buy: { down: Button_Buy_112x60, up: Button_Buy_112x60 },
Button-Sell: { down: Button_Sell_112x60, up: Button_Sell_112x60 }
},
com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton$ImageTextButtonStyle: {
shop_item-button-background: { down: shop_item-button-background, up: shop_item-button-background }
},
com..badlogic.gdx.scenes.scene2d.ui.Image: {
background: { drawable: background },
shop-items-background: { drawable: shop-items-background },
shop-menu-background: { drawable: shop-menu-background },
shop-talk-text-background: { drawable: shop-talk-text-background },
weapon-shop-portrait_world1: { drawable: weapon-shop-portrait_world1 },
armor-shop-portrait_world1: { drawable: armor-shop-portrait_world1 },
item-shop-portrait_world1: { drawable: item-shop-portrait_world1 },
inn-shop-portrait_world1: { drawable: inn-shop-portrait_world1 }
}
fichier atlas:
shops-pack.png
format: RGBA8888
filter: Nearest,Nearest
repeat: none
background
rotate: false
xy: 0, 504
size: 800, 480
orig: 800, 480
offset: 0, 0
index: -1
shop-items-background
rotate: false
xy: 0, 248
size: 608, 256
orig: 608, 256
offset: 0, 0
index: -1
shop_item-button-background
rotate: false
xy: 0, 60
size: 256, 60
orig: 256, 60
offset: 0, 0
index: -1
...
Je vois, je ne suis pas retourné assez dans la trace pour voir l'héritage TextButtonStyle de police qui n'est pas facultatif, merci de le signaler. En regardant mon ancien projet, j'ai fait des polices de caractères que vous décriviez, une avec les polices générées et les fichiers .fnt dans le dossier assets et json skin, puis un autre ensemble de polices utilisant FreeTypeFontGenerator. J'ai créé une classe 'SmartFontGenerator' pour faire ce travail. J'ai besoin de réapprendre ce que j'ai fait là-bas (ça fait presque un an que j'ai fait ce jeu). Si je vais la route de la peau, je ne devrais pas faire quelque chose de plus dans la création de mon bouton, correct? –
Pouvez-vous clarifier un peu sur l'image et json? Toutes les images définies sont utilisées pour les arrière-plans, pas pour les boutons. J'ajoute les images à Table, qui sont ajoutées à une pile, et enfin à une scène. Ensuite, les boutons sont créés et placés sur le dessus. Donc, juste en créant ces objets Image, je dois le nommer tout de même. –
Si vous regardez ImageButtonStyle ou ImageTextButtonStyle, notez qu'aucun des paramètres n'est Image. Ils sont Drawables. Je pense que c'est ce qui vous amène à croire que vous devez nommer vos images du même nom que leur dessinable contenu. En réalité, les images que vous définissez dans votre Json sont complètement inutilisées. (Si vous voulez vérifier cela, il suffit de supprimer la section Image de votre Json.) Lorsque le Skin charge le Json, il cherche des Drawables avec ces noms, et quand il ne trouve pas un Drawable par un certain nom, il crée automatiquement un en utilisant un TextureRegion avec ce nom. – Tenfour04