我是Java的新手。我想做一个游戏。经过大量研究,我不了解缓冲策略的工作原理。.我了解基础知识..它创建了一个屏幕外图像,您以后可以将其放入Windows对象中。
public class Marco extends JFrame {
private static final long serialVersionUID = 1L;
BufferStrategy bs; //create an strategy for multi-buffering.
public Marco() {
basicFunctions(); //just the clasics setSize,setVisible,etc
createBufferStrategy(2);//jframe extends windows so i can call this method
bs = this.getBufferStrategy();//returns the buffer strategy used by this component
}
@Override
public void paint(Graphics g){
g.drawString("My game",20,40);//some string that I don't know why it does not show
//guess is 'couse g2 overwrittes all the frame..
Graphics2D g2=null;//create a child object of Graphics
try{
g2 = (Graphics2D) bs.getDrawGraphics();//this new object g2,will get the
//buffer of this jframe?
drawWhatEver(g2);//whatever I draw in this method will show in jframe,
//but why??
}finally{
g2.dispose();//clean memory,but how? it cleans the buffer after
//being copied to the jframe?? when did I copy to the jframe??
}
bs.show();//I never put anything on bs, so, why do I need to show its content??
//I think it's a reference to g2, but when did I do this reference??
}
private void drawWhatEver(Graphics2D g2){
g2.fillRect(20, 50, 20, 20);//now.. this I can show..
}
}
我不知道..我已经研究了很长时间了..根本没有运气..我不知道..也许所有的东西都在里面,而且它很清楚很简单,我我太愚蠢而看不见..
感谢所有的帮助.. :)
运作方式如下:
JFrame
构造了一个BufferStrategy
当你调用createBufferStrategy(2);
。该BufferStrategy
知道它属于那个特定实例JFrame
。您正在检索它并将其存储在bs
现场。Graphics2D
从中检索一个bs
。该Graphics2D
对象绑定到拥有的内部缓冲区之一bs
。绘制时,所有内容都将进入该缓冲区。bs.show()
,bs
将使您刚才绘制的缓冲区成为的当前缓冲区JFrame
。它知道如何执行此操作,因为(请参阅第1点)它知道该JFrame
服务的目的。这就是所有的事情。
通过注释代码…您应该稍微更改绘图例程。代替这个:
try{
g2 = (Graphics2D) bs.getDrawGraphics();
drawWhatEver(g2);
} finally {
g2.dispose();
}
bs.show();
您应该有一个像这样的循环:
do {
try{
g2 = (Graphics2D) bs.getDrawGraphics();
drawWhatEver(g2);
} finally {
g2.dispose();
}
bs.show();
} while (bs.contentsLost());
这将防止丢失丢失的缓冲帧,根据文档,这种情况可能偶尔发生。
本文向大家介绍详细了解JAVA NIO之Buffer(缓冲区),包括了详细了解JAVA NIO之Buffer(缓冲区)的使用技巧和注意事项,需要的朋友参考一下 当我们需要与 NIO Channel 进行交互时, 我们就需要使用到 NIO Buffer, 即数据从 Buffer读取到 Channel 中, 并且从 Channel 中写入到 Buffer 中。缓冲区本质上是一块可以写入数据,然后可以从
我试图理解netty缓冲区和水印。 作为一个测试用例,我有一个netty服务器,它向客户端写入数据,客户端被阻塞(每次读取之间的睡眠时间基本上为10秒) > 它是否正在写入操作系统或TCP缓冲区,netty通道是否也有内部缓冲区?如果是这样,我如何配置它? 我跟踪bytesBeforeUnWritable,但它们似乎没有减少 代码如下: 使用端到端源代码重新创建的详细步骤: > 具体来说,代理代码
出于性能的考虑,servlet 容器允许(但不要求)缓存输出到客户端的内容。一般的,服务器是默认执行缓存,但应该允许 servlet 来指定缓存参数。 下面是 ServletResponse 接口允许 servlet 来访问和设置缓存信息的方法: getBufferSize setBufferSize isCommitted reset resetBuffer flushBuffer 不管 ser
问题内容: 是缓冲还是无缓冲? 我读到这是的对象,并且是所引用的对象的类型。 而且它们都是Unbuffered的,所以为什么要刷新unbuffered …是否可以刷新unbuffered,我已经读过它们被立即写入。 问题答案: 是“标准”输出。在大多数操作系统上,终端io被缓冲,并且支持分页。 在Javadoc中, “标准”输出流。该流已经打开并且准备接受输出数据。通常,此流对应于主机环境或用户指
这篇文章说默认的溢出策略是缓冲区。 doOnNext内部的subscribe()调用有不同的策略吗?
稳定性: 2 - 稳定的 在 ECMAScript 2015 (ES6) 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。 TypedArray 现已被添加进 ES6 中,Buffer 类以一种更优化、更适合 Node.js 用