Pixel应该呈现,但事实并非如此

时间:2013-12-14 21:22:04

标签: java

希望你能帮助我。

我参与了Ludum Dare 28,我遇到了一个问题,我在屏幕上渲染像素,他们应该出现但是他们不是?

我是新手,我不明白编码插入,所以我希望你介意我送你一个gyazo linkg(屏幕截图)

我有我的代码,它应该是渲染像素,如前所述。但事实并非如此。

(希望我的代码工作正常*)我也没有错误出现在eclipse中

Screen.java

       package com.cmnatic.cmnatic.graphics;

    public class Screen {

        private int width, height;
        public int[] pixels;

        int xtime = 0, ytime = 50;
        int counter = 0;

        public Screen(int width, int height) {
            this.width = width;
            this.height = height;
            pixels = new int[width * height]; // 0 - 50,399 = 50,400
        }

        public void clear() {
            for (int i = 0; i < pixels.length; i++) {
                pixels[i] = 0;
            }
        }

        public void render()  {
            counter++;
            if (counter % 100 == 0) {
                xtime++;
            if (counter % 100 == 0) {
                ytime++;

            for (int y = 0; y < height; y++)  {
                if (ytime >= height) break;
                 for (int x = 0; x < width; x++)  { 
                     if (xtime >= width) break;
                     pixels[xtime + ytime * width] = 0xff00ff;
                 }

            }
       }
    }
    }
    }

                          Game.java



   package com.cmnatic.cmnatic;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;

import javax.swing.JFrame;

import com.cmnatic.cmnatic.graphics.Screen;

public class Game extends Canvas implements Runnable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final Screen Screen = null;
    public static int width = 300;
    public static int height = width / 16 * 9;  // 168
    public static int scale = 3;

    private Thread thread;
    private JFrame frame;
    private boolean running = false;

    private Screen screen;

    private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();

    public Game() {
        Dimension size = new Dimension(width * scale, height * scale);
        setPreferredSize(size);

        screen =  new Screen(width, height);

        frame = new JFrame();
   }

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

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

    public void run() {
        while (running == true) {
            update();
            render();
        }
    }

    public void update() {

    }

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

        screen.clear();

        screen.render();

        for (int i = 0; i < pixels.length; i++) {
            pixels[i] = screen.pixels[i];
        }

        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
        g.dispose();
        bs.show();
    }

    public static void main(String[] args) {
        Game game = new Game();
        game.frame.setResizable(false);
        game.frame.setTitle("The Last Hit");
        game.frame.add(game);
        game.frame.pack();
        game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        game.frame.setLocationRelativeTo(null);
        game.frame.setVisible(true);

        game.start();
    }

    public static Screen getScreen() {
        return Screen;
    }

}

1 个答案:

答案 0 :(得分:0)

阅读this javadoc。具体来说,这句话:必须覆盖paint方法才能在画布上执行自定义图形。

然后在Game类(类型为Canvas)中覆盖(例如实现)绘制。而且我认为应该开始展示一些东西。

// That is, something like this - 
public void paint(Graphics g) {
    super.paint(g);
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}