libgdx 如何在图片上添加点击监听器
libgdx how to add clicklistener at images
我刚开始使用 libGDX 制作原型以了解其工作原理。
我想实现一个网格(像国际象棋游戏),当我 click/touch 一个网格框时,这会改变它的图像。
我找到了一个很好的教程,但它只使用键盘侦听器,而且在网络上我找不到一个很好的例子来向我阐明这些机制。
我基本上不明白的是:用什么来渲染框(目前我只使用了 SpriteBatch 和 ShapeRenderer)以及如何检测何时单击了哪个框(我认为计算坐标不是遵循的好方法。我想最好的方法是在每个框上添加一个点击侦听器以确定它何时会被点击,但我不知道如何编写代码)。
感谢您的任何建议,如果您有一个例子,它可以帮助我很多。
Scene2d 最适合您的目的,请查看文档。
https://github.com/libgdx/libgdx/wiki/Scene2d
例如,您可以将 ActorGestureListener
添加到创建的演员中。
要使用 ShapeRenderer
渲染某些内容,您可以覆盖 actor 的 draw
方法
并将矩阵应用于它们。但是,如果您只需要绘制框,最好使用带矩形的简单图像而不是使用 ShapeRenderer
。 Select 你更喜欢的版本。
Image image = new Image();
image.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
System.out.println("You clicked an image...");
}
});
现在我们可以将此图像添加到 Table
或直接添加到 Stage
。
就像 dtx12 提到的那样,您应该查看 Scene2D。您可能想像这样使用 table 设置网格。
Table chessTable = new Table();
int boardHeight = 8;
int boardWidth = 8;
for (int y = 0; y < boardHeight; y++)
{
for (int x = 0; x < boardWidth; x++)
{
//Check if dividable by two to make checker pattern and add cell to table.
if (x + y % 2 == 0)
chessTable.add(blackImage);
else
chessTable.add(whiteImage);
}
//Add a new row to table
chessTable.row();
}
我刚开始使用 libGDX 制作原型以了解其工作原理。 我想实现一个网格(像国际象棋游戏),当我 click/touch 一个网格框时,这会改变它的图像。
我找到了一个很好的教程,但它只使用键盘侦听器,而且在网络上我找不到一个很好的例子来向我阐明这些机制。
我基本上不明白的是:用什么来渲染框(目前我只使用了 SpriteBatch 和 ShapeRenderer)以及如何检测何时单击了哪个框(我认为计算坐标不是遵循的好方法。我想最好的方法是在每个框上添加一个点击侦听器以确定它何时会被点击,但我不知道如何编写代码)。
感谢您的任何建议,如果您有一个例子,它可以帮助我很多。
Scene2d 最适合您的目的,请查看文档。 https://github.com/libgdx/libgdx/wiki/Scene2d
例如,您可以将 ActorGestureListener
添加到创建的演员中。
要使用 ShapeRenderer
渲染某些内容,您可以覆盖 actor 的 draw
方法
并将矩阵应用于它们。但是,如果您只需要绘制框,最好使用带矩形的简单图像而不是使用 ShapeRenderer
。 Select 你更喜欢的版本。
Image image = new Image();
image.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
System.out.println("You clicked an image...");
}
});
现在我们可以将此图像添加到 Table
或直接添加到 Stage
。
就像 dtx12 提到的那样,您应该查看 Scene2D。您可能想像这样使用 table 设置网格。
Table chessTable = new Table();
int boardHeight = 8;
int boardWidth = 8;
for (int y = 0; y < boardHeight; y++)
{
for (int x = 0; x < boardWidth; x++)
{
//Check if dividable by two to make checker pattern and add cell to table.
if (x + y % 2 == 0)
chessTable.add(blackImage);
else
chessTable.add(whiteImage);
}
//Add a new row to table
chessTable.row();
}