Java游戏,颜色don';塔佩尔

Java游戏,颜色don';塔佩尔,java,colors,fill,2d-games,Java,Colors,Fill,2d Games,我有一个叫做Wave的游戏的代码,通常当我运行它时,它应该是一个带有白色方块的黑色窗口。但是窗户是白色的,在窗户的左边有一条很细的黑色条纹。我几乎看不见 有人知道为什么会这样吗 package wave.myFirstGame; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferStrategy; import java.util.Random

我有一个叫做Wave的游戏的代码,通常当我运行它时,它应该是一个带有白色方块的黑色窗口。但是窗户是白色的,在窗户的左边有一条很细的黑色条纹。我几乎看不见

有人知道为什么会这样吗

package wave.myFirstGame;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.util.Random;

public class Game extends Canvas implements Runnable {
    private static final long serialVersionUID = 3580879553502102315L;
    public static final int WITDH = 640, HEIGHT = WITDH / 12 * 9;

    private Thread thread;
    private boolean running = false;

    private Random r;
    public Handler handler;

    public Game() {
        new Window(WITDH, HEIGHT, "Wave", this);

        handler = new Handler();
        r = new Random();

        for(int i = 0; i < 50; i++){
            handler.addObject(new Player(r.nextInt(WIDTH), r.nextInt(HEIGHT), ID.Player));
        }

        handler.addObject(new Player(200, 200, ID.Player));
    }

    public synchronized void start() {// initializing the thread
        thread = new Thread(this);
        thread.start();
        running = true;
    }

    public synchronized void stop() {
        try {
            thread.join();
            running = false;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // GAME LOOP
    public void run() {
        long lastTime = System.nanoTime();
        double amountOfTicks = 60.0;
        double ns = 1000000000 / amountOfTicks;
        double delta = 0;
        long timer = System.currentTimeMillis();
        int frames = 0;
        while (running) {
            long now = System.nanoTime();
            delta += (now - lastTime) / ns;
            lastTime = now;
            while (delta >= 1) {
                tick();
                delta--;
            }
            if (running)
                render();
            frames++;

            if (System.currentTimeMillis() - timer > 1000) {
                timer += 1000;
                System.out.println("FPS " + frames);
                frames = 0;
            }
        }
        stop();
    }

    private void tick(){
        handler.tick();
    }
    private void render(){
        BufferStrategy bs = this.getBufferStrategy();
        if(bs == null){
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.black);

        g.fillRect(0, 0, WIDTH, HEIGHT);
        handler.render(g);

        g.dispose();
        bs.show();
    }

    public static void main(String[] args) {
        new Game();
    }
}
package wave.myFirstGame;
导入java.awt.Canvas;
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.image.BufferStrategy;
导入java.util.Random;
公共类游戏扩展画布实现可运行{
私有静态最终长serialVersionUID=3580879553502102315L;
公共静态最终int WITDH=640,高度=WITDH/12*9;
私有线程;
私有布尔运行=false;
私有随机r;
公共经办人;
公共游戏(){
新窗口(WITDH,高度,“波浪”,本);
handler=新的handler();
r=新随机数();
对于(int i=0;i<50;i++){
handler.addObject(新播放器(r.nextInt(宽度)、r.nextInt(高度)、ID.Player));
}
addObject(新玩家(200200,ID.Player));
}
public synchronized void start(){//初始化线程
线程=新线程(此);
thread.start();
运行=真;
}
公共同步无效停止(){
试一试{
thread.join();
运行=错误;
}捕获(例外e){
e、 printStackTrace();
}
}
//游戏循环
公开募捐{
long lastTime=System.nanoTime();
双amountOfTicks=60.0;
双ns=1000000000/个;
双增量=0;
长定时器=System.currentTimeMillis();
int帧=0;
(跑步时){
long now=System.nanoTime();
增量+=(现在-上次)/ns;
上次=现在;
而(增量>=1){
勾选();
三角洲--;
}
如果(正在运行)
render();
frames++;
if(System.currentTimeMillis()-计时器>1000){
定时器+=1000;
系统输出打印项次(“FPS”+帧);
帧=0;
}
}
停止();
}
私人空白勾号(){
handler.tick();
}
私有void render(){
BufferStrategy bs=this.getBufferStrategy();
如果(bs==null){
这一战略(3);
返回;
}
Graphics g=bs.getDrawGraphics();
g、 设置颜色(颜色为黑色);
g、 fillRect(0,0,宽度,高度);
handler.render(g);
g、 处置();
b.show();
}
公共静态void main(字符串[]args){
新游戏();
}
}

查看的API。在那里你会发现:

从接口java.awt.image.ImageObserver继承的字段
[…]高、[…]宽

因此,既然您从
Canvas
类扩展了类,那么您已经有了宽度和高度常量,并且由于某些原因,宽度接缝的值
1


因此,只需重命名常量,它就会按预期显示。

查看的API。在那里你会发现:

从接口java.awt.image.ImageObserver继承的字段
[…]高、[…]宽

因此,既然您从
Canvas
类扩展了类,那么您已经有了宽度和高度常量,并且由于某些原因,宽度接缝的值
1


因此,只需重命名常量,它就会按预期显示。

谢谢您的帮助,我仍然不明白,我添加了Window类,我想您的Window类没有问题。您是否重命名了游戏类中的宽度和高度值以及对它们的所有引用?你检查过它们的值是否正确吗?重命名它们,意思是小写字母的宽度和高度,或者其他名称?哦,是的,你是对的,我错过了一个参考,现在它可以工作了。非常感谢你!没问题。不要忘记它是否有用。谢谢你的帮助,我还是不明白,我添加了Window类,我想你的Window类没有问题。您是否重命名了游戏类中的宽度和高度值以及对它们的所有引用?你检查过它们的值是否正确吗?重命名它们,意思是小写字母的宽度和高度,或者其他名称?哦,是的,你是对的,我错过了一个参考,现在它可以工作了。非常感谢你!没问题。如果有用的话,别忘了告诉我。