我正在尝试创建一个扩展BufferedImage的简单Card类,以便可以直接在屏幕上绘制该卡片。但是该卡有两个面孔。正面和背面。我包括一个flip(boolean faceup)方法,我想将图像从一侧更改为另一侧,但是由于Class扩展了BufferedImage,这似乎是最终的吗?我不确定,那是我的印象。它与构造函数中绘制的原始图像没有变化。有什么办法可以解决,所以我仍然可以在屏幕上直接刷卡吗?这是我到目前为止所拥有的...

  public Card(int rank, int suit)
  {
     super(50,70,TYPE_INT_ARGB);
     this.rank = rank;
     this.suit = suit;
     try{bi = ImageIO.read(getClass().getResource(toString()+".png"));
     back = ImageIO.read(getClass().getResource("back.png"));}
     catch(IOException e){e.printStackTrace();}
     Graphics2D g = createGraphics();
     g.drawImage(back,0,0,null);
     g.dispose();
  }

  public void flip(boolean faceup)
  {
     this.faceup = faceup;
     Graphics2D g = createGraphics();
     if(faceup)g.drawImage(bi,0,0,null);
     else g.drawImage(back,0,0,null);
     g.dispose();
  }

最佳答案

不要扩展BufferedImage。

相反,您的类可以包含两个BufferedImages:


前方
背部


然后,绘制方法将根据“翻转”属性绘制正面或背面。

10-07 18:50