将图像添加到 canvas window

Adding image to canvas window

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

我是对象编程的新手,但是有没有办法将图片添加到 window?

考虑以 M-V-C(模型-视图-控制)方式重新设计您的 GUI 程序,其中关键是模型(程序的逻辑表示)与视图(视觉程序的表示)。这样,您的 Pacman 模型 class 可以扩展您的 GameObject 模型 class,而 Pacman 的视觉表示可以是一个 JLabel,它将您的 pacman 图像保存在一个 ImageIcon 中。

编辑:或者按照 MadProgrammer 的说法,在游戏的主 JPanel 上绘制视觉表示作为 paintComponent(Graphics g) 方法中的精灵。

这里的关键是您对游戏的逻辑表示——主要是所涉及角色的位置、移动和互动,例如吃豆人、敌人、"food"、电源位,迷宫边界的编码不考虑 GUI、图像或用户交互。这部分代码将不使用 GUI 库,例如 Swing 或 AWT,将不使用 KeyListeners 或键绑定。它会有一个游戏循环和逻辑来移动非用户控制的元素,它会检查吃豆人和敌人的触摸,它会有吃豆人状态的代码——正常和授权——以及什么逻辑根据 Pac-Man 的状态,当 Pac-Man 接触敌人时执行。它将具有允许另一个 class 移动吃豆人的方法,例如 moveRight()moveLeft()moveUp()moveDown()

GUI 会根据角色在模型中的位置显示迷宫和角色。 GUI 会收到听众关于模型状态变化的通知,然后会重新绘制自身和演员的新位置。它会有侦听器来侦听用户交互,然后将该信息传递给控制器​​,控制器随后会更改模型的状态。例如,键绑定可以通知控件 class 用户正在按下向上箭头,然后控件将调用模型的 moveUp() 方法来向上移动吃豆人,如果没有障碍阻止的话从发生。

有关 M-V-C 和 Swing 的更多信息,请查看:

  • The MVC pattern and SWING
  • How to correctly implement MVC in Java with Swing?
  • JAVA Swing MVC - Main Controller?
  • MVC with swing implementation java
  • What is the controller in Java Swing?