我正在开发一款驴子游戏。打印阶段时,我想在自己的线程中运行它,但是当我把它放在一个线程中时,没有任何draw方法适用于g,这是paintComponent图形变量。我能够g.setColor但像g.fillRect这样的东西都没有用。这当前显示为空白JPanel这个类是在paintComponent方法中创建的并且已经传入了它。我知道使用BufferedImage会更好,但我不想这样做。任何帮助表示赞赏。感谢。
我的舞台课程:
import java.awt.*;
import javax.swing.*;
public class StageOne {
int width = MainClass.width;
int height = MainClass.height;
public StageOne(Graphics g) {
drawStageOne(g);
}
public void drawStageOne(Graphics g) {
width = MainClass.width;
height = MainClass.height;
Thread t = new Thread(new Runnable() {
public void run() {
g.setColor(new Color(0,0,0));
g.fillRect(0, 0, width, height);
paintLadders(g);
paintFloor(g);
}
});
t.start();
}
public void paintFloor(Graphics g) {
int y = 0;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 14; j++) {
if((j >= 7 && i == 0) || (i%2 == 0 && i != 0)) {
y += 3;
}
else if((j >= 9 && i == 5) || (i%2 == 1 && i != 5)){
y -= 3;
}
if((i%2 == 1 && j != 13) || (i%2 == 0 && j != 0) || i == 0) {
redFloor(g,48*j,height-y-36,3);
}
}
if(i == 4) {
y += 75;
}
else if(i%2 == 0) {
y += 102;
}
else {
y += 96;
}
}
for (int i = 0; i < 3; i++) {
redFloor(g,264+48*i,258,3);
}
System.out.println("Hello World!");
}
public void paintLadders(Graphics g) {
//Ladder 1 1
blueLadderSection(g,240,height-36,3);
blueLadderSection(g,240,height-48,3);
blueLadderSection(g,240,height-108,3);
//Ladder 1 2
blueLadderSection(g,552,height-48,3);
blueLadderSection(g,552,height-60,3);
blueLadderSection(g,552,height-72,3);
blueLadderSection(g,552,height-84,3);
blueLadderSection(g,552,height-96,3);
//Ladder 2 1
blueLadderSection(g,96,height-144,3);
blueLadderSection(g,96,height-156,3);
blueLadderSection(g,96,height-168,3);
blueLadderSection(g,96,height-180,3);
blueLadderSection(g,96,height-192,3);
//Ladder 2 2
blueLadderSection(g,288,height-132,3);
blueLadderSection(g,288,height-144,3);
blueLadderSection(g,288,height-156,3);
blueLadderSection(g,288,height-168,3);
blueLadderSection(g,288,height-180,3);
blueLadderSection(g,288,height-192,3);
blueLadderSection(g,288,height-204,3);
//Ladder 3 1
blueLadderSection(g,192,height-228,3);
blueLadderSection(g,192,height-240,3);
blueLadderSection(g,192,height-300,3);
blueLadderSection(g,192,height-312,3);
//Ladder 3 2
blueLadderSection(g,336,height-228,3);
blueLadderSection(g,336,height-240,3);
blueLadderSection(g,336,height-252,3);
blueLadderSection(g,336,height-264,3);
blueLadderSection(g,336,height-276,3);
blueLadderSection(g,336,height-288,3);
blueLadderSection(g,336,height-300,3);
blueLadderSection(g,336,height-312,3);
//Ladder 3 3
blueLadderSection(g,552,height-240,3);
blueLadderSection(g,552,height-252,3);
blueLadderSection(g,552,height-264,3);
blueLadderSection(g,552,height-276,3);
blueLadderSection(g,552,height-288,3);
//Ladder 4 1
blueLadderSection(g,96,height-348,3);
blueLadderSection(g,96,height-360,3);
blueLadderSection(g,96,height-372,3);
blueLadderSection(g,96,height-384,3);
//Ladder 4 2
blueLadderSection(g,216,height-336,3);
blueLadderSection(g,216,height-348,3);
blueLadderSection(g,216,height-360,3);
blueLadderSection(g,216,height-372,3);
blueLadderSection(g,216,height-384,3);
blueLadderSection(g,216,height-396,3);
//Ladder 4 3
blueLadderSection(g,504,height-324,3);
blueLadderSection(g,504,height-336,3);
blueLadderSection(g,504,height-396,3);
blueLadderSection(g,504,height-408,3);
//Ladder 5 1
blueLadderSection(g,264,height-429,3);
blueLadderSection(g,264,height-441,3);
blueLadderSection(g,264,height-453,3);
blueLadderSection(g,264,height-492,3);
//Ladder 5 2
blueLadderSection(g,552,height-444,3);
blueLadderSection(g,552,height-456,3);
blueLadderSection(g,552,height-468,3);
blueLadderSection(g,552,height-480,3);
blueLadderSection(g,552,height-492,3);
//Ladder Pauline
blueLadderSection(g,384,height-528,3);
blueLadderSection(g,384,height-540,3);
blueLadderSection(g,384,height-552,3);
blueLadderSection(g,384,height-564,3);
blueLadderSection(g,384,height-576,3);
//Ladder Donkey Kong
for (int i = 0; i < 13; i++) {
blueLadderSection(g,192,height-528-(i*12),3);
blueLadderSection(g,240,height-528-(i*12),3);
}
}
public void redFloor(Graphics g, int x, int y, int pixelSize) {
int[][][] grid = {{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}};
for(int i = 0; i < grid.length; i++) {
for(int j = 0; j < grid[0].length; j++) {
if(grid[i][j][0]==1) {
g.setColor(new Color(grid[i][j][1],grid[i][j][2],grid[i][j][3]));
g.fillRect(i*pixelSize+x, j*pixelSize+y, pixelSize, pixelSize);
}
}
}
}
public void blueLadderSection(Graphics g, int x, int y, int pixelSize) {
int[][][] grid = {{{1,0,255,255},{1,0,255,255},{1,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255}},{{0,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{1,0,255,255},{1,0,255,255},{1,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255}}};
for(int i = 0; i < grid.length; i++) {
for(int j = 0; j < grid[0].length; j++) {
if(grid[i][j][0]==1) {
g.setColor(new Color(grid[i][j][1],grid[i][j][2],grid[i][j][3]));
g.fillRect(i*pixelSize+x, j*pixelSize+y, pixelSize, pixelSize);
}
}
}
}
}