java - libGdx - actor 监听器 touchDown、touchUp 不起作用。是的,我用过 setBones

标签 java libgdx actor

    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/

相关文章:

java - Libgdx 鼠标刚刚点击

scala - akka 集群种子节点给出错误 : dropping message for non-local recipient

Scala Actor : receive vs react

java - 如何比较带有 ü、ć、š 等特殊字符的字符串?

java - 在 JTextPane 中绘制水平线

java - 左键单击时指针下 Sprite 的鼠标坐标偏移补偿问题

java - Libgdx - 屏幕截图质量差

c# - 跨不同系统使用 Azure Service Fabric Reliable Actors

Web 服务中长时间运行进程的 Java 模式

java - 使用 Android Studio 3.4 android.support.v7.widget.CardView(修复构建路径、编辑 XML、创建类)