我正在尝试将 .png 图片添加到我的画布窗口,但是我遇到了一些问题。假设我在我的窗口中添加了不同类型的对象。有类 Pacman,它扩展了 GameObject 类。但是,我的 pacman 目前是一个矩形,我想用 Pacman 的图片替换这个矩形。我尝试了 10 种不同的代码,但您需要扩展画布或 JFrame。不幸的是,我不能这样做,因为我已经用 GameObject 类扩展了 Pacman 类。
我是对象编程的新手,但是有没有办法向窗口添加图片?
我正在尝试将 .png 图片添加到我的画布窗口,但是我遇到了一些问题。假设我在我的窗口中添加了不同类型的对象。有类 Pacman,它扩展了 GameObject 类。但是,我的 pacman 目前是一个矩形,我想用 Pacman 的图片替换这个矩形。我尝试了 10 种不同的代码,但您需要扩展画布或 JFrame。不幸的是,我不能这样做,因为我已经用 GameObject 类扩展了 Pacman 类。
我是对象编程的新手,但是有没有办法向窗口添加图片?
考虑以 MVC(模型-视图-控制)方式重新设计您的 GUI 程序,其中关键是模型(程序的逻辑表示)与视图(程序的可视表示)不同且不了解视图(程序的视觉表示) . 这样,您的 Pacman 模型类可以扩展您的 GameObject 模型类,而 Pacman 的可视化表示可以是一个 JLabel,它将您的 pacman 图像保存在 ImageIcon 中。
编辑:或者如 MadProgrammer 所说,将视觉表示作为其paintComponent(Graphics g)
方法中的精灵绘制在游戏的主 JPanel 上。
这里的关键是你对游戏的逻辑表示——主要是所涉及的演员的位置、运动和互动,比如吃豆人、敌人、“食物”、权力位、迷宫边界,没有被编码关于 GUI、图像或用户交互。这部分代码将不使用 GUI 库,例如 Swing 或 AWT,不使用 KeyListeners 或键绑定。它会有一个游戏循环和移动非用户控制元素的逻辑,它会检查吃豆人和敌人的接触,它会有吃豆人状态的代码——正常和授权——以及要做什么的逻辑根据吃豆人的状态,当吃豆人接触敌人时做。它将具有允许另一个类移动 Pac-Man 的方法,例如moveRight()
、moveLeft()
、moveUp()
和moveDown()
。
GUI 将根据他们在模型中的位置显示迷宫和演员。侦听器将通知 GUI 模型状态的变化,然后重新绘制自身和演员的新位置。它将有侦听器来侦听用户交互,然后将该信息传递给控制器,然后控制器将更改模型的状态。例如,键绑定可以通知控件类用户正在按下向上箭头,然后控件将调用模型的moveUp()
方法来向上移动 Pac-Man,如果没有障碍物阻止这种情况发生。
有关 MVC 和 Swing 的更多信息,请查看: