java - 游戏对象(手机屏幕)上的 Libgdx TouchListner
问题描述
我在 Libgdx 游戏中的 TouchListener 有问题。
在我的 Gamerenderer 上,我有这个:
private OrthographicCamera camera;
private Vector3 input;
private Array<Objects> objects;
private SpriteBatch batch;
//In Constructor
camera = new OrthographicCamera();
camera.setToOrtho(false, Configuration.screenWidth, Configuration.screenHeight);
batch = new SpriteBatch();
batch.setProjectionMatrix(camera.combined);
objects = myGame.Objects();
input = new Vector3(0, 0, 0);
//My Renderer
public void render(float runtime){
Gdx.app.log("GameRenderer: ", "Render()");
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
input.x = Gdx.input.getX();
input.y = Gdx.input.getY();
camera.unproject(input);
batch.begin();
for (Objects object:objects) {
object.getFont().draw(batch,object.getGlyphLayout(),object.getX(),object.getY());
object.getRec().set(object.getX(),object.getY(),object.getGlyphLayout().width,object.getGlyphLayout().height);
if(Gdx.input.isTouched()){
Gdx.app.log("Clicked", "Touched");
if(object.getRec().contains(input.x, input.y)) {
Gdx.app.log("Clicked", "Great");
}
else {
Gdx.app.log("Clicked", "Noooooooooooo");
}
}
}
}
batch.end();
}
当我运行我的游戏时,它工作正常,除了 touchlistener 有时工作正常,但在触摸几秒钟后。
Gdx.app.log("点击", "触摸"); 触摸时触发。
但是 Gdx.app.log("Clicked", "Great"); 或 Gdx.app.log("Clicked", "Nooooooooooooo"); 我必须长按直到触发触摸。
谢谢你
编辑
我添加了一个 ShapeRenderer 来查看我的对象到底是做什么的:
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
for(Objects object:objects) {
shapeRenderer.setColor(255 / 255.0f, 0 / 255.0f, 0 / 255.0f, 1);
shapeRenderer.rect(object.getRec().x, object.getRec().y, object.getRec().width, object.getRec().height);
shapeRenderer.setColor(0 / 255.0f, 0 / 255.0f, 255 / 255.0f, 1);
shapeRenderer.rect(object.getX(), object.getY(), object.getGlyphLayout().width, object.getGlyphLayout().height);
}
shapeRenderer.end();
然后我有这个结果:
黑色矩形是对象,蓝色是对象矩形的 ShapeRenderer 之上的对象的 ShapeRenderer。
现在,当我单击对象时,它不会触发单击,但是当我单击 ShapeRenderer 时,它会触发它。
解决方案
检查此解决方案:
@Override
public void create() {
// Codes
Gdx.input.setInputProcessor(new InputAdapter () {
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
// Insert your code
return true;
}
}
);
//Codes
}
将Gdx.input.isTouched()放在循环中并不是一个好主意。
推荐阅读
- c++ - 全局变量与通过多个函数传递相同的变量
- amazon-web-services - Aws Amplify 上的 React 应用程序在尝试访问 Elastic Beanstalk Springboot 应用程序时收到 ERR_CONNECTION_REFUSED
- clang - 如何使用 libfuzzers 自定义 mutators API?
- laravel - 为什么我得到空列表或在 redis 中设置?
- javascript - Google API 登录侦听器多次运行
- spring - Spring Boot 无法确定合适的驱动类
- node.js - Mongoose 查询在推送时给出未定义的错误,但在 console.log 上显示正常
- typescript - VSCode Typescript智能感知不起作用..为什么?
- algorithmic-trading - 如何以编程方式确定烛台的强度?
- amazon-web-services - 从 http 到 https 的 Cloudfront 重定向是否保留请求标头