天道酬勤,学无止境

Libgdx:将 2 个演员一个放在另一个上(Libgdx: place 2 actors one on another)

问题

我使用 libgdx 的 scene2d 内置 UI 库在我的游戏中制作 UI。 我很有趣,如何在一张桌子上绘制 2 个图像(或演员)? 我正在寻找类似 Android 中的 LayerDrawable 。 是否有任何存在的东西来制作它?

回答1

为了这些目的,libGDX UI 库中有一个 Stack 小部件。

更新:如果您想将一个小部件放在另一个小部件的顶部并且这些小部件具有不同的大小,那么您应该包装较小的小部件。 就像是:

//First add actual content
stack.add(content);

//Second add wrapped overlay object
Table overlay = new Table();
overlay.add(overlayWidget).expand().fillX().bottom().left();
stack.add(overlay);

stack变量是一个 Stack 实例

这是我项目的实际摘录。 你应该根据你的情况调整它。

回答2

你可以使用这样的东西:

    //create stage
    stage = new Stage(new StretchViewport(game.width, game.height));

    //create table
    Table table = new Table();
    table.setSize(game.width,game.height); //fullscreen

    //add Image 1
    table.add(new Image(game.skin.getDrawable("image1")));
    //add Image 2 (create new col)
    table.add(new Image(game.skin.getDrawable("image2"))).width(xx).height(xx);

    //add new row
    table.row();

    //add Image 3 - padding to draw over image1/2 && colspan
    table.add(new Image(game.skin.getDrawable("image3"))).width(xx).height(xx).padTop(-50f).colspan(2);

    //add table to stage
    stage.addActor(table);

    /*
     * Add action
     *
     */

    @Override
    public void render(float delta) {
        ...
        //don't forget to draw ur stage
        stage.act(delta); // or stage.act(Gdx.graphics.getDeltaTime())
        stage.draw();
    }

您也可以向舞台/表格或图像等添加动作...:

   stage.addAction(Actions.sequence(
                           Actions.fadeOut(0.0001f),
                           Actions.fadeIn(0.5f),
                           Actions.delay(0.1f), 
                           Actions.run(new Runnable() {
                               @Override
                               public void run() {
                                   //mmmm new screen 
                                   dispose();
                                   game.setScreen(new BoobsScreen(game));
                               }
                           })));

当然,您可以绘制的不仅仅是图像:按钮、文本按钮、标签等或为表格添加滚动窗格,但在查看 libgdx 上的皮肤之前,例如以编程方式编写的九块文本按钮:

   private NinePatch processNinePatchFile(String fname) {
        final Texture t = new Texture(Gdx.files.internal(fname));
        final int width = t.getWidth() - 2;
        final int height = t.getHeight() - 2;
        return new NinePatch(new TextureRegion(t, 1, 1, width, height), 3, 3, 3, 3);
    }

    //create skin
    skin = new Skin();
    ...
    //create font
    ...
    //create ninepatch button from android/assets/style/button
    NinePatch ninepatch = processNinePatchFile("style/button.9.png");
    skin.add("button.9", ninepatch);

    //create textbuttonstyle
    TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
    textButtonStyle.font = skin.getFont("font_black_38");
    textButtonStyle.fontColor = Color.DARK_GRAY;
    textButtonStyle.up = skin.getDrawable("button.9");
    skin.add("buttonTextStyle", textButtonStyle);


    //now you can create textbutton
    TextButton btn = new TextButton("Hello", game.skin.get("buttonTextStyle", TextButton.TextButtonStyle.class));

    //add a clicklistener
    btn.addListener(new ClickListener(){
        @Override
        public void clicked(InputEvent event, float x, float y) {
            //mmmmmm add action for exemple
            stage.addAction(Actions.sequence(Actions.fadeOut(0.5f), Actions.run(new Runnable() {
                @Override
                public void run() {
                    //dispose and load screen
                    dispose();
                    game.setScreen(new MoreBoobsScreen(game));
                }
            })));
        }
    });
    table.add(btn);

