为什么我的日食不设置我的背景颜色

为什么我的日食不设置我的背景颜色

本文介绍了为什么我的日食不设置我的背景颜色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为游戏设计了代码.问题是背景不会更改为我从图形颜色库中选择的任何选定颜色.

I have designed a code for a game. The problem is that the background won't change to any of my selected colors I have picked from graphics color library.

我需要有人用我提供的代码弄清楚这一点(请不要编写一个全新的代码). idk为什么java/eclipse无法显示它???我错过了什么吗?此处的程序应显示背景颜色为蓝色的GUI.相反,我变白了.

I need someone to figure this out with the code i have provided (please don't make a whole new code). idk why java/ eclipse won't display it??? am i missing something?? The program here should display a GUI with a background color blue. instead i get white.

public class MainApp extends Canvas implements Runnable {

    private static final long serialVersionUID = 8928635543572788908L;

    private static final int WIDTH= 648, HEIGHT= WIDTH/ 12 * 9;
    private Thread thread;
    private boolean running= false;

    public MainApp()
    {
        new Window(WIDTH, HEIGHT, "App", this);
    }
    public synchronized void start()
    {
        thread= new Thread(this);
        thread.start();
        running= true;
    }
    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.print("FPS: " + frames);
                frames= 0;
            }
        }
        stop();
    }

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

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

        Graphics g= bs.getDrawGraphics();
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.dispose();
        bs.show();
    }
    public static void main(String[] args) {
        new MainApp();
    }
}

推荐答案

您的代码有些混乱,您不应该在MainApp中创建Window的新实例,而Window应该在创建它(恕我直言).

Your codes a little messed up, you shouldn't be making a new instance of Window from MainApp, the Window should be creating it (IMHO).

此外,您应该覆盖MainAppgetPreferredSize方法,因为这应该控制窗口的可见大小,这样,当您在JFrame上使用pack时,它将确保窗口大于其内容的preferredSize,从而使装饰框可以包裹在其外部.

Also, you should be overriding the getPreferredSize method the the MainApp, as this is what should be controlling the viewable size of the window, this way, when you use pack on the JFrame, it will ensure that the window is larger then the preferredSize of it's contents, allowing the frame decorations to wrap around the outside of it.

但是,您遇到的主要问题是,在已经显示了MainAppJFrame之后,将其添加到JFrame

BUT, the main problem you have, is adding the MainApp to the JFrame AFTER it's already been made visible

以下对我有用...

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;

public class MainApp extends Canvas implements Runnable {

    private static final long serialVersionUID = 8928635543572788908L;

    private static final int WIDTH = 648, HEIGHT = WIDTH / 12 * 9;
    private Thread thread;
    private boolean running = false;

    public MainApp() {
        new Window("App", this);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(WIDTH, HEIGHT);
    }

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

    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.print("FPS: " + frames);
                frames = 0;
            }
        }
        stop();
    }

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

    public void tick() {

    }

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

        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.dispose();
        bs.show();
    }

    public static void main(String[] args) {
        new MainApp();
    }

    public static class Window {

        private Window(String title, MainApp app) {
            JFrame frame = new JFrame(title);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(app);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
            app.start();
        }

    }

}

这篇关于为什么我的日食不设置我的背景颜色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 11:49