package com.mygdx.game;
public class Box extends Actor implements Disposable{
private int matPosX,matPosY,nearBombs;
private boolean bomb,disarmed;
private enum selectedValue{notselected,bombed,unknown};
private selectedValue value;
protected MinerLogic logicaJuego;
private Texture caja;
private TextureRegion miCaja;
protected Box(int x,int y,MinerLogic game)
{
this.setPosMatX(x);
this.setPosMatY(y);
setBomb(false);
setSelected(selectedValue.notselected);
setDisarmed(false);
setNearBombs(0);
this.logicaJuego=game;
caja = new Texture("minerjpg/box.jpg");
miCaja =new TextureRegion(caja,Constants.size,Constants.size);
super.setBounds(Constants.startX+Constants.size*matPosX,
Constants.startY+Constants.size*matPosY,
Constants.size, Constants.size);
setTouchable(Touchable.enabled);
System.out.println("Bound creados");
System.out.println(super.getX());
System.out.println(super.getY());
System.out.println(super.getWidth());
System.out.println(super.getHeight());
this.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button)
{
//Se ejecuta cuando se hace click sobre el actor.
System.out.println("down");
logicaJuego.intento(matPosX,matPosY);
return true;
}
public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
System.out.println("up");
}
});
}
嗯,我认为我很好地使用了 addListener,所以我真的不明白为什么程序从未检测到 touchDown。我正在打印很多 Actor ,但没有人可以检测到 touchDown。 边界运行良好:
我的程序上没有更多的监听器,因此无法在另一端处理它。目前我只有一名 Actor
嗯,我想我应该提供更多信息。 这是控制游戏所有逻辑的类。扩展表。
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
public class MinerLogic extends Table{
protected Box[][] campos;
protected botonDeNuevo boton;
protected int freeBoxes;
public PantallaMineer pantalla;
public MyGdxGame game;
public MinerLogic(MyGdxGame game,PantallaMineer pantalla,int numX,int numY,int numBombs)
{
//Inisicalizamos el los campos a partir del tamanio dado
this.campos= new Box[numX][numY];
this.freeBoxes=numX*numY-numBombs;
this.game=game;
this.pantalla=pantalla;
for(int a=0;a<=numX-1;a++)
{
for(int b=0;b<=numY-1;b++)
{
this.campos[a][b]=new Box(a,b,this);
}
}
boton=new botonDeNuevo(this);
int c=0;
//armamos las bombas
while(c<numBombs){
int x=(int) (Math.random()*(numX-1));
int y=(int) (Math.random()*(numY-1));
if(!(this.campos[x][y].isBomb())){
this.campos[x][y].arm();
c++;
}
}
}
@Override
public void draw(Batch batch, float parentAlpha) {
// TODO Auto-generated method stub
int numX=this.campos.length;
int numY=this.campos[0].length;
for(int a=0;a<=numX-1;a++)
{
for(int b=0;b<=numY-1;b++)
{
this.campos[a][b].draw(batch, parentAlpha);
}
}
boton.draw(batch, parentAlpha);
}
.../
这是我实现屏幕界面的抽象类 它只是抽象的空类
package com.mygdx.game;
import com.badlogic.gdx.Screen;
public abstract class Pantalla implements Screen {
@Override
public void render(float delta) {
// TODO Auto-generated method stub
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
package com.mygdx.game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.scenes.scene2d.Stage;
public class PantallaMineer extends Pantalla{
private MyGdxGame game;
private Stage stage;
private MinerLogic logic ;
public PantallaMineer(MyGdxGame game,int numX,int numY,int numBombs){
this.game=game;
logic=new MinerLogic(this.game,this,numX,numY,numBombs);
this.stage=new Stage();
Gdx.input.setInputProcessor(stage);
logic.setFillParent(true);
stage.addActor(logic);
}
@Override
public void render(float delta) {
logic.draw(game.batch, delta);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
super.render(delta);
}
据我所知,现在我没有将 Actor 与舞台联系起来。舞台可以“看到” table ,但无法“看到” Actor 。我怎样才能将 Actor 与舞台联系起来?
好的,请帮忙。问题已解决 对于那些会发现同样问题的人 如果您有类扩展表,则数据结构中的所有参与者都需要添加到您的类路径中 我解决了它改变
this.campos[a][b]=new Box(a,b,this);
对于
aux=new Box(a,b,this);
this.campos[a][b]=aux;
super.add(aux);
最佳答案
您需要将此gdx.input.setinputprocessor
设置为容纳 Actor 的舞台或您想让听众处理的任何 Actor 。
关于java - libGdx - actor 监听器 touchDown、touchUp 不起作用。是的,我用过 setBones,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24925549/