如何在某些东西上使用Graphics2D g.scale()而不是其他东西?

时间:2015-04-14 23:52:59

标签: java swing graphics2d

我希望能够放大我的项目,并且它与g.scale(x,x)和g.translate(x,y)的组合完美配合。但是,我想要的东西不能与其他一切(小地图)一起扩展。 具体来说,我正在制作一个迷你地图,将整个屏幕和单位显示为1x1像素。

   for(Unit u : units) { //cycle through arraylist of units
        u.drawUnit(g, selectedUnits.contains(u)); //draws the unit, scales perfectly
        g.setColor(Color.blue);
        g.fillOval(rnd((u.getX()/4)/scale), rnd((u.getY()/4)/scale), rnd(1 + 1/scale), rnd(1 + 1/scale));
        //rnd() is just a shorter (int)Math.round()
        //The minimap's dimensions are width/4 x height/4
    }

所以我想知道我是否可以更容易地做到这一点,因为这使得它在某些缩放时看起来很奇怪。

1 个答案:

答案 0 :(得分:2)

您可以获取/设置与Graphics2D对象关联的AffineTransform对象。这使您可以在两个或多个变换之间来回切换,而无需通过Graphics2D对象的scale / translate / rotate方法进行数学运算。例如:

//render something default transform
AffineTransform defaultTransform = g.getTransform();
AffineTransform newTransform = new AffineTransform(defaultTransform);
newTransform.setScale(xScale, yScale);
g.setTransform(newTransform);
//render something with the new transform
g.setTransform(oldTransform);
//render something with the original transform