第六天 offScreen
来源:互联网 发布:sqlserver rollback 编辑:程序博客网 时间:2024/06/12 17:15
做图的人对这个应该都不陌生,为了达到加速显示和无闪烁,常用的一种桌面映像。用法有很多,在此不一一介绍。
随手改写了一下backCanvas.java, 将绘制过程从系统的paint过程改到selfPaint中。在按下选中健时,两个不同的绘制过程。
实际应用中,如果使用offScreen,需要对程序更加精确的控制,绘制的技巧也更丰富。但要防止绘制发生的死锁。如果是慢速画面或者画面变化元素不是很多,可以直接用paint
实例代码如下:
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
public class BackCanvas extends GameCanvas {
private Scence scence;
private LayerManager layerManager;
private TiledLayer backLayer;
public Sprite Sore;
private int MainPaint=1;
public BackCanvas(){
super(false);
scence = new Scence();
scence.screenX =0;
scence.screenY =0;
Sore=scence.LoadSprite("Sore");
layerManager = new LayerManager();
Image temp= scence.init();
backLayer = new TiledLayer(1,1,temp,temp.getWidth(),temp.getHeight());
backLayer.setCell(0, 0, 1);
layerManager.append(Sore); //添加顺序决定覆盖。
layerManager.append(backLayer);
}
public void paint(Graphics g){
//this.flushGraphics();
}
public void selfPaint(Graphics g){
scence.painting =true;
try{
layerManager.setViewWindow(scence.screenX, scence.screenY, scence.screenWidth, scence.screenHeight);
layerManager.paint(g, 0, 20);
if (scence.DEBUG)
System.out.println("paint() Executed!");
}catch (Exception e){
System.out.println("绘制过程出现故障");
}finally{
scence.painting =false;
}
MainPaint=MainPaint-1;
}
protected void keyPressed(int keyCode){
SpeakAni ani;
int oldx=scence.screenX;
int oldy=scence.screenY;
try{
if (scence.painting) return;
switch (keyCode) {
case -1:if (scence.screenY>scence.unitHeight) scence.screenY=scence.screenY-scence.unitHeight; break;
case -2:if (scence.screenY<scence.backHeight-scence.screenHeight-scence.unitHeight) scence.screenY=scence.screenY+scence.unitHeight;break;
case -3:if (scence.screenX>scence.unitWidth) scence.screenX=scence.screenX-scence.unitWidth; break;
case -4:if (scence.screenX<scence.backWidth-scence.screenWidth-scence.unitWidth) scence.screenX=scence.screenX+scence.unitWidth;break;
//case -5:{ani= new SpeakAni(this);ani.setPriority(1); ani.start();} //过高的线程优先级会导致线程sleep 也优先执行。
case -5:{Graphics g=getGraphics();
if (MainPaint==1) {
g.setColor(0x00FF00); g.fillRect(0,0,getWidth(), getHeight());
}
else{
g.setColor(0x0000FF); g.fillRect(0,0,getWidth()/2, getHeight()/2);
}
selfPaint(g); this.flushGraphics();
}
}
System.out.println(keyCode);
}catch (Exception e){
System.out.println("捕获不明错误");
scence.screenX=oldx;
scence.screenY=oldy;
}
this.repaint();
if (scence.DEBUG) System.out.println("keyPressed() Executed!");
}
}
- 第六天 offScreen
- offscreen rendering
- Offscreen WebKit Rendering
- Offscreen Rendering and Multisampling With OpenGL
- OffScreen Render (离屏渲染)
- pbuffer vs fbo in egl offscreen rendering
- 第六天
- 第六天
- 第六天
- 第六天
- 第六天
- 第六天
- 第六天
- 第六天
- 第六天
- 第六天
- 第六天
- Android OpenGL ES 离屏渲染(offscreen render)
- Document对象详解
- SAP自动记账
- JavaScript中confirm,alert,prompt的用法
- js 判断 enter 事件
- ASP.NET页面下载程序
- 第六天 offScreen
- ASP.NET中文件上传下载方法集合
- .NET开发十大常用工具软件分享
- ASP.NET如何跨站抓取页面
- oracle中 connect by prior 递归算法
- 如何显示在线人数和所在位置
- xoops 上自建模块的学习
- ASP.NET如何生成图片验证码(简单)
- Oracle数据库的十种重新启动步骤