所以我试图用文件handle.list()方法获取目录中的文件列表,但即使目录中有文件,它也会返回一个空列表.对我来说似乎很奇怪的是它确实可以在设备上运行,但它在桌面上不起作用.我想我知道问题是什么,但我不知道如何解决它.在方法描述中,它说"在桌面上,类路径上的目录的FileType.Internal句柄将返回零长度数组.",但没有其他方法,所以你认为我能做什么?
所以我要做的是通过将pixmaps绘制到纹理来为我的游戏生成背景图像.到目前为止,我可以做到这一点,但现在我需要绘制在X轴或Y轴上翻转到纹理的像素图.但是我找不到任何可以做到的事情.pixmap类不提供该功能.然后我想我可以在纹理上绘制一个翻转的纹理区域,但到目前为止我还没有找到如何做到这一点.所以我想知道我怎么能做这样的事情,是否可以用其他java库翻转png图像,然后从翻转的图像创建一个像素图?
我正在使用libgdx和OpenGL ES 1.0,我想知道SpriteBatch是否可以写入/绘制到模板缓冲区.我一直在尝试写它并且我根本没有得到任何结果,我没有使用模板缓冲区的经验,但我已经阅读了很多,所以如果我在后面的任何事情上错了,请纠正我.基本上我想要做的是用模板缓冲区绘制带有SpriteBatch的纹理,这样当我绘制其他东西时(禁用模板缓冲区)它只会在模板缓冲区等于1的区域上绘制.
这是我想要的结果:如果我将一个星形的纹理绘制到模板缓冲区,然后我在颜色缓冲区中绘制一个红色纹理,我希望红色纹理省略星形在模板缓冲区中的像素.
到目前为止这是我的代码:
batch.begin();
Gdx.gl10.glEnable(GL10.GL_STENCIL_TEST);
Gdx.gl10.glEnable(GL10.GL_ALPHA_TEST);
Gdx.gl10.glStencilFunc(GL10.GL_ALWAYS, 0x1, 0xffffffff);
Gdx.gl10.glStencilOp(GL10.GL_REPLACE, GL10.GL_REPLACE, GL10.GL_REPLACE);
Gdx.gl10.glColorMask(false, false, false, false);
batch.draw(myShape, 100, 100); //draw to the stencil buffer a shape (texture region)
batch.end();
batch.begin();
Gdx.gl10.glColorMask(true, true, true, true);
Gdx.gl10.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);
// draw where the shape has NOT been drawn
Gdx.gl10.glStencilFunc(GL10.GL_NOTEQUAL, 0x1, 0xff);
batch.draw(BackGroundLayer, 0, 0);// draw background
Gdx.gl10.glDisable(GL10.GL_STENCIL_TEST);
Run Code Online (Sandbox Code Playgroud) 我使用BitmapFont来渲染文本问题是我决定使用TrueTypeFontFactory.createBitmapFont方法来创建BitmapFont,所以我可以使用自己的字体而不是默认字体.在使用TrueTypeFontFactory.createBitmapFont方法之前,文本呈现没有任何问题,除非它在y轴上被翻转我只是创建一个BitmapFont并在构造函数中传递true以便翻转它,但现在我正在使用TrueTypeFontFactory我不能这样做,我似乎无法在创建BitmapFont后这样做,因为没有方法可以这样做.所以我想知道在这种情况下如何翻转字体?
我是Libgdx的新手,我写了一个扩展Game类的类,事实是来自Game的setScreen()方法没有交换屏幕,因为在我设置屏幕之后我的游戏仍然只渲染渲染方法中的内容从游戏类而不是屏幕类的渲染方法中的内容.这是代码:
如果运行此代码,即使我在用户触摸(点击)屏幕时更改屏幕,我也只会看到红色屏幕
class myGame extends Game
{
GameScreen myOtherScreen;
public void create()
{
//create other screen
myMenuScreen = new GameScreen();
}
public void render(float delta)
{
// change screens if screen touched
if(Gdx.input.justTouched())
setScreen(myOtherScreen);
//render red screen
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
.
. //other methods
.
}
// ======= Screen Class ========
public class GameScreen implements Screen
{
@Override
public void render(float delta)
{
//render green screen
Gdx.gl.glClearColor(0, 1, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
.
. //other methods
. …Run Code Online (Sandbox Code Playgroud) 所以我在我的游戏中使用了libgdx的舞台类到目前为止我在舞台上添加了一个演员,它只是为屏幕绘制了一个背景,我遇到的问题是当我移动舞台的相机来模拟滚动屏幕时(背景图像大于屏幕)相机不会移动.现在让我疯狂的是,当我在台式机启动器上运行时它会工作,但每当我在手机上运行它时它就不会滚动.我真的不知道会出现什么问题.我随后调用了移动摄像机的方法,因为每当调用它时,我都会将方法的名称记录到日志中,并且它会被调用.此外,我甚至记录了相机的位置并且它发生了变化,但只有当我在桌面上运行时,如果我在手机上运行它会记录相同的位置.我不知道这是不是一个bug因为我觉得很奇怪,它只能在桌面启动器上运行,是的,android启动器和桌面启动器都是使用相同的ApplicationListener实例初始化的.有什么建议?提前致谢.
这是简化的代码:
public void Create()
{
GameStage = new Stage(2000, 2000, true);
GameCamera = new OrthographicCamera(2000, 2000);
GameCamera.setToOrtho(true, 2000, 2000);
GameStage.setCamera(GameCamera);
GameStage.setViewport(2000, 2000, true);
}
public void MoveCamera()//it gets called when user drags across the screen
{
GameStage.getCamera().translate(x, y, 0);
GameStage.getCamera().update();
}
public void render()
{
//the background actor has been added at this point
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
GameStage.act(Gdx.graphics.getDeltaTime());
GameStage.draw();
}
Run Code Online (Sandbox Code Playgroud)