2015-07-11 60 views
0

我正在进入java的游戏开发,我已经看过关于它的视频,到目前为止我已经看到了两种渲染方式:呈现java的最佳方式?

1-创建一个缓冲图像,每帧更改像素个体,然后绘制图像(例如,通过将图像的像素更改为一种颜色来绘制矩形)

2 - 不是改变像素,而是使用图形方法绘制其他东西,然后每帧清理画布(例如绘制一个矩形只是使用graphics.drawRect(...)

那么,什么是最好的方法,什么是每种方法的利弊?因为第二种方法似乎方式更轻松。

+1

你在第二方法使用的方法做的第一。 –

+0

另外,我会建议使用现有的渲染器。 [JavaFX能够渲染3D场景](http://docs.oracle.com/javase/8/javafx/graphics-tutorial/javafx-3d-graphics.htm)。如果你真的在编写你自己的渲染器,我建议你开始编写C/C++代码,看看如何OpenGL做的东西。 – Turing85

+0

Java不是最好的图形imo,但可能你已经知道了。也许你也可以看一本关于Java游戏编程的书http://www.amazon.co.uk/Killer-Game-Programming-Java-Book/dp/0596007302/ –

回答

0

软件渲染仍然是一种选择。

如果使用Frame实现Runnable,则将paint()和repaint()声明为{}并在run()内的循环中执行绘图的速度会更快。

例如...

private static MemoryImageSource imgSrc; 
private static DirectColorModel imgCm = new DirectColorModel(32,0xff0000,0xff00,0xff); 
private static Image    img; 
private static int    xsize = 256; 
private static int    ysize = 256; 
private static int    pixels[]; 
private static int    appLeft = 0; 
private static int    appTop = 0; 

private static void init() { // initialize 
    imgSrc = new MemoryImageSource(xsize, ysize, pixels, 0, xsize); 
    img = createImage(imgSrc); 
    imgSrc.setAnimated(true); 
    imgSrc.newPixels(pixels, imgCm, 0, xsize); 
    appLeft = getInsets().left; 
    appTop = getInsets().top; 
} 

public void run() { 
    Graphics g; 
    for(;;) { 
    // .... render something here 
    // then... 
    g = getGraphics(); 
    imgSrc.newPixels();    // NOTE: renders array to image 
    g.drawImage(scr, appLeft, appTop, this); 
    g.dispose(); 
    } 
} 
相关问题