1

我正在尝试将 .png 图片添加到我的画布窗口,但是我遇到了一些问题。假设我在我的窗口中添加了不同类型的对象。有类 Pacman,它扩展了 GameObject 类。但是,我的 pacman 目前是一个矩形,我想用 Pacman 的图片替换这个矩形。我尝试了 10 种不同的代码,但您需要扩展画布或 JFrame。不幸的是,我不能这样做,因为我已经用 GameObject 类扩展了 Pacman 类。

我是对象编程的新手,但是有没有办法向窗口添加图片?

4

1 回答 1

4

考虑以 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 的更多信息,请查看:

于 2015-04-18T00:34:36.397 回答