我跟随youtube上的一些教程,为我的libgdx游戏制作了一些按钮,但遇到了一个问题:我的按钮在哪里。无法加载数据包。
stage = new Stage();
black = new BitmapFont(Gdx.files.internal("font/black.fnt"));
white = new BitmapFont(Gdx.files.internal("font/white.fnt"));
atlas = new TextureAtlas(Gdx.files.internal("buttons/button.pack"));
skin = new Skin(atlas);
table = new Table(skin);
table.setBounds(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
TextButtonStyle textButtonStyle = new TextButtonStyle();
textButtonStyle.up = skin.getDrawable("buttons/buttonup.png");
textButtonStyle.over = skin.getDrawable("buttons/buttonpressed.png");
textButtonStyle.down = skin.getDrawable("buttons/buttonpressed.png");
textButtonStyle.pressedOffsetX = 1;
textButtonStyle.pressedOffsetY = -1;
textButtonStyle.font = black;
buttonPlay = new TextButton("PLAY", textButtonStyle);
buttonPlay.pad(20);
table.add(buttonPlay);
buttonHelp = new TextButton("HELP", textButtonStyle);
buttonHelp.pad(20);
table.add(buttonHelp);
buttonExit = new TextButton("EXIT", textButtonStyle);
buttonExit.pad(20);
table.add(buttonExit);
table.debug();
stage.addActor(table);
所有按钮文件(buttonup.png、button.pack等)都位于“buttons”文件夹中,该文件夹位于我的游戏gdx核心下的“资产”文件夹中(请参见链接)。我无法编译并获取错误“无法加载文件:buttons/button”。收拾png'我不知道为什么它在寻找一个png扩展,而我显然只是把按钮。打包,如果这是个问题的话。请帮忙!
以下是错误的链接:https://gyazo.com/1ef8cce0b1935ad450d9f5229b0d698e
我不认为文件的位置会有问题,因为可以加载资产中的所有其他png。
你的. pack文件的第一行是指连接到图集的位图。我很确定那里有什么
button.pack.png
而不是
button.png
只要编辑一下,这个就可以了。
但我发现还有一个问题——你使用的scene2d非常好,而skin instance也非常好——但是为什么要用skin来创建TextButtonStyle呢?
在我看来,你应该使用皮肤机制创建你的TextButton样式。你可以在这里阅读并看到一些示例(即使使用TextButton):
http://www.gamefromscratch.com/post/2013/12/18/LibGDX-Tutorial-9-Scene2D-Part-3-UI-Skins.aspx
你最有可能把你的图像在android/资产
文件夹。创建按钮的方式看起来很好,但是LibGDX提供了一种更方便的创建按钮的方式,提前做了一点工作。这是我如何创建我的按钮:
然后,我将所有的UI图像打包在一起使用纹理打包器。这将生成一个图像表和一个txt文件,看起来像这样,但没有分裂
参数:
uiskin.png
format: RGBA8888
filter: Linear,Linear
repeat: none
container_blue
rotate: false
xy: 17, 2
size: 41, 45
split: 20, 20, 22, 22
orig: 41, 45
offset: 0, 0
index: -1
container_gold
rotate: false
xy: 60, 2
size: 41, 45
split: 20, 20, 22, 22
orig: 41, 45
offset: 0, 0
index: -1
分割参数旨在使这些图像正确拉伸。我曾经问过一个关于英雄的问题,他们是如何工作的。所以,你要做的就是在绘图应用程序中查找图像,看看哪些部分需要拉伸并填充分割参数。
sprite表单和txt文件一起被称为TextureAtlas
,一旦创建了这样的图集TextureAtlas atlas=new TextureAtlas(“uiskin.png”)
你可以通过做
atlas来获取纹理。findRegion(“container_blue”)
但是这是一个相当昂贵的调用,所以不要每次更新都这样做。
现在真正神奇的是,LibGDX提供了一个可以存储样式的皮肤。一个皮肤文件是
. json
格式的,看起来像这样:
{
com.badlogic.gdx.graphics.g2d.BitmapFont: {
default: { file: fonts/myDefaultFont.fnt }
large: { file: fonts/myLargeFont.fnt }
},
com.badlogic.gdx.graphics.Color: {
white: { a: 1, r: 1, g: 1, b: 1 }
green: { a: 1, r: 0, g: 1, b: 0 }
gray: { a: 1, r: 0.5, g: 0.5, b: 0.5 }
black: { a: 1, r: 0, g:0, b:0 }
},
com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
default: { font: default, fontColor: white }
container_gold: { background: container_gold, font: default, fontColor: green }
},
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: { font: large, fontColor: white }
container_gold: { down: container_gold, up: container_blue, disabled: container_grey, font: large, fontColor: green }
container_gold_small: { down: container_gold, up: container_blue, disabled: container_grey, font: default, fontColor: green }
},
}
其实很简单。首先我找到我的字体并命名它们,然后为我的字体添加一些颜色。从那里我为我的标签添加了两种样式,为我的文本按钮添加了三种样式。如果我把它加载到一个
皮肤中
像这样的皮肤=新皮肤(“Gdx.files.internal”(“uiskin.json”),atlas);
我可以用我用一行创建的样式创建许多按钮。
//This would create a "larger button using the default font.
TextButton textButton = new TextButton("Click Me!", skin, "container_gold");
//This would create a smaller button
TextButton textButton = new TextButton("Click Me!", skin, "container_gold_small");
//This would create a label looking exactly like the first button
Label label = new Label("Label", skin, "container_gold");
//This would draw smaller white text without a background using the default style
Label label = new Label("Default text", skin);
这需要提前做更多的工作,但效果很好。还有一件事,如果你有很多屏幕,你不应该每次都加载一个新的皮肤。您应该使用
AssetManager
。这更容易设置,你只需要一个小班。我使用资产描述符加载资产,这样当我需要查找我的皮肤或地图集时,就可以节省键入更多字符的时间。
public class Assets {
//The asset manager
public static AssetManager manager = new AssetManager();
//The atlas, I renamed .txt to pack (just a habit).
public static final AssetDescriptor<TextureAtlas> uiAtlas =
new AssetDescriptor<TextureAtlas>("ui/uiskin.pack", TextureAtlas.class);
//The skin
public static final AssetDescriptor<Skin> uiSkin =
new AssetDescriptor<Skin>("ui/uiskin.json", Skin.class,
new SkinLoader.SkinParameter("ui/uiskin.pack"));
//Method for loading the assets into the manager
public static void load()
{
manager.load(uiAtlas);
manager.load(uiSkin);
}
//Easy asset disposing, whenever you are done with it just dispose the manager instead of many files.
public void dispose()
{
manager.dispose();
}
}
您可以使用一个启动屏幕和一个fency加载条来使用它,但基本上您需要做的就是将以下代码作为要运行的第一行代码。
//This is on top of my first `create()` method.
//Tell the manager to start loading
Assets.load();
//Tell the program to "loop" the loading until finished. Essentially stopping the game from continuing.
Assets.manager.finishLoading();
如果你正在发布你的游戏,并且加载需要几秒钟以上的时间,那么你最好使用某种启动/加载屏幕。
问题内容: 我正在学习如何使用LibGDX制作游戏,并且正在尝试制作一个小型平台游戏(使用Eclipse)。我在主角跑动时制作了4张图像,以便在他移动时制作动画。但是,我在网上找不到任何东西可以向我展示如何在不使用SpriteSheet的情况下制作动画。如何使用4张不同的图像制作动画? 问题答案: 首先:您不应使用其他图像。也许对您的播放器来说并不重要(因为只有一个),但是通常您应该始终使用Spr
我刚刚开始使用LibGDX进行编码和应用程序开发,我有一些关于它的一般问题和一些更具体的问题。 在我开始之前:我知道我的一些问题可能已经在互联网上的某个地方被问到了,但我发现很难得到一个直接的答案。 所以,最基本的问题第一: 是否有可能在合理的时间内在LibGDX中创建一个普通的应用程序(如愤怒的小鸟或涂鸦跳跃)?在浏览互联网时,我遇到许多人说Unity这样的引擎“使用起来非常简单”,你可以用Li
问题内容: 目前,我有以下代码: 它闪烁,但仅在“一个方向”闪烁。我的意思是,它只会淡出,然后以出现,然后再次淡出,再次出现,依此类推… 我希望它逐渐消失,然后从此渐隐“提升”到。那可能吗? 问题答案: 首先设置,然后在上结束,所以它从始于,在结束,因此只需将opacity设置为at ,其余的将自己处理。 在这里,我将动画持续时间设置为,然后将设置为。这意味着它将始终保持不变。最后,我正在使用。这
我创造了一个长方形 它具有敌人的坐标和尺寸。在渲染方法中,我希望当按下此矩形时,打印字符串“完成”。我尝试了: 但它在地图上的任何地方都有效,而不仅仅是矩形
我正在更新一个站点,目前有四个框,作为按钮在一个行;只不过他们用的是图像图。我想把它转换成一个CSS解决方案,这样它就不会有那么多的排泄,而且更容易访问,更友好。这样的事情怎么能做?我知道可以垂直做,但可以水平做.... 这是一个艺术家表演的它现在的样子。尺寸不是很准确,但你可以得到对角线的想法...
有谁知道用zlib是否可以创建zip格式?怎么做?