快速业务通道

Merlin的魔力: 练习完全控制图形显示 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
rame.createBufferStrategy(2); // Number of buffers to have   BufferStrategy bufferStrategy = frame.getBufferStrategy();   while (!done()) { // Some condition to end    Graphics g = null;    try {     g = bufferStrategy.getDrawGraphics();     drawNextScene(g); // Method to draw to    } finally {     // Free resources     if (g != null) {      g.dispose();     }    }    bufferStrategy.show();   }

使用 BufferStrategy 时,您不能假设绘制到缓冲区的最后一项仍有效;必须使用 contentsLost() 方法进行询问。如果丢失该项,则必须重新绘制整个缓冲区。否则,您只需绘制最后一次使用后发生的更改的项。

除了 BufferStrategy 的缓冲区支持外, BufferCapabilities 类允许您使用 getCapabilities() 方法来发现某个策略支持哪些能力,如全屏幕方式。

Merlin的魔力: 练习完全控制图形显示(4)

时间:2011-02-02 IBM John Zukowski

工作示例

将所有代码段放在一起可产生清单 7 中的示例程序。由于我的美术技能有限,所以不要指望有什么复杂的花样。然而,您将发现一个使用 BufferStrategy 和全屏幕绘制方式的完整工作示例。示例程序通过记住什么东西没有绘制到当前缓冲区来有意 不让缓冲区同步 ― 以便让您更清楚地了解同时工作的多个缓冲区。程序的确随意地将 100 个矩形绘制到屏幕,两次绘制之间有 1/10 秒的延迟。

清单 7. 工作示例

import java.awt.*; import java.awt.image.*; import javax.swing.*; import java.util.Random; public class MultipleBuffers {   public static void main(String args[]) {    GraphicsEnvironment graphicsEnvironment =     GraphicsEnvironment.getLocalGraphicsEnvironment();    GraphicsDevice graphicsDevice =     graphicsEnvironment.getDefaultScreenDevice();    DisplayMode displayModes[] = graphicsDevice.getDisplayModes();    DisplayMode originalDisplayMode = graphicsDevice.getDisplayMode();    JFrame frame = new JFrame();    frame.setUndecorated(true);    frame.setIgnoreRepaint(true);    try {     if (graphicsDevice.isFullScreenSupported()) {      graphicsDevice.setFullScreenWindow(frame);     }     Random random = new Random();     int mode = random.nextInt(displayModes.length);     DisplayMode displayMode = displayModes[mode];     System.out.println(displayMode.getWidth() + "x" +      displayMode.getHeight() + " \t" + displayMode.getRefreshRate() +      " / " + displayMode.getBitDepth());     if (graphicsDevice.isDisplayChangeSupported()) {      graphicsDevice.setDisplayMode(displayMode);     }     frame.createBufferStrategy(2);     BufferStrategy bufferStrategy = frame.getBufferStrategy();     int width = frame.getWidth();     int height = frame.getHeight();     for (int i=0; i<100; i++) {      Graphics g = bufferStrategy.getDrawGraphics();      g.setColor(new Color(random.nextInt()));    g.fillRect(random.nextInt(width),      random.nextInt(height), 100, 100);      bufferStrategy.show();      g.dispose();      Thread.sleep(100);     }    } catch (InterruptedException e) {    } finally {     graphicsDevice.setDisplay

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号