JPanelに問題があります。コンストラクタの末尾にある の部分を塗り直してからアニメーション(1つのスプライトが の画面上を移動しています)が表示されますが、アニメーションでスプライトが になるまでJPanelはペイントしません。画面上のポイント。私は下の 私のコードを貼り付けた。以前はカスタムグラフィックスのためにJPanelを使ったことはありません。 私は何が間違っていますか?JavaのJPanelで何が起こっていますか?私は間違って何をしていますか?
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
import javax.swing.*;
class Battle extends JPanel implements KeyListener {
AllyParty ap;
boolean showMenu = false;
BufferedImage image;
EnemyParty ep;
Graphics screen;
Image allyPic[], enemyPic[];
int enemyCount;
int mtCount = 0;
int turn[];
MediaTracker mt;
Random rand;
public Battle(AllyParty allyparty) {
/*Initial JPanel subclass setup*/
setSize(800, 600);
setBackground(Color.black);
/*Create our ally party*/
ap = new AllyParty();
ap = allyparty;
ap.setCallingObject(this);
/*Create randomizer and random number variable*/
long seed = System.currentTimeMillis();
rand = new Random(seed);
/*Use rand to select a number of enemies*/
enemyCount = rand.nextInt(12) + 1;
enemyCount = 12; //TEMP
ep = new EnemyParty(enemyCount);
/*Create the individual enemies in ep and place them*/
for (int i = 0; i < enemyCount; i++) {
ep.enemy[i] = new Enemy(1);
}
ep.setCallingObject(this);
/*Initialize images and set them to their starting values*/
allyPic = new Image[4];
enemyPic = new Image[enemyCount];
/* for (int i = 0; i < 4; i++)
{
ap.ally[i].setCurrentImage(Ally.STAND)
allyPic[i] = ap.ally[i].getCurrentImage();
}
for (int i = 0; i < enemyCount; i++)
{
enemyPic[i] = ep.enemy[i].getImage();
*/
/*Set battle placement*/
ap.setPos(0);
ep.setPos(0);
//Create the Buffered Image
image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
//Set up the Media Tracker
mt = new MediaTracker(this);
for (int i = 0; i < 4; i++) {
mt.addImage(allyPic[i], mtCount++);
}
for (int i = 0; i < ep.getEnemyCount(); i++) {
mt.addImage(enemyPic[i], mtCount++);
}
mt.addImage(image, mtCount++);
try {
mt.waitForAll();
} catch (Exception e) {
}
/*Temporary Section*/
findTurns();
repaint();
// ap.ally[0].advance();
advance();
}
public void findTurns() {
int total = ep.getEnemyCount() + 4; //Enemies + allies
int used[] = new int[total];
turn = new int[total];
int next = rand.nextInt(total);
for (int j = 0; j < total; j++) {
used[j] = -1;
}
for (int j = 0; j < total; j++) {
for (int k = 0; k < j; k++) {
if (used[k] == next) {
k = -1;
next = rand.nextInt(total);
}
}
turn[j] = next;
used[j] = next;
}
}
public void advance() {
while (ap.ally[0].getXPos() > 350) {
ap.ally[0].moveLeft(20);
ap.ally[0].setCurrentImage(Ally.WALK);
repaint();
try {
Thread.sleep(200);
} catch (Exception e) {
}
ap.ally[0].setCurrentImage(Ally.STAND);
repaint();
try {
Thread.sleep(200);
} catch (Exception e) {
}
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
screen = image.getGraphics();
for (int i = 0; i < 4; i++) {
allyPic[i] = ap.ally[i].getCurrentImage();
}
for (int i = 0; i < ep.getEnemyCount(); i++) {
enemyPic[i] = ep.enemy[i].getCurrentImage();
}
for (int i = 0; i < 4; i++) {
screen.drawImage(allyPic[i], ap.ally[i].getXPos(),
ap.ally[i].getYPos(), this);
}
for (int i = 0; i < enemyCount; i++) {
screen.drawImage(enemyPic[i], ep.enemy[i].getXPos(),
ep.enemy[i].getYPos(), 100, 75, this);
}
g.drawImage(image, 0, 0, this);
}
public void keyPressed(KeyEvent k) {}
public void keyReleased(KeyEvent k) {}
public void keyTyped(KeyEvent k) {}
}