GVKun编程网logo

在libgdx中使用scene2d.ui:皮肤从哪里来?

22

对于在libgdx中使用scene2d.ui:皮肤从哪里来?感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于android–LibgdxScene2d–设置actor(TextField)填充?

对于在libgdx中使用scene2d.ui:皮肤从哪里来?感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于android – Libgdx Scene2d – 设置actor(TextField)填充?、android – 在libgdx中的scene2D -Animation无效、android-如何在libgdx中使用网络框架(volley,okhttp等)?、android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d的有用信息。

本文目录一览:

在libgdx中使用scene2d.ui:皮肤从哪里来?

在libgdx中使用scene2d.ui:皮肤从哪里来?

我已经阅读了关于libgdx的scene2d功能(包括UI元素)的信息,但是我无法使其正常工作。它们似乎都使用皮肤对象,我该如何创建一个?

我已经完成了一个不错的教程,该教程创建了一个简单的libgdx游戏,可以捕捉桶中的雨滴,并且通过加载带有纹理图集的图像来创建一个简单的棋盘游戏应用。但是,scene2d听起来是一种更好的方式来控制棋盘游戏应用程序中的移动部件以及任何按钮和菜单。

答案1

小编典典

要加载皮肤,您可以从libgdx测试项目中使用的示例皮肤文件开始。

  1. Atlaspack文件
  2. 杰森文件
  3. Atlaspack图片
  4. 字体文件

这个问题还有更多细节,我发现必须将文件移到资产的子目录中,以避免HTML版本中的错误。(如果我将文件保留在资产文件夹中,则会看到错误消息,例如“
GwtApplication:异常:读取文件数据/uiskin.json时出错。”)

我发布了一个显示单个按钮的完整示例,有趣的代码都在游戏类中。该示例非常简单,您只需要两个成员变量即可保存场景和按钮。

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将其与其他外观资源重新打包在一起。

android – Libgdx Scene2d – 设置actor(TextField)填充?

android – Libgdx Scene2d – 设置actor(TextField)填充?

我一直无法设置填充或类似于演员的东西.无法弄明白的方式.我想我必须在皮肤上添加一些东西吗?

我有这个TextField:

        textBoxskin = new Skin();
        textBoxskin.add("textfieldback",new Texture("data/textfieldback.png"));
        textBoxskin.add("cursor",new Texture("data/cursortextfield.png"));
        textBoxskin.add("selection",new Texture("data/selection.png"));
        textBoxskin.add("font",font);

        TextFieldStyle textfieldstyle = new TextFieldStyle();
        textfieldstyle.background= textBoxskin.getDrawable("textfieldback");
        textfieldstyle.disabledFontColor=Color.BLACK;
        textfieldstyle.font=textBoxskin.getFont("font");
        textfieldstyle.fontColor=Color.WHITE;
        textfieldstyle.cursor=textBoxskin.getDrawable("cursor");
        textfieldstyle.selection=textBoxskin.getDrawable("selection");  


        textfieldusername = new TextField("username",textfieldstyle);

看起来像这样:

你可以看到它看起来很可怕左中心…

最佳答案
使用Table类来布局scene2d UI.要设置表:

stage = new Stage();
Table table = new Table();
table.setFillParent(true);
stage.addActor(table);
table.add(textFieldUsername).padBottom(20f); //also use padTop,padLeft,and padright
table.row();

在主循环中,调用:

stage.act(Gdx.graphics.getDeltaTime());
stage.draw();

有关表的更多信息,请参阅:http://code.google.com/p/table-layout/

android – 在libgdx中的scene2D -Animation无效

android – 在libgdx中的scene2D -Animation无效

我想要一个动画的闪屏,就像淡入淡出一样,我正在调整大小,如下所示

public class SplashScreen extends GamePlayScreen {

@Override
public void resize(int width, int height) {
    super.resize(width, height);
    stage.clear();
    Drawable splashDrawable = new TextureRegionDrawable(region);
    splashImage = new Image(splashDrawable, Scaling.stretch);
    splashImage.setFillParent(true);
    splashImage.getColor().a = 0f;
    splashImage.addAction(Actions.sequence(Actions.fadeIn(0.75f),
            Actions.delay(1.75f), Actions.fadeOut(0.75f), 
            new Action() {
                @Override
                public boolean act(float delta) {
                    // the last action will move to the next screen
                    System.out.println("moving to next screen");
                    splashGameObj.setScreen(new GamePlayScreen(
                            splashGameObj));
                    return true;
                }
            }));
    stage.addActor(splashImage);
  }
}

解决方法:

