//在这里画画......好吧,我在这里'画'什么?

时间:2013-12-14 23:16:24

标签: java

我有这段代码

public void paint(Graphics g) { super.paint(g); // DRAW HERE }

但是,我在那里画的是什么?

我正在用Java制作游戏,这是我的源代码 的 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;

    public void paint(Graphics g) { super.paint(g); } // 1280x720 }

    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;
    }

}

另外,这是我的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;
             }


        }
   }
}
}
}

所以,正如问题所问,我在// DRAW HERE

中加入了什么

谢谢, CMNatic

2 个答案:

答案 0 :(得分:1)

无论你想画什么,例如一个矩形

    super.paintComponent(graphics);
    graphics.setColor(Color.RED);
    graphics.drawRect(0, 5, 100, 100);

以此为例:http://www.java2s.com/Code/JavaAPI/javax.swing/JPanelpaintComponentGraphicsg.htm

答案 1 :(得分:1)

首先看看你的render方法,你看到这三行 -

g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);

我会尝试将它们移动到油漆区 -

public void paint(Graphics g) { 
  super.paint(g);
  g.setColor(Color.BLACK);
  g.fillRect(0, 0, getWidth(), getHeight());
  // Java GUI components implement ImageObserver (_need_ this).
  g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}