- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 Java 制作游戏(学校项目)并且我有以下设置:
一个主类,用 JFrame 扩展,一个“游戏”类,用 JPanel 扩展。
现在从这个主类中,我调用类“Player”和类“Map”。“Map”类存在两个子类“Blocks”和“Bombs”。
但我想知道..如何让所有这些类的绘制方法绘制到同一个 JPanel(属于 Game 类)?
我给每个类(class)都提供了“public void paint(Graphics g)”方法并进行绘画。但是当我运行程序时,只有“游戏”类的绘画出现,而不是子类的绘画。
我该如何实现?
例如,我将代码简化为:
主类:
BomberGame game = new BomberGame();
add(game);
setSize(400, 400);
setTitle("Bomber");
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.show();
}
public static void main(String[] args) {
BomberB1 main = new BomberB1();
}
}
游戏类:
package bomberb1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class BomberGame extends JPanel {
public BomberGame() {;
BomberMap map = new BomberMap(this);
}
public void paint(Graphics g) {
g.drawRect(10, 10, 10, 10);
g.setColor(Color.red);
g.fillRect(10, 10, 10, 10);
}
}
map 类:
package bomberb1;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
import javax.swing.SwingUtilities;
public class BomberMap{
BomberGame game;
public BomberMap(BomberGame game) {
this.game = game;
}
public void paint(Graphics g) {
g.drawRect(30, 30, 20, 20);
}
}
最佳答案
在要绘制的实体类(可以是 map 播放器等)中有一个 draw
方法,该方法接受一个 Graphics
对象,从而允许它访问
对象并向其绘制,类似于:JPanel
的 Graphics
class GamePanel extends JPanel {
Entity e=new Entity;
@Override
protected paintComponent(Graphics g) {
super.paintComponent(g);
e.draw(g);//call draw method for entity and pass graphics object
}
}
class Entity {
//will draw whats necessary to Graphics object
public void draw(Graphics g) {
//draw to the graphics object here
}
}
其他建议:
JFrame
类JPanel
paintComponent()
而不是paint()
(+1 to trashGod 评论)SwingUtilities.invokeLater(..)
block 。更新:
正如@GuillaumePolet 所说,更好的游戏设计是将JPanel
实现为大多数游戏实体的父类,请参阅this更多类似的答案。
关于java - 来自不同类(class)的绘画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13805172/
所以我有这个 UltraTicTacToe 游戏,我正在用 HTML/CSS/JS 编码。它由表中表中的表组成。当您单击 X 或 O 时,我想要突出显示您应该进入的下一个 TicTacToe 牌 ta
Some text Some more text 如何让每个 .example 的 .whatever 包含其 .test 的内容? 例如,如果代码是这样的: Som
我是一名优秀的程序员,十分优秀!