我正在開發一款遊戲,而且我在本遊戲中使用了Libgdx Library。它將在Android上運行,並且必須在一個屏幕上與兩名玩家一起玩。但我無法獲得另一位玩家的投入。我可以和底線或頂尖球員一起打球,但不能同時打。Libgdx multiTouch不能正常工作
這是在得到輸入代碼:
public class PlayStateInput implements InputProcessor {
private PlayState playState;
private Vector2 touchPos;
private Vector2 bodyCord;
public PlayStateInput(PlayState playState){
this.playState = playState;
touchPos = new Vector2();
bodyCord = new Vector2();
touchPos.x=Gdx.input.getX();
touchPos.y=Gdx.input.getY();
bodyCord.x=playState.getGameWorld().getPaddle().getBody().getPosition().x;
bodyCord.y=playState.getGameWorld().getPaddle().getBody().getPosition().y;
}
@Override
public boolean keyDown(int keycode) {
return false;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
if(playState.getGameWorld().getPuck().getCircleRect().contains(screenX,screenY)){
System.out.println("collision");
}
if(screenY > Gdx.graphics.getHeight()/2 && (pointer <= 2)){
playState.getGameWorld().getPaddle2().setBottomPaddle(true);
}
if(screenY < Gdx.graphics.getHeight()/2 && (pointer <= 2)){
playState.getGameWorld().getPaddle().setTopPaddle(true);
}
return false;
}
而且使用該輸入的位置:
public class Paddle implements GameObject {
private World world;
private Body body;
private Body body2;
private BodyDef bodyDef;
private BodyDef bodyDef2;
private Fixture fixture;
private Fixture fixture2;
private FixtureDef fixtureDef;
private FixtureDef fixtureDef2;
private Circle circleRect;
private Circle circleRect2;
boolean TopPaddle = false;
boolean BottomPaddle = false;
private float PPM=100f;
private float power=100f;
private Vector2 touchPos;
private Sprite sprite;
String koordinatlar;
public Paddle(World world){
this.world = world;
bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set((Gdx.graphics.getWidth()/2)/PPM,(Gdx.graphics.getHeight()/3)/PPM);
body = world.createBody(bodyDef);
fixtureDef = new FixtureDef();
fixtureDef.density = 1.0f;
fixtureDef.friction = 1.0f;
fixtureDef.restitution=0.3f;
CircleShape circleShape = new CircleShape();
circleShape.setRadius((Gdx.graphics.getWidth()/16)/PPM);
fixtureDef.shape = circleShape;
fixture = body.createFixture(fixtureDef);
circleRect = new Circle(body.getPosition().x,body.getPosition().y,(Gdx.graphics.getWidth()/16));
Sprite.split(ImageLoader.playButtonRegion.getTexture(),20,20);
sprite = new Sprite(ImageLoader.paddle);
sprite.setSize((Gdx.graphics.getWidth()/8),(Gdx.graphics.getWidth()/8));
sprite.setPosition((Gdx.graphics.getWidth()/2)-30f,(Gdx.graphics.getHeight()/3)-30f);
touchPos = new Vector2();
}
@Override
public void render(SpriteBatch sb) {
sprite.draw(sb);
sprite.setPosition(body.getPosition().x*PPM-30f,body.getPosition().y*PPM-30f);
}
@Override
public void update(float delta) {
touchPos.x=Gdx.input.getX()/PPM;
touchPos.y=Gdx.input.getY()/PPM;
System.out.println(touchPos);
if (TopPaddle) {
body.setLinearVelocity(power*(touchPos.x-body.getPosition().x),power*(touchPos.y-body.getPosition().y));
body.setAngularVelocity(0.0f);
if(Gdx.input.getY()>Gdx.graphics.getHeight()/2){
body.setLinearVelocity(0f,0f);
}
//System.out.println(Gdx.input.getX()+" "+Gdx.input.getY());
}
}
我希望,我自己清楚。
要正確支持多點觸控,您需要實現InputListener和軌道指針索引以區分下手指。 – Tenfour04