まず、絶対ポジショニングはGUIには理想的ではないことを知っています...しかし、4種類のウィンドウと1つのゲームウィンドウ、すべてがランナーを内蔵しています。私はこれを行うには1日半を持っていました。学生のスケジュール(特に、GUIの作成やJOptionPaneの禁止についての事前の経験がないもの)で、私は速くて面倒でした。それでここに問題があります。アブソリュートポジショニングを使用したRamshackle GUIは画像をランダムに回転させます。
GUIを実行すると、すべてが計画どおりに動作します。しかし、約1/4のゲームでは、ランダムなイメージが逆さまに反転されます。常に同じイメージではなく、毎回発生しません。私はイメージを表示しているが、直接JFrameにペイントしている(パネルなし、その悪いプログラミングを知っている)。あなたが提供するすべてのおかげで本当にこのようなオンラインを見つけることはできませんでした。私が見つけた最高のアドバイスは、同じイメージが常に逆さまになっているときですが、そうではありません。 コード:
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class game extends JFrame implements Runnable {
private boolean running = false;
private Image dbImage = null;
private Dimension screenSize;
private int width;
private int height;
private int screenIndex = 0;
private BufferedImage img = null;
private dialog d = new dialog();
private boolean a = false;
private Room1 room1 = new Room1();
private Room2 room2 = new Room2();
private Room3 room3 = new Room3();
private Room4 room4 = new Room4();
private Room5 room5 = new Room5();
private Room6 room6 = new Room6();
private Toilet toilet = new Toilet();
private final boolean UNLOCK = true;
public game()
{
super("Game");
setExtendedState(JFrame.MAXIMIZED_BOTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
setIconImage(new ImageIcon("pencil-icon.png").getImage());
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
width = (int)screenSize.getWidth();
height = (int)screenSize.getHeight();
(new Thread(this)).start();
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
switch (screenIndex) {
case 0:
img = null;
try {
img = ImageIO.read(new File("map.png"));
} catch (IOException e) {
}
break;
case 1:
img = null;
try {
img = ImageIO.read(new File("IMG_6009.JPG"));
} catch (IOException e) {
}
break;
case 2:
img = null;
try{
img = ImageIO.read(new File("IMG_6010.JPG"));
}
catch (IOException e) {}
break;
case 3:
img = null;
try {
img = ImageIO.read(new File("IMG_6011.jpg"));
} catch (IOException e) {
}
break;
case 4:
img = null;
try {
img = ImageIO.read(new File("IMG_6013.jpg"));
} catch (IOException e) {
}
break;
case 5:
img = null;
try {
img = ImageIO.read(new File("IMG_5994.jpg"));
} catch (IOException e) {
}
break;
case 6:
img = null;
try {
img = ImageIO.read(new File("IMG_5992.jpg"));
} catch (IOException e) {
}
break;
case 7:
img = null;
try {
img = ImageIO.read(new File("IMG_5991.jpg"));
} catch (IOException e) {
}
break;
}
g.drawImage(img, 0, 0, width, height, null);
}
public static void main(String[] args) {
new game();
}
public void run() {
running = true;
while(running) {
repaint();
process();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public int isScreenIndex() {
return screenIndex;
}
//SI 1 and 2 are working
public void setScreenIndex(int s) {
this.screenIndex = s;
}
public void process() {
if (screenIndex==0)
{
try{
Thread.sleep(2000);
}
catch (Exception e){}
int a = -1;
a = d.map();
while (a==-1){
try {
Thread.sleep(200);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
if (a==1 && ((room5.isDone() && !room1.isDone()) || UNLOCK)){
setScreenIndex(1);
return;
}
if (a==2 && (!room2.isDone() || UNLOCK)){
setScreenIndex(2);
return;
}
if (a==3 && (!room3.isDone() || UNLOCK)){
setScreenIndex(3);
return;
}
if (a == 4 && ((!room4.isDone() && room3.isDone())||UNLOCK)){
setScreenIndex(4);
return;
}
if (a == 5 && ((room4.isDone() && room6.isDone() && !room5.isDone())||UNLOCK)){
setScreenIndex(5);
return;
}
if (a == 6 && ((room2.isDone() && !room6.isDone())||UNLOCK)){
setScreenIndex(6);
return;
}
if (a == 7){
d.showString("Progress",room1.getRoomName() + "\t\t" + room1.getScore() + "\n" +
room2.getRoomName() + "\t\t" + room2.getScore() + "\n" +
room3.getRoomName() + "\t\t" + room3.getScore() + "\n" +
room4.getRoomName() + "\t\t" + room4.getScore() + "\n" +
room5.getRoomName() + "\t\t" + room5.getScore() + "\n" +
room6.getRoomName() + "\t\t" + room6.getScore());
}
if (a == 8 && (!toilet.isDone() || UNLOCK)){
setScreenIndex(7);
return;
}
}
if (screenIndex == 1){
room1.play();
setScreenIndex(0);
return;
}
if (screenIndex == 2){
room2.play();
setScreenIndex(0);
return;
}
if (screenIndex==3){
//boolean a = false;
room3.play();
//while(!a){
// try {
// Thread.sleep(200);
// } catch(InterruptedException e) {
// }
//}
setScreenIndex(0);
return;
}
if (screenIndex==4){
room4.play();
setScreenIndex(0);
return;
}
if (screenIndex == 5){
room5.play();
setScreenIndex(0);
return;
}
if (screenIndex == 6){
room6.play();
setScreenIndex(0);
return;
}
if (screenIndex == 7){
toilet.play();
setScreenIndex(0);
return;
}
}
}
の線に沿って何か '' "私は...私のコードを投稿することが有用であるとは思わない" - 真剣に?そして、あなたのプログラムがどうしておかしなことをしているのかを推測する必要があります。 [mcve]を参照してください。 –
そして、あなたは間違っていることは間違いありません。あなたはそれが悪いことを知っているので、それを修正してみませんか?はい、JFrameに直接描画しないでください。そうしないでください。 –
まあ、評判を失う良い方法を見つけました...主な理由は、これは私がいくつかのファイル、約9の他のクラス、そしてその200行をそのまま呼び出しているからです。すぐに投稿します。私は悪いプログラミングが続いていると認識していますが、プロジェクトはこのエラーのほかに働いています。私はクラス内の他の14人の学生がこのコードを処理しています。バグ修正など、この時点での変更はごくわずかです。 –