要创建位图字体,请查看 Gdx freetype,它非常易于使用。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 何时在libgdx中使用actor? 什么是利弊?(When to use actors in libgdx? What are cons and pros?)
    问题 我正在编写简单的太阳系模拟器。 这是我的第一个libgdx项目。 我在主菜单中使用了舞台和演员,非常方便,尤其是触摸事件处理。 但是...看这些例子,我发现没有人在实际的游戏逻辑中使用演员。 如果我应该使用actor作为行星课程的父母,或者只是写我自己的课程,我就会徘徊。 行星将不可触摸,它们只能在帧之间移动,因此动作MoveBy的第三个参数必须是帧之间的时间。 那就是缺点。 使用Actor的优点是什么? 回答1 演员的主要优点是动作,命中测试和触摸事件以及演员组。 如果您的游戏逻辑需要,动作可以快速轻松地进行补间。 您可以随时调用stage.hit(x,y)来返回第一个actor,该actor对您为其编写的任何命中逻辑均返回true(通常检查x,y,width,height的边界)。 返回此actor或返回null,以继续遍历actor的hit方法寻找一个hit actor。 如果没有演员被击中,则返回Null。 击中用于舞台的触摸事件。 Actor的touch方法将传递局部坐标,并且Stage会处理对象的重叠,例如,如果一个actor覆盖了另一个actor,使得另一个actor不应该接收touchDown,则在覆盖的actor上返回true,以停止对actor调用touchDown。下面”。 这也会在返回true的actor上设置“焦点”
  • libGdx如何将图像或actor用作主体(libGdx How to use images or actor as body)
    问题 我浏览了libGdx Wiki /教程,但没有找到使用图像或演员作为物理物体的示例。 在我的游戏中,我正在舞台上添加一名演员。 但是我想将此演员或子画面图像添加为物理物体。 我必须拖动该演员,甚至要检测与其他物体的碰撞。 如果有的话请给我参考。 谢谢 回答1 这有点棘手。 您不使用图像或Actor作为物理物体。 您将需要实现类似于扩展Actor的新“ PhysicsActor”之类的东西。 这位物理演员将拥有一个实体作为属性,并将成为您的libgdx场景与box2d世界之间的桥梁。 Actor将根据身体的位置更新其位置(请注意仪表到像素的转换)。 Actor会像单击鼠标一样收到输入,并需要创建一个(Mouse-)Joint来拖动Body并跟随鼠标。 您如何处理渲染附着到主体的图像也是自定义的。 您可以手动为每个PhysicsEntity提供一个Sprite,该Sprite将通过draw-call呈现。 或者,您将使用编辑器(例如,RUBE,libgdx论坛的“贡献”部分中还有一个rube-loader),它将使您可以将图像附加到主体上,并从编辑器中读取这些图像。 您可能还会检查此链接http://www.netthreads.co.uk/2012/04/23/libgdx-box2d-scene2d-bumpers-demo/我想这正是您所需要的,但似乎已实现了一点有点不同。
  • 精灵和演员之间的 libgdx 区别(libgdx difference between sprite and actor)
    问题 我只是在浏览关于 libgdx 的 javadoc 和各种教程,我正处于试图找出与我相似或在 libgdx 中提供类似功能的各种概念之间差异的阶段。 起初我认为scene2d是关于创建交互式项目,如菜单等,但我正在阅读的各种教程使用scene2d/actors作为主要游戏项目(即玩家等),其他人只使用精灵。 在游戏中使用 Sprite 和 Actor(即场景 2D)到底有什么区别,你应该在什么时候选择? 谢谢。 回答1 Sprite基本上是具有位置、大小和旋转度的图像。 您可以使用 SpriteBatch 绘制它,一旦您拥有Sprite s 和SpriteBatch ,您就可以通过一种简单的低级方法在屏幕上任何您想要的位置获取 2D 图像。 剩下的就看你了。 另一方面, Actor是场景图的一部分。 它是更高级别的,场景图还有很多内容,而不仅仅是定位图像。 场景图的根是Stage ,它本身并不显示。 Stage是您添加到其中的Actors的容器,用于组织场景。 特别是,输入事件通过Stage向下传递到适当的Actor ,并且Stage知道何时告诉Actor绘制自己。 例如,触摸事件只会发送给被触摸的Actor 。 但请注意, Actor不像Sprite那样包含纹理。 相反,您可能想要使用 Image,它是Actor的子类,它可能更接近Sprite而不仅仅是普通的Actor 。
  • 在libgdx scene2d中使用MVC(Using MVC with libgdx scene2d [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 2年前关闭。 改善这个问题 我开始使用libgdx开发游戏。 实际上,这是我的第二次尝试,因为当我开始第一次尝试时,我并不了解libgdx。 在我的第一次尝试中,我有一个actor子类,其中包含逻辑和纹理。 然后,我开始阅读Gustavo Steigerts教程,发现他试图将逻辑和视图分开。 我尝试做同样的事情,但是视图是我的actor子类,其中包含有关大小和位置的信息,因此它必须进行碰撞检测,这是逻辑的一部分。 另外,如果您在Google上搜索,则会发现使用Scene2d不能执行MVC。 因此,有没有一种方法可以使用MVC来实现Scene2d游戏,还是我应该忽略这种模式,并在扩展actor的一个类中具有模型和视图? 回答1 这是一个主要基于意见的问题,但是涉及到scene2d和MVC模式时,这个问题经常出现。 通常,像Model-View-Controller模式那样尝试分离关注点总是有意义的。 使用scene2d并不是那么容易,因为Actor已经具有act()和draw()方法。 在我看来,您应该始终按自己的方式对游戏世界(实体)进行建模。 应该有一个Player ,一个Rocket和一个Bunny类/演员/实体
  • 在libGDX中的表中获取Actor的舞台坐标(Getting Stage coordinates of Actor in Table in libGDX)
    问题 我想创建一个浮动的帮助提示框,介绍游戏的基本功能。 该气泡应浮在我要解释的Actor上方,如下图所示。 为此,我需要Actor的坐标,在本例中为左键,然后可以将气泡Actor添加到舞台上所有其他元素的前面。 最后一部分很容易,但是我正在努力检索按钮的实际坐标,就像在表格中一样。 将两个按钮添加到表中,如下所示: t.add(btnLab).expandX().center(); t.add(btnSea).expandX().center(); 我尝试了最明显的方法: Vector2 loc = new Vector2(a.getX(), a.getY()); System.out.println("Loc: " + loc); a.localToStageCoordinates(loc); System.out.println("Loc: " + loc); 这给了我(以sysouts的顺序):[0.0,0.0]和[40.0,130.0]。 最后一个位置实际上是表格的位置,该位置填充屏幕的蓝色区域。 因此,该位置显然错过了Table放置Actor所做的操作,因此无法使用(因为我最终只能看到Table的位置)。 (我也尝试过在这里使用t.localToStageCoordinates,t是Table。相同的结果。) 我尝试的另一个解决方案是递归搜索所有“父母”:
  • 单击 libGDX 中的 Actor(Click through an Actor in libGDX)
    问题 我的游戏中有一个覆盖层,它由一个屏幕图像和一组位于屏幕“上”的按钮组成。 截屏: 我的Screen有一个Stage 。 Stage有一组Group对象,我认为它们是层。 第一组有背景,中间的组有游戏元素,最前面的组有屏幕叠加。 覆盖层由一个Image 、屏幕本身和四个TextButton (每个角落一个)组成。 如果不是因为我不能点击游戏层中的任何东西,只要覆盖层中的图像在它前面,这会很好用。 即使图像是透明的,它仍然会在到达游戏层之前拦截所有触摸事件。 所以我的问题是:如何让叠加层中的图像忽略所有触摸事件,以便游戏层获得它们并且可以真正玩游戏? 我自己尝试了一个想法,但我不确定这是正确的方法:我尝试将图像创建为一个自定义Actor ,该Actor始终将高度/宽度设置为 0,但仍然(通过重载 draw() 方法) 在整个屏幕上绘制图像。 这非常有效,除了图像由于某种原因被绘制在较低层的元素后面。 截图:https://dl.dropboxusercontent.com/u/1545094/Screen2.png 在此屏幕截图中,我打开了一个指令消息框,将其添加到游戏层之一(第 6 组)。 请注意,覆盖层(第 7 组)中的所有按钮都位于消息框的前面,但屏幕框架(这是一个自定义 Actor)以某种方式被绘制在消息框的后面。 这是为什么? 注意:如果我采用完全相同的情况
  • 如何在Libgdx中创建按钮?(How to create a button in Libgdx?)
    问题 我想创建一个按钮,当用户将其悬停或单击时会更改。 我创建了以下变量 Button buttonPlay = new Button(); 我不知道该怎么办,如何加载图像? 如何将文字写入按钮? 如何实现事件/效果(悬停,单击)? 如果有人可以为按钮编写一些示例代码,那将非常有帮助。 回答1 按钮只是libgdx中的一个actor。 要渲染一个演员,您可以使用一个包含屏幕上所有演员,对其进行渲染和更新的舞台。 我假设您想要一个带有文本的按钮,因此您应该使用TextButton类并将其添加到舞台上。 一个TextButton接受一个字符串进行渲染,并使用一个ButtonStyle,在这种情况下为TextButtonStyle,它基本上是一个类,其中包含有关按钮的所有信息(字体,未按下时可绘制,在按下时可绘制等)。 public class ButtonExample extends Game{ Stage stage; TextButton button; TextButtonStyle textButtonStyle; BitmapFont font; Skin skin; TextureAtlas buttonAtlas; @Override public void create() { stage = new Stage(); Gdx.input
  • 如何在 libgdx scene2d 上拖放演员?(how to drag and drop actors on libgdx scene2d?)
    问题 我正在使用 libGDX 开发游戏,我想知道如何拖放 Actor。 我已经搭建了舞台并绘制了演员,但我不知道如何触发该事件。 请尝试使用我自己的架构来帮助我。 public class MyGame implements ApplicationListener { Stage stage; Texture texture; Image actor; @Override public void create() { texture = new Texture(Gdx.files.internal("actor.png")); Gdx.input.setInputProcessor(stage); stage = new Stage(512f,512f,true); actor = new Image(texture); stage.addActor(actor); } @Override public void render() { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); stage.draw(); } } 回答1 查看 libgdx 示例中的示例。 这是来自 libgdx 测试类的拖放测试:DragAndDropTest 如果您只想拖动/滑动您的 Actor,您需要向它添加一个 GestureListener 并将您的舞台传递给
  • Scene2d如何处理被触摸的演员?(LibGDX)(Scene2d how to handle touched actor?(LibGDX))
    问题 我在libgdx中使用scene2d时遇到问题。 我在任何地方都找不到可以让我检查演员是否被触碰的方法。 我只能找到告诉我演员是否被触摸或释放的方法。 在我的游戏中,当按住演员时,应该在每一帧中都要做一些事情,而不仅仅是在我用手指一刻的时候。 当我松开手指时,我想停下来。 回答1 您可以在InputListener中对此进行InputListener 。 创建一个布尔字段isTouched ,设置为true,当你得到一个touchDown ,假的,当你得到一个touchUp 。 我在自上而下的射击游戏中使用了这种方法,效果很好。 回答2 您只需在渲染方法中执行此操作即可检查您的输入 gdx.app.log("","touched"+touchdown); 首先设置输入处理器。 Gdx.input.setInputProcessor(mystage); 然后您可以在create方法中将输入侦听器添加到您的actor optone.addListener(new InputListener() { @Override public void touchUp(InputEvent event, float x, float y, int pointer, int button) { boolean touchdown=true; //do your stuff //it will
  • 从舞台上移除演员?(Remove Actors from Stage?)
    问题 我使用 LibGDX 并且只在我的游戏中移动相机。 昨天我创建了一种在我的游戏中绘制地面的方法。 我正在尝试制作 Flappy Bird 的克隆,但在绘制屏幕上移动的地面时遇到问题。 在每次渲染调用中,我都会向Stage添加一个新Actor ,但几次之后绘图不再流畅。 每秒帧数下降得非常快。 有没有另一种方法可以在游戏中取胜? 回答1 如果我没看错,你的问题是一旦演员离开屏幕,他们仍然在被处理并导致延迟,你希望他们被删除。 如果是这种情况,您可以简单地遍历舞台中的所有演员,将他们的坐标投影到窗口坐标,然后使用这些坐标来确定演员是否在屏幕外。 for(Actor actor : stage.getActors()) { Vector3 windowCoordinates = new Vector3(actor.getX(), actor.getY(), 0); camera.project(windowCoordinates); if(windowCoordinates.x + actor.getWidth() < 0) actor.remove(); } 如果角色在窗口中的 x 坐标加上它的宽度小于 0,则角色已经完全滚出屏幕,可以移除。 回答2 对@kabb的解决方案稍作调整: for(Actor actor : stage.getActors()) { //actor
  • libgdx中有多个摄像头(在其他框架中可能类似)(Multiple cameras in libgdx ( probably similar in other frameworks ))
    问题 我已经尝试解决此问题两天了,我已经放弃了寻找现有解决方案的尝试。 我已经开始学习libgdx,并完成了一些教程。 现在,我尝试使用所学的知识,并创建一个简单的侧滚动游戏。 现在,我知道有libgdx的例子,但是我还没有找到一个将Box2d与scene2d和actor以及平铺的地图结合在一起的例子。 我的主要问题是相机。 您需要一个用于舞台的相机(据我所知,该相机用于将SpriteBatch的投影矩阵传递给actor的draw()方法,如果这是错误的,请纠正我),并且您需要一个用于TileMapRender的相机调用render()方法。 另外,在某些教程中,GameScreen中有一个OrthographicCamera,可在需要时使用。 我尝试将OrthographicCamera对象传递给方法,并且尝试在任何地方使用舞台上的摄影机和TileMapRenderer上的摄影机。 前任。 OrthographicCamera ocam = new OrthographicCamera(FRUSTUM_WIDTH, FRUSTUM_HEIGHT); stage.setCamera(ocam); // In the other cases i replace ocam with stage.getCamera() or the one i use for the tileMap
  • 使用 libgdx 和 OpenGL ES 制作橡皮擦效果(Producing eraser effects using libgdx and OpenGL ES)
    问题 请考虑以下图像作为插图: 最初我用单个图像填充整个屏幕/舞台,直到屏幕变成粉红色。 每个粉红色的斑点都是我添加到舞台上的一个单独的 Image actor。 现在我想以这样的方式实现 touchDown 方法,每次用户触摸屏幕时,它都会擦除发生触摸事件的图像的一部分。 但是,该触摸事件不应影响粉红色斑点演员后面或上方的其他图像/演员/纹理区域。 我应该如何使用 OpenGL ES 在 libgdx 中实现这一点? 请在这方面帮助我。 我找到了这个链接,它解释了如何修改 TextureRegion,但我不知道如何使用本博客中解释的技术来解决我的问题。 链接在这里 回答1 你能使用 FBO 和模板缓冲区吗? 为您的“粉红色”层设置一个 FBO,并为其设置一个模板缓冲区。 在着陆时,将您的触摸作为蒙版绘制到粉红色 FBO 的模板缓冲区。 现在,当您绘制粉红色 FBO 时,您触摸的区域不会被渲染,因此您将能够看到其背后的背景 FBO。 此链接 http://www.opengl.org/archives/resources/faq/technical/rasterization.htm,第 14.050 节告诉您如何设置模板缓冲区: 您可以按如下方式设置 OpenGL 状态: glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS
  • 带有 AssetManager 的 Libgdx FreeTypeFontGenerator(Libgdx FreeTypeFontGenerator with AssetManager)
    问题 我想将资产管理器与 FreeTypeFontGenerator 结合使用。 我不想加载 fnt 文件,因为它们在不同的屏幕分辨率上显示不同。 所以我目前所做的是在每个演员或屏幕上即时生成我的字体。 现在我认为最好在游戏启动时生成一次字体并将它们加载到资产管理器中。 但是 AssetManager 似乎需要一个带有 BitmapFont.class 参数的文件名。 我想要做的是生成 5 种不同的位图字体并将这些位图字体加载到资产管理器中,因此我将所有资源集中在一个地方,并且可以重用它们。 我可以创建这些 BitmapFonts,将它们保存在一个列表中,然后将列表提供给每个演员或屏幕,就像我使用资产管理器管理我的纹理和音频一样。 但是将所有内容都放在一个地方,即资产管理器,会更优雅。 那么,有没有办法将使用 FreeTypeFontGenerator 创建的 BitmapFonts 加载到资产管理器中? 回答1 在这里您可以阅读有关如何提供您自己的 AssetLoader 的信息。 您必须实现 SynchronousAssetLoader 或 AsynchronousAssetLoader。 那些将使文件成为免费字体。 有了它,您可以使用生成器生成所需的BitmapFont 。 由于您想使用资产管理器,您必须像这样覆盖位图字体的默认加载器: manager.setLoader
  • Libgdx-如何在scene2d中的正确位置绘制填充的矩形?(Libgdx - How to draw filled rectangle in the right place in scene2d?)
    问题 我正在使用scene2d。 这是我的代码: group.addActor(new Actor() { @Override public Actor hit(float arg0, float arg1) { return null; } @Override public void draw(SpriteBatch batch, float arg1) { batch.end(); shapeRenderer.begin(ShapeType.FilledRectangle); shapeRenderer.setColor(Color.RED); shapeRenderer.filledRect(0, 0, 300, 20); shapeRenderer.end(); batch.begin(); } }); 问题是它相对于屏幕(x = 0,y = 0)绘制此矩形,但是我需要相对于组绘制它。 但是如果我用以下方法绘制其他实体: batch.draw(texture, 0, 0, width, height); 它相对于我的组(从组的左下角起0,0像素)正确绘制了(x = 0,y = 0)。 有什么建议如何在Scene2d中实现形状绘制? 有人可以解释为什么这两个呼叫的工作方式不同吗? 回答1 ShapeRenderer具有自己的变换矩阵和投影矩阵。 这些与Scene2d
  • 如何创建libgdx主菜单屏幕[关闭](How to create libgdx main menu screen [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 5年前关闭。 改进这个问题 我是java和libgdx的新手,我想创建一个主菜单屏幕,有人能给我一个简单的例子吗? 回答1 您要问的范围很广,它涉及许多元素,例如创建按钮、皮肤、设置表格等。无论如何,您应该为此使用 Screens,添加舞台并向舞台添加演员。 最终,您需要将 Listeners 添加到您的按钮 actor 以切换屏幕。 这是我为你制作的: public class TestScreen implements Screen{ private SpriteBatch batch; protected Stage stage; private Viewport viewport; private OrthographicCamera camera; private TextureAtlas atlas; protected Skin skin; public TestScreen() { atlas = new TextureAtlas("skin.atlas"); skin = new Skin(Gdx.files.internal("skin.json"), atlas); batch = new SpriteBatch(); camera
  • libgdx 中的 GestureDetector 和 InputListener(GestureDetector and InputListener in libgdx)
    问题 我是 libgdx 的新手,我想在这里实现的是我希望 GestureDetector 与 InputListener 同时工作。 我在左侧有两个按钮,即使我同时开始滑动(多点触控),我也需要它们保持反应。 我使用了 InputMultiplexer,但它不能按我需要的方式工作。 我检查了 InputListener 和 GestureDetector 的所有返回值,我需要的一切都返回 true,而且 GestureInputListener 是一个实现 GestureDetector.GestureListener 的类。 我只用了扔进去。 GestureInputListener 和 InputListener 都可以工作,但不能同时工作。 你能帮我解决这个问题吗? 链接,想法。 谢谢。 代码如下: inputMultiplexer.addProcessor(stage); inputMultiplexer.addProcessor(new GestureDetector(gestureInputListener)); Gdx.input.setInputProcessor(inputMultiplexer); 回答1 然后,而不是使用输入多路复用器使用代码: public class MyGestureDetector extends GestureDetector {
  • LibGDX And​​roid 游戏 - 在滚动屏幕上显示固定文本(即分数)(LibGDX Android Game - displaying fixed text (ie Score) over a scrolling screen)
    问题 我开始在 LibGDX 中编写游戏,才刚刚开始。 我已经加载了一个基本的瓷砖地图,一个玩家精灵并且可以移动角色并且屏幕(相机)滚动 - 完美。 我在屏幕的右下方有两个叠加的纹理,一个左右箭头,用作操纵杆来控制角色。 我将这些与 player.x 位置相关联,该位置始终固定在屏幕的中心。 到目前为止很酷......如下: ///////////////////////////////////////////////////////////////// private void renderJoypad(float deltaTime) { batch.draw(Assets.leftJoypad, blockman.position.x-14, 1, 3, 3); batch.draw(Assets.rightJoypad, blockman.position.x-9, 1, 3, 3); } 我现在试图将玩家的分数放在屏幕的左上角。 乐谱由位图字体组成,如下所示。 font = new BitmapFont(Gdx.files.internal("fonts/minecrafter.fnt"),Gdx.files.internal("fonts/minecrafter.png"),false); font.setScale(0.02f); 在我的 render() 方法中
  • 鼠标悬停-libgdx(Mouse hover - libgdx)
    问题 libgdx中是否有任何侦听器可以让我检测到鼠标悬停而不是鼠标悬停。 在场景2D的按钮类中,您有2种方法isOver和isPressed,但是它们做同样的事情……还有其他人遇到这个问题吗? 还有另一种方法来检测鼠标悬停在actor上吗? 回答1 有一个可以附加到Actor的ClickListener,它提供类似以下事件的事件: public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) enter事件基本上表示鼠标开始悬停在actor上, exit表示鼠标“离开”了actor的区域。 它还具有一个clicked事件,您可以使用该事件最终执行某些操作。
  • 使用 libgdx 缩放scene2d 按钮(scene2d button scaling with libgdx)
    问题 我不知道这是否只是我,但 drawables 让我感到困惑。 他们是打算保持给定的大小,还是有办法在其中缩放图像? 我知道他们可以使用 Ninepatch 通过拉伸图像来填充某些区域,但我想缩放它拉伸的图像。 我正在为我的菜单按钮使用 TextButton,但它们太大了,我很想知道如何缩放它们。 我正在从地图集中检索皮肤,其中包含九块图像。 这是设置屏幕: 这是我正在使用的包中的图像: 下面是 TextureAtlas 和 Skin 的初始化: buttonAtlas = new TextureAtlas(Gdx.files.internal("buttons/buttons.pack")); buttonSkin = new Skin(buttonAtlas); 这是该菜单按钮的初始化。 TextButtonStyle textButtonStyle = new TextButtonStyle(); textButtonStyle.up = Assets.buttonSkin.getDrawable("bluebutton"); textButtonStyle.down = Assets.buttonSkin.getDrawable("redbutton"); textButtonStyle.font = font; buttonMenu = new TextButton(
  • Libgdx: place 2 actors one on another
    I use libgdx's scene2d built-in UI library to make an UI in my game. I'm interesting how can I draw 2 images(or actors) in a table one on another? I'm looking to the similar like LayerDrawable in Android. Is there any exists stuff to make it?