0

我一直在创建一个应用程序来帮助我更多地了解 Java,我编写的代码之一是能够将设置(分辨率、音乐响度、fps 限制等)更改为值(1280x720、0-10、VSync) . 我在 photoshop 中绘制了图像并将它们添加到类文件中,在代码中给它们一个位置,以便它们在屏幕上呈现。

if((xpos>400 && xpos<600) && (ypos>255 && ypos<305)){
    if(Mouse.isButtonDown(0)){

这是重要的代码部分,目前我必须手动搜索图像的边界,并通过一些简单的数学计算我需要使用的坐标,但我设计了音乐响度,使其具有 11单独的图像,每个值(0-10)一个。有没有更简单的方法让 Java 知道“如果光标在图像上,请执行此操作”或者我注定要在单独的坐标中编码 11 次(对于其他设置可能更多次。

如果有更好的方法,请告诉我!

谢谢。

PS 我似乎找不到如何使用 Slick2D 和 LWJGL 绘制下拉菜单。我仍然可以使用标准的 Java 代码来绘制下拉菜单,还是应该寻找像 Swing 这样的库来为我完成这项工作?

4

2 回答 2

0

制作一个ImageHolder可以容纳和绘制 的类Image,并保存它绘制的位置。例如,它可以具有与draw(float x, float y)Image 相同的方法,但另外保存 x 和 y 坐标,并通过getX()getY()方法使它们可用。

将所有ImageHolders内容放入Collection您可以迭代的内容中,并将用于鼠标检测的代码放入可迭代的循环中Collection。例如:

for (ImageHolder ih : imageHolderList) {
    if (input.isMousePressed(Input.MOUSE_LEFT_BUTTON)) {
        if (mouseX >= ih.getX() && mouseX < (ih.getX() + ih.getWidth())
                && mouseY >= ih.getY() && mouseY < (ih.getX() + ih.getWidth())) {
            doSomething();
    }
}

通常,如果您的程序中有重复的代码,有一种方法可以通过抽象来消除其中的一些代码。

编辑:至于你的最后一个问题,Slick2D 和 LWJGL 是为了高性能。OpenGL 用于使用 GPU 绘制图像。另一方面,Swing 用于方便构建高级 GUI。它带有许多简洁的抽象,可以制作各种花哨的东西。但是,它比 Slick2D 慢得多。

如果您需要 Slick2D 的速度,以及 OpenGL 之上的 LWJGL,请知道这是有代价的。LWJGL 中的 G 代表 Gaming,因为它是为游戏而不是 GUI 编程而设计的。您可以使用TWLNifty-Gui等工具在 Slick2D 中获得 Swing 的很多功能,但它们的文档和示例代码比 Swing 少得多。话虽如此,如果您无所畏惧,请尝试一下。

于 2013-08-31T09:56:07.327 回答
0

我不确定我是否理解您正在编写的应用程序类型。解析度?音乐响度?帧数限制?这些不是java中的标准东西,听起来你正在制作全屏游戏或其他东西。

还有你在用图像和鼠标做什么?从您的代码中,您似乎正在尝试检测某个区域内的点击(可能是应该显示图像的位置),但您没有在问题中解释任何内容。

无论如何,如果您使用 Swing(这是用于 GUI 的“标准 Java 代码”),那么您可以使用组件(例如 JLabel)显示图像并直接处理对组件的点击,而不是检查坐标。Swing 还处理下拉和弹出菜单。
如果您正在使用其他一些东西,例如 opengl,那么......也许其他人可以帮助您。

于 2013-08-28T20:57:59.983 回答