尝试将新的Action()更改为新的RunnableAction(){public void run(){…..

Herer还有更多的动作,还有一些其他解释它们如何工作.再拒绝另一个问题.
->Actions
另外看看:
screen2D, libgdx wiki about actions

android-如何在libgdx中使用网络框架(volley,okhttp等)?

android-如何在libgdx中使用网络框架(volley,okhttp等)?

我想使用libgdx中的volley或okhttp从Web加载一些数据.
如何在libgdx而不是libgdx networking class中使用诸如volley或okhttp之类的网络框架?

解决方法:

例如,尝试将此编译’com.squareup.okhttp:okhttp:2.3.0’添加到您的项目build.gradle文件中

project(":core") {
    apply plugin: "java"


    dependencies {
            ...
            compile 'com.squareup.okhttp:okhttp:2.3.0'
        }
    }

然后,您可以在核心项目中使用okhttp,这是一个示例:

public class OkhttpTest extends ApplicationAdapter {
    OkHttpClient client = new OkHttpClient();

    @Override
    public void create() {
        try {
            System.out.println(run("http://google.com"));
        } catch (IOException e) {
            e.printstacktrace();
        }
    }

    String run(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();

        Response response = client.newCall(request).execute();
        return response.body().string();
    }
}

android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d

android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d

在游戏开发中难免会需要模拟现实情况,一般常见的就是模拟物理世界。

比如物体碰撞,车辆前进,物体下落等。也许有人会觉得原来有实现过一些效果没有看到用什么物理知识呢。

在我看来引入物理引擎并不是必须的,但是这样可以让游戏更逼真。物理引擎的话首选Box2d,但是它是C++写的,直接用不方便。

在Android游戏开发中使用物理引擎一般有三个比较好的选择:

1.JBox2d

Box2d的Java移植版本,速度有点慢。不过对于不熟悉C++的朋友而言这个可以拿来看看原理。

2.Havok

这个就不多说了,我怎么没有用过。

3.Libgdx

libgdx用了jni封装了box2d,速度和易用性都不错。

 

下面我们来看看一个示例,原来没有接触过box2d的朋友最好先找资料看看。

代码如下:

package com.cnblogs.htynkn.listener;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;

public class DemoGame implements ApplicationListener {

protected OrthographicCamera camera;
protected Box2DDebugRenderer renderer; // 测试用绘制器
private World world;

@Override
public void create() {
camera = new OrthographicCamera(48, 32);
camera.position.set(0, 15, 0);
renderer = new Box2DDebugRenderer();

world = new World( new Vector2(0, -9.8f), true); // 一般标准重力场
BodyDef bd = new BodyDef(); // 声明物体定义
bd.position.set(2f, 2f);
bd.type=BodyType.DynamicBody;
Body b = world.createBody(bd); // 通过world创建一个物体
CircleShape c = new CircleShape(); // 创建一个形状(圆)
c.setRadius(1f); // 设置半径
b.createFixture(c, 1f); // 将形状和密度赋给物体
}

@Override
public void dispose() {

renderer.dispose();
world.dispose();

renderer = null;
world = null;
}

@Override
public void pause() {
// TODO Auto-generated method stub

}

@Override
public void render() {
world.step(Gdx.app.getGraphics().getDeltaTime(), 3, 3);
GL10 gl = Gdx.app.getGraphics().getGL10();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
camera.apply(gl);
renderer.render(world, camera.combined);
}

@Override
public void resize( int width, int height) {
// TODO Auto-generated method stub

}

@Override
public void resume() {
// TODO Auto-generated method stub

}

}



我们先创建了一个世界,重力为9.8,方向朝下。

然后声明了一个物体定义,物体为动态物体(就是可以动那种),如果创建一个圆形,将形状赋给物体。

然后调用进行模拟

world.step(Gdx.app.getGraphics().getDeltaTime(), 3, 3);

效果如下:

 

其实用法什么没有大的区别。libgdx并没有AABB那个类,要这只边界的话用

world.QueryAABB(callback, lowerX, lowerY, upperX, upperY)

就行了。

 

形状的话其实有很多,圆形,方形,矩形,多边形,可以具体参考Box2d的帮助文件。

有人觉得使用box2d很复杂,很难和现有的东西联系起来。其实我觉得box2d用着很方便,特别是和Stage联系起来很方便。

Body.setUserData(userData)

将Actor的名字赋给Body,然后在绘制时用

Stage.findActor(name)

改变actor的位置和状体就行了。

 

 

写在最后:

这里想说几个问题:

1.Box2d是一个物理引擎,不是一个游戏引擎。它模拟物理世界和法则,但是你的图像绘制什么的都是自己处理。

2.Box2d的单位是米,秒。注意单位换算,不推荐直接用1像素=1米,这样有些东西会很奇怪的,比例看情况,用个30,,50就行了。

3.Stage的坐标是左下角,Box2d一般是重心,注意变化。

4.调试的时候可以用Box2DDebugRenderer,可以清楚看到边界和重心。


原文链接: http://www.cnblogs.com/htynkn/archive/2011/12/31/libgdx_9.html

我们今天的关于在libgdx中使用scene2d.ui:皮肤从哪里来?的分享就到这里,谢谢您的阅读,如果想了解更多关于android – Libgdx Scene2d – 设置actor(TextField)填充?、android – 在libgdx中的scene2D -Animation无效、android-如何在libgdx中使用网络框架(volley,okhttp等)?、android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d的相关信息,可以在本站进行搜索。

本文标签: