首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏小程序在2D游戏中不运行(同时循环)

游戏小程序在2D游戏中不运行(同时循环)
EN

Stack Overflow用户
提问于 2015-04-27 02:04:16
回答 1查看 114关注 0票数 0

我正试图为我想要创建的游戏设定尺寸。这个错误发生在while(running);,我检查了一个小时,但我似乎没能捕捉到错误。我使用的是NetbeansIDE也是setPreserredSize (新维度(宽度、高度));给了我一个错误,它要求创建一个方法“

代码语言:javascript
复制
 private void setPreserredSize(Dimension dimension) {
 throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
 }

当我运行它时,我会得到这个错误。

代码语言:javascript
复制
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - illegal start of type
at com.francescstudio.game.Game.<init>(Game.java:67)
at com.francescstudio.game.Start.main(Start.java:16)
Java Result: 1

这是所有的代码

代码语言:javascript
复制
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.image.BufferedImage;

    import javax.swing.JPanel;

    /**
     *
     * @author francesc
     */

    public class Game extends JPanel implements KeyListener, Runnable {

    public static final long SerialVersionUID = 1L;
    public static final int WIDTH = 400;
    public static final int HEIGHT = 630;
    public static final Font main = new Font("Bebas Nue Regular", Font.PLAIN, 28);
    private Thread game;
    private boolean running;
    private BufferedImage Image  = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

    private long startTime;
    private long elapse;
    private boolean set;

    public Game() {
        setFocusable(true);
        setPreserredSize (new Dimension(WIDTH, HEIGHT)); 
         addKeyListener(this);
    }

    private void update() {
    }

    private void render() {
        Graphics2D g = (Graphics2D) Image.getGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        // render board 
        g.dispose();

        Graphics2D g2d = (Graphics2D) getGraphics();
        g2d.drawImage(Image, 0, 0, null);
        g2d.dispose();

    }

    @Override
    public void run() {
    }
    int fps = 0, update = 0;
    long fpsTimer = System.currentTimeMillis();
    double nsPerUpdate = 1000000000.0 / 60;
    // last update time in nano seconds   
    double then = System.nanoTime();
    double unprocessed = 0;

    while (running){

    boolean shouldRender = false;
        double now = System.nanoTime();
        unprocessed += (now - then) / nsPerUpdate;
        then = now;


        // update queque 
        while (unprocessed >= 1) {
            update++;
            update();
            unprocessed--;
            shouldRender = true;
        }

        // render 
        if (shouldRender) {
            fps++;
            render();
            shouldRender = false;
        } else {
            try {
                Thread.sleep(1);
            } catch (Exception e) {
                e.printStackTrace();

            }
        }
    }

    public synchronized start(){ 
        if(running)return; 
        running = true; 
        game = new Thread (this, "game");
        game.start();

    }


     public synchronized stop (){ 
        if(!running) return; 
        running = false; 
        System.exit(0);
    }

    @Override
        public void keyTyped(KeyEvent e) {

    }

    @Override
        public void keyPressed(KeyEvent e) {

    }

    @Override
        public void keyReleased(KeyEvent e) {

    }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-27 02:08:06

您的问题是,while (running) {}不在方法中,而是在永远不会被调用的类中定义的。

编辑:您的代码应该看起来更像这样

代码语言:javascript
复制
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;

/**
 *
 * @author francesc
 */

public class Game extends JPanel implements KeyListener, Runnable {
    public static final long SerialVersionUID = 1L;
    public static final int WIDTH = 400;
    public static final int HEIGHT = 630;
    public static final Font main = new Font("Bebas Nue Regular", Font.PLAIN, 28);
    private Thread game;
    private boolean running;
    private BufferedImage Image  = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

    private long startTime;
    private long elapse;
    private boolean set;

    public Game() {
        setFocusable(true);
        setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
        addKeyListener(this);
    }
    private void update() {}
    private void render() {
        Graphics2D g = (Graphics2D) Image.getGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        // render board 
        g.dispose();

        Graphics2D g2d = (Graphics2D) getGraphics();
        g2d.drawImage(Image, 0, 0, null);
        g2d.dispose();

    }
    @Override
    public void run() {
        int fps = 0, update = 0;
        long fpsTimer = System.currentTimeMillis();
        double nsPerUpdate = 1000000000.0 / 60;
        // last update time in nano seconds   
        double then = System.nanoTime();
        double unprocessed = 0;

        while (running) {

            boolean shouldRender = false;
            double now = System.nanoTime();
            unprocessed += (now - then) / nsPerUpdate;
            then = now;

            // update queque 
            while (unprocessed >= 1) {
                update++;
                update();
                unprocessed--;
                shouldRender = true;
            }
            // render 
            if (shouldRender) {
                fps++;
                render();
                shouldRender = false;
            } else {
                try {
                    Thread.sleep(1);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public synchronized start(){ 
        if(running)return; 
        running = true; 
        game = new Thread (this, "game");
        game.start();

    }
    public synchronized stop (){ 
        if(!running) return; 
        running = false; 
        System.exit(0);
    }
    @Override
        public void keyTyped(KeyEvent e) {
    }
    @Override
        public void keyPressed(KeyEvent e) {
    }
    @Override
        public void keyReleased(KeyEvent e) {
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29886026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档