如何阻止我的物体褪色? [英] How Do I Stop The Flikering Of My Objects?

查看:54
本文介绍了如何阻止我的物体褪色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经尝试更新我的绘画功能但它似乎不起作用



i've tried updating my paint function but it doesn't seem to work

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.ImageObserver;
public class NewJApplet extends javax.swing.JApplet {
    int xW=30;
    int yW=340;
    int yW1=420;
    int xR=xW+70;
    int yR=yW;
    int yR1=yW1;
    int[] xwz = {xW ,xW , xW+70};
    int [] ywz={yW, yW+70, yW+70};
    int []ywz1={yW1,yW1+70,yW1+70};
    int []xrz = {xR, xR, xR - 70};
    int[] yrz = {yR+70, yR, yR};
    int []yrz1= {yR1+70,yR1,yR1};
    public Image offscreen;
    public Graphics h;
  private Rectangle2D.Float myRect = new Rectangle2D.Float(30, 20, 70, 70);
  private Rectangle2D.Float myRect1 = new Rectangle2D.Float(30, 100, 70, 70);
  private Rectangle2D.Float myRect2 = new Rectangle2D.Float(30, 180, 70, 70);
  private Rectangle2D.Float myRect3 = new Rectangle2D.Float(30, 260, 70, 70);
  private Polygon PW= new Polygon(xwz, ywz, 3);
  private Polygon PR= new Polygon(xrz,yrz,3);
  private Polygon PW1=new Polygon(xwz,ywz1,3);
    private Polygon PR1=new Polygon(xrz,yrz1,3);
  MovingAdapter ma = new MovingAdapter();
    public NewJApplet() {
        addMouseMotionListener(ma);
        addMouseListener(ma);
        addMouseWheelListener(new ScaleHandler());
  }
  class MovingAdapter extends MouseAdapter {
    private int x;
    private int y;
    public void mousePressed(MouseEvent e) {
      x = e.getX();
      y = e.getY();
    }
    public void mouseDragged(MouseEvent e) {
      int dx = e.getX() - x;
      int dy = e.getY() - y;
      repaint();
      if (myRect.getBounds2D().contains(x, y) ) {
            myRect.x += dx;
            myRect.y += dy;
            repaint();
      }
                if(myRect1.getBounds2D().contains(x, y))
                {
                    myRect1.x+=dx;
                    myRect1.y+=dy;
                    repaint();
                }
                if(myRect2.getBounds2D().contains(x, y))
                {
                    myRect2.x+=dx;
                    myRect2.y+=dy;
                    repaint();
                }
                if(myRect3.getBounds2D().contains(x, y))
                {
                    myRect3.x+=dx;
                    myRect3.y+=dy;
                    repaint();
                }
                if(PW.getBounds2D().contains(x, y) || PR.getBounds2D().contains(x, y) )
                {
                    for(int i = 0; i < PW.xpoints.length; i++)
                        PW.xpoints[i] +=dx;
                    for(int i = 0; i < PW.ypoints.length; i++)
                        PW.ypoints[i] += dy;

                    for(int i = 0; i < PR.xpoints.length; i++)
                        PR.xpoints[i] += dx;
                    for(int i = 0; i < PR.ypoints.length; i++)
                        PR.ypoints[i] += dy;
                    repaint();
                }
                if(PW1.getBounds2D().contains(x, y) || PR1.getBounds2D().contains(x, y) )
                {
                    for(int i = 0; i < PW1.xpoints.length; i++)
                        PW1.xpoints[i] +=dx;
                    for(int i = 0; i < PW1.ypoints.length; i++)
                        PW1.ypoints[i] += dy;

                    for(int i = 0; i < PR1.xpoints.length; i++)
                        PR1.xpoints[i] += dx;
                    for(int i = 0; i < PR1.ypoints.length; i++)
                        PR1.ypoints[i] += dy;
                    repaint();  
                }
                      x += dx;
                      y += dy;
  }
      }
  class ScaleHandler implements MouseWheelListener {
    public void mouseWheelMoved(MouseWheelEvent e) {
          int  x=e.getX();
          int y=e.getY();
      if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {
        if (myRect.getBounds2D().contains(x, y)) {
          float amount = e.getWheelRotation() * 5f;
          myRect.width += amount;
          myRect.height += amount;
          repaint();
        }
      }
    }
     public void mouseWheelMoved1(MouseWheelEvent e)
     {
          int x=e.getX();
          int y=e.getY();
         if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL)
      {
                 if(myRect1.getBounds2D().contains(x, y))
        {
            float amount=e.getWheelRotation()*5f;
            myRect1.width+=amount;
            myRect1.height+=amount;
            repaint();
        } 
      }
     }
  }
    @Override
    public void init() {
       setSize(854,550);
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
   public void update(Graphics g)
   {
       if(offscreen==null)
       {
           offscreen=createImage(this.getSize().width,this.getSize().height);
           h=offscreen.getGraphics();
       }
       h.setColor(getBackground());
       h.fillRect(0, 0, this.getSize().width, this.getSize().height);
       g.drawImage(offscreen, 0, 0, this);
       this.repaint();
   }
   @Override
  public void paint(Graphics g) {
      super.paint(g);
    Graphics2D g2d = (Graphics2D) g;
    Rectangle originalClipBounds = g2d.getClipBounds();
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
       RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
     g2d.setColor(Color.red);
    g2d.fill(myRect);
    g2d.fill(myRect1);
    g2d.setColor(Color.white);
    g2d.fill(myRect2);
    g2d.fill(myRect3);
    g2d.setColor(Color.red);
    g2d.fill(PR);
    g2d.fill(PR1);
    g2d.setColor(Color.white);
    g2d.fill(PW);
    g2d.fill(PW1); 
  }
}

推荐答案

通常使用双缓冲技术 [ ^ ]。


这篇关于如何阻止我的物体褪色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