我希望能够放大我的项目,并且它与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
}
所以我想知道我是否可以更容易地做到这一点,因为这使得它在某些缩放时看起来很奇怪。
答案 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