gpt4 book ai didi

java - Libgdx 输入处理器无法正常工作

转载 作者:行者123 更新时间:2023-11-30 11:13:46 27 4
gpt4 key购买 nike

我有这个游戏,它会跟随玩家在游戏中所做的每一次输入。我为 touchDragged、touchDown 和 touchUp 定义了特定的 Action 。唯一的问题是,每当玩家开始移动他的鼠标/手指然后停止但仍保持鼠标/手指按下时,游戏就无法捕获该输入,因此游戏无法正常运行。

如果用户拖动手指/鼠标然后没有抬起手指就停止了,有什么方法可以处理输入吗?

这是他的我的 InputProcessor:

package com.david.helpers;

import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import com.david.objects.Acorn;

public class InputHandler implements InputProcessor{

private Vector2 target;
private Vector3 temp;
private OrthographicCamera camera;
private Array<Acorn> acorns;
private boolean isAiming = false;

public InputHandler(Array<Acorn> acorns, OrthographicCamera camera) {
this.camera = camera;
this.acorns = acorns;
target = new Vector2();
temp = new Vector3();
}
@Override
public boolean keyDown(int keycode) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean keyUp(int keycode) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean keyTyped(char character) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
// TODO Auto-generated method stub
camera.unproject(temp.set(screenX, screenY, 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
isAiming = true;
}
return true;
}

@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
// TODO Auto-generated method stub
camera.unproject(temp.set(screenX, screenY, 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
acorns.peek().getBody().setLinearVelocity(target.cpy().scl(25));
isAiming = false;
}
return true;
}

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
// TODO Auto-generated method stub
camera.unproject(temp.set(screenX, screenY, 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
}
return true;
}

@Override
public boolean mouseMoved(int screenX, int screenY) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean scrolled(int amount) {
// TODO Auto-generated method stub
return false;
}
public Vector2 getTarget() {
return this.target;
}
public boolean isAiming() {
return this.isAiming;
}
}

这背后的问题非常简单 - 我有一个射弹,在它发射之前,用户可以拖动鼠标/手指并选择发射它的位置。现在,代码根据用户的触摸绘制轨迹并且工作正常。唯一的问题是,每当用户停止移动手指但仍保持向下移动时,程序就不会绘制轨迹。在我的 Renderer 类中,我检查 InputProcessor 中的 isAiming 变量是否为真。如果是这样,它会绘制所需的轨迹。在我看来,当用户开始围绕他的手指移动然后停止移动但仍保持向下移动时,InputProcessor 就好像没有在那个特定时刻获取触摸数据。

这很烦人,如果你们能帮助我,我会很高兴:)

最佳答案

对我来说,Android 设备中的触摸操作通常存在问题。对于你想要的,试试Input Polling相反:

//In your render method.
if(Gdx.input.isTouched()){
camera.unproject(temp.set(Gdx.input.getX(), Gdx.input.getY(), 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
isAiming = true;
}
}else{
if(isAiming){
camera.unproject(temp.set(Gdx.input.getX(), Gdx.input.getY(), 0));
if(!temp.isZero() && temp != null) {
target.set(temp.x, temp.y);
target.sub(acorns.peek().getBody().getPosition());
target.nor();
acorns.peek().getBody().setLinearVelocity(target.cpy().scl(25));
isAiming = false;
}
}
}

关于java - Libgdx 输入处理器无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com