改进版——使用了双缓冲技术

Posted hyhy904

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了改进版——使用了双缓冲技术相关的知识,希望对你有一定的参考价值。

import java.awt.*;
import java.awt.event.*;
public class DrawTurtle

private int x, y;

public static void main(String[] args)

new DrawTurtle();


public DrawTurtle()

x = 100;
y = 10;
Frame frame = new Frame("DrawTurtle");
DrawLittleTurtle turtle = new DrawLittleTurtle();
frame.add(turtle);
frame.setSize(500, 500);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter()

public void windowClosing(WindowEvent e)

System.exit(0);

);
turtle.requestFocus();
turtle.addKeyListener(new KeyAdapter()

public void keyPressed(KeyEvent e)

if (e.getKeyCode() == KeyEvent.VK_UP)

y -= 10;

if (e.getKeyCode() == KeyEvent.VK_LEFT)

x -= 10;

if (e.getKeyCode() == KeyEvent.VK_RIGHT)

x += 10;

if (e.getKeyCode() == KeyEvent.VK_DOWN)

y += 10;

turtle.repaint();

);


class DrawLittleTurtle extends Canvas

private Image image;

public void paint(Graphics g)

drawBufferedImage();
g.drawImage(image, 0, 0, this);


private void drawBufferedImage()

image = createImage(this.getWidth(), this.getHeight());
Graphics g = image.getGraphics();
g.setColor(Color.YELLOW); // 乌龟四个腿
g.fillOval(x + 0, y + 40, 30, 30);
g.fillOval(x + 90, y + 40, 30, 30);
g.fillOval(x + 0, y + 110, 30, 30);
g.fillOval(x + 90, y + 110, 30, 30);
g.fillOval(x + 50, y + 130, 20, 50); // 乌龟尾巴
g.fillOval(x + 40, y + 0, 40, 70); // 乌龟头
g.setColor(Color.BLACK);
g.fillOval(x + 50, y + 15, 5, 5);
g.fillOval(x + 65, y + 15, 5, 5);
g.setColor(Color.GREEN); // 乌龟壳
g.fillOval(x + 10, y + 30, 100, 120);
g.setColor(Color.BLACK);
g.drawLine(x + 24, y + 50, x + 40, y + 67);
g.drawLine(x + 97, y + 50, x + 80, y + 67);
g.drawLine(x + 24, y + 130, x + 40, y + 113);
g.drawLine(x + 97, y + 130, x + 80, y + 113);
g.drawLine(x + 40, y + 67, x + 80, y + 67);
g.drawLine(x + 40, y + 113, x + 80, y + 113);
g.drawLine(x + 10, y + 90, x + 110, y + 90);
g.drawLine(x + 60, y + 30, x + 60, y + 150);




————————————————

 

以上是关于改进版——使用了双缓冲技术的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm 当窗体控件图片过多时,切换界面的显示会发生闪烁,该怎么取消闪烁。(注:双缓冲开启了)

opengl刷新界面时要怎么阻止windows窗口重绘

Swing中 paint()与paintComponent()的区别

OpenGL中实现双缓冲技术

Linux 帧缓冲图形和 VSync

使用双缓冲技术进行并发读写?