识别被点击的单元格

时间:2018-07-16 05:57:52

标签: java libgdx

当前,我正在尝试基于图像创建Sudoku游戏。我现在要弄清楚的是单击了哪个单元以将该信号发送到我的游戏逻辑。这是我为董事会创建UI的方式:

private void initGrid(){
    String value = new String();
    for (int i = 0; i<9; i++){
        for (int j = 0; j<9; j++){
            value = MathUtils.random(1, 9)+"";
            this.grid[i][j] = new Image(atlas.findRegion(value));
            this.grid[i][j].setScale(0.5f);
            this.grid[i][j].setPosition(i * 64 + padX, GameConstants.screenHeight - (j * 64 + padY));
            this.grid[i][j].setOrigin(ImgHeight / 2, ImgWidth / 2);
            this.grid[i][j].setAlign(Align.center);
            this.grid[i][j].addListener(new ClickListener(){

                @Override
                public void clicked(InputEvent event, float x, float y){

                    System.out.println("Image clicked: "+x+" "+y);
                }
            });
            stage.addActor(this.grid[i][j]);
        }
    }
}

我得到的是每个单元格的两个轴上从0到128的值,即使我以0.5比例绘制它们。我没有绝对位置。 我想得到一些像i = 0-8,j = 0-8的东西。我没有在桌子上画画,因为它有一些比例动画并且没有效果。

2 个答案:

答案 0 :(得分:1)

是的,它不会返回网格中的位置,因为它不知道网格本身。如果您只是对Image对象感兴趣,那么应该可以通过将事件源投射到Image中来获取它。

Image source = (Image)event.getSource();

另一方面,如果您确实需要索引-例如在网格中替换它,则必须遍历网格并进行比较。

答案 1 :(得分:1)

您可以使用Image的setName(String)方法存储图像网格位置

fpr, tpr = roc_curve(y_test.values, y_score[:,1])
roc_auc = auc(fpr,tpr)
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)

然后在侦听器中可以使用

输出图像名称
this.grid[i][j] = new Image(atlas.findRegion(value));
this.grid[i][j].setName(i+":"+j);

这应该打印出0:0到8:8之类的内容