【问题标题】:Creating a Interactive GUI for a java game为 Java 游戏创建交互式 GUI
【发布时间】:2011-11-25 11:36:24
【问题描述】:

大家好,我正在用 java 创建一个类似于farmville 的游戏,我只是想知道如何实现用户通常会单击以与游戏客户端交互的交互式对象/按钮。

我不想使用 swing 库(通用窗口看起来很像对象),我想为我的按钮导入自定义图像并将类似按钮的属性分配给那些将用于 GUI 的图像。

有什么建议吗?任何指针?我似乎无法通过 youtube 或其他一些 java 游戏网站找到该信息,因为它们仅显示使用 swing 的简单示例。

任何帮助将不胜感激!

问候 加雷斯

【问题讨论】:

  • 您确实应该从 Swing 或 SWT 开始,以获得您环境的默认外观并从那里进行自定义。如果您从 AWT 开始,那么您需要将工作投入到为每个操作系统设计应用程序的样式上。

标签: java user-interface hud


【解决方案1】:

您真的不想使用 Swing,还是不想使用 JButton 和其他 Swing 控件的默认外观和感觉? " (generic windows looky likey objects)," 是什么意思?

有许多资料描述了自定义按钮以在其顶部包含图像: Creating a custom button in Java

JButton 和其他控件具有与添加单击侦听器等相关的所有事件和方法。您可能不想创建自己的控件。我们没有足够的信息来解释,例如“交互式对象”是什么意思?

如果您只是想向 JButton 添加图标,请使用 the constructor that takes an Icon

【讨论】:

  • 我只是不喜欢 JButton 的默认外观。我只是想知道如何改变它。我的游戏按钮将是带有艺术图像的矩形,以表示以下内容: 角色按钮 建筑物按钮 地图按钮 市场按钮 希望这能为您解决一些问题。
  • 如果您想要一个带有图像的基本按钮(如 Sim City 2000 面板),只需使用带有图标的 JButton 构造函数。
  • “我只是不喜欢 JButton 的默认外观。” This source 显示了如何更改它,因此只显示图像。该按钮将与您放入其中的任何图像一样好。 :)
  • 感谢大家的 cmets 和帮助 .. 我会接受这个 azway 并从中学习...感谢您的时间和指导!
【解决方案2】:

您可以使用 JButton,只需覆盖 paint 函数。并在那里画出你想要的东西。需要一段时间才能第一次了解它是如何工作的。我建议您阅读一些关于event-dispatching thread 的内容(here 是 java 的解释)

这是我写的一些代码,所以你有一个简单的参考。

import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class Test extends JButton implements ActionListener{

    private static final long serialVersionUID = 1L;
    Image img;

        /**  constuctor     **/
    public Test(String tImg, JFrame parent){
        this.img = new ImageIcon(tImg).getImage();
        this.addActionListener(this);

    }


           /***********    this is the function you want to learn  ***********/
    @Override
    public void paint(Graphics g){
        g.drawImage(this.img, 0, 0, null);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO do some stuff when its clicked
        JOptionPane.showMessageDialog(null, "you clicked the button");
    }




    public static void main(String[] args) {
        JFrame f = new JFrame();
        Test t = new Test("pics.gif", f);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1, 1));
        f.add(t);
        f.setSize(400,600);
        f.setVisible(true);
    }

}

【讨论】:

  • 为什么不调用 super.paint() 子类化 JButton 并覆盖绘制?我认为这行不通。为什么不直接使用带有 Icon 的 JButton 构造函数呢? leepoint.net/notes-java/GUI/components/20buttons/…
  • -1 1) 为什么要覆盖paint(Graphics) 而不是paintComponent(Graphics)? 2) 你为什么要扩展JButton?它具有为多种不同用途设置图像的方法(请参阅我的链接示例)。
  • 降级是怎么回事?只是想帮助某人,这是我所知道的最好的。这里有一些需要考虑的事情:1)最正确的做事方式可能很难学习,而这并不总是要求寻找的人 2)根据他的问题,他对此有点陌生。这是我学到的第一件事,这是朝着这个方向发展的好方法。 3) 他认为我的回答是最好的,所以这很简单这一事实对他来说可能是最讨厌的事情。 4)如果这对他来说有很大的不同,他可以打开另一个话题,询问什么更有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多