错误总结

 

将屏幕信息生成IMAGE显示并实现上下移动:

起初这样写的(错误的):

Graphics save = g;
  if (offImage != null)
   g= offImage.getGraphics();

  g.setColor(128, 128, 0);
  g.fillRoundRect((w - 100) / 2, (h - 60) / 2, 100, 60, 5, 3);
  g.setColor(color);
  g.drawString(test, 0, 0, 0);
  g.drawString(test, 10, h - fontH, 0);
  y += hh;
   save.setColor(0xFFFFFF);
   save.fillRect(0, 0, w, h);
   save.setColor(color);
   save.drawImage(offImage, 0, y, Graphics.TOP | Graphics.LEFT);

 

这样写总实现不了上下移动(也就是改变后的图片未重画到屏幕上),后改为如下(红色部分):

 

 

public class SimpleCanvas extends Canvas implements Runnable {

 int w;//屏幕宽度
 int h;//屏幕高度
 private Image offImage = null, backImage = null;//图片
 Graphics g;//画笔
 int hh, fontH = Font.getDefaultFont().getHeight();//控制变量,及默认字体高度
 int y = 0;//y坐标
 String test = "测试";
 int color;//默认颜色

 /**
  * 构造方法初始化信息
  * */
 public SimpleCanvas() {

  w = getWidth();
  h = getHeight();
  offImage = Image.createImage(w, h);
  backImage = Image.createImage(w, h);
  g = backImage.getGraphics();
  color = g.getColor();
 }

 /**
  * 线程
  * */
 public void run() {
  while (true) {
   tick();
   rander();
   repaint();
   // this.serviceRepaints();//强制重画
   try {
    Thread.sleep(30);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }

 private void tick() {

 }
 
 /**
  *
  * 画方法
  * */

 private void rander() {

  Graphics save = null;
  if (offImage != null)
   save = offImage.getGraphics();

  save.setColor(128, 128, 0);
  save.fillRoundRect((w - 100) / 2, (h - 60) / 2, 100, 60, 5, 3);
  save.setColor(color);
  save.drawString(test, 0, 0, 0);
  save.drawString(test, 10, h - fontH, 0);
  y += hh;
  g.setColor(0xFFFFFF);
  g.fillRect(0, 0, w, h);
  g.setColor(color);
  g.drawImage(offImage, 0, y, Graphics.TOP | Graphics.LEFT);

 }

 /**
  *
  * 释放
  * */
 protected void keyReleased(int keyCode) {
  super.keyReleased(keyCode);
  if (keyCode == -4) {
   hh = 0;
  }
  if (keyCode == -3) {
   hh = 0;
  }
  if (keyCode == -1) {
   hh = 0;
  }
  if (keyCode == -2) {
   hh = 0;
  }
  if (keyCode == -5) {
  }

 }
 /**
  *
  * 按下
  * */
 protected void keyPressed(int keyCode) {
  if (keyCode == -1 && (y + h - fontH) > 0) {
   hh -= 10;
  } else if (keyCode == -2 && y < (h - fontH * 2)) {
   hh += 10;
  } else if (keyCode == -3) {

  } else if (keyCode == -4) {

  } else if (keyCode == -5) {

  }
 }

 protected void keyRepeated(int keyCode) {
  super.keyRepeated(keyCode);

 }

 protected void paint(Graphics gg) {
  gg.drawImage(backImage, 0, 0, 0);
 }

 

总结:

   加红地方注意画笔使用,每张图片的画笔不能混乱.为什么会第一次不能实现,我觉得是主画笔变为了offImage的画笔了,在之前即使赋给save,save是个局部变量也不能画出整个画面。  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值