我最初编写了一个程序,该程序生成一个2D矩形区域。突然,我想安排一个等轴测投影。我认为最简单的方法是使用3D矩形。我修改了代码,总的来说,一切都按照我想要的方式进行。但是,有一个我不知道如何解决的问题。每个新矩形都被放置在其余矩形的顶部。由于出现了该区域的缓解效果。我希望平台平坦。在屏幕下方,您将了解所有内容。 我尝试使用setTranslateZ()进行实验,但是它根本没有效果。
protected List fillingArea()
{
manyPlacedSquares.add(new CustomBox(100,50,100, 0, 0, 0));
for(int y = 0; y < numberOfSquares; y++)
{
for(CustomBox i: manyPlacedSquares)
{
CustomBox upBox = new CustomBox(100,50,100,i.getTranslateX()+70,i.getTranslateY()-50, i.getTranslateZ()-1 );
manyPotentialSquares.add(upBox);
CustomBox rightBox = new CustomBox(100,50,100,i.getTranslateX()-70,i.getTranslateY()-50,i.getTranslateZ()-1);
manyPotentialSquares.add(rightBox);
CustomBox belowBox = new CustomBox(100,50,100,i.getTranslateX()+70,i.getTranslateY()+50,i.getTranslateZ()-1);
manyPotentialSquares.add(belowBox);
CustomBox leftBox = new CustomBox(100,50,100,i.getTranslateX()-70,i.getTranslateY()+50,i.getTranslateZ()-1);
manyPotentialSquares.add(leftBox);
}
System.out.println(manyPotentialSquares.size());
System.out.println(manyPlacedSquares.size());
System.out.println(manyPotentialSquares.get(1).getTranslateX());
manyPotentialSquares.removeAll(manyPlacedSquares);
System.out.println(manyPotentialSquares.size());
index = randomGenerator.nextInt(manyPotentialSquares.size());
manyPlacedSquares.add(manyPotentialSquares.get(index));
}
return manyPlacedSquares;
}
自定义框具有简单的内容,不太可能需要,但以防万一,我将显示其内容。重新定义了equals()方法以进行正确的操作removeall()
public class CustomBox extends Box {
Double tt;
Double tt1;
public CustomBox(double width, double height, double depth, double gtx, double gty, double gtz)
{
super(width, height, depth);
this.setTranslateX(gtx);
this.setTranslateY(gty);
this.setTranslateZ(gtz);
tt = gtx;
tt1 = gty;
}
@Override
public boolean equals(Object obj)
{
if(this.tt.equals(((CustomBox) obj).getTranslateX()) && this.tt1.equals(((CustomBox) obj).getTranslateY()))
{
System.out.println(tt + " " + ((CustomBox) obj).getTranslateX());
return true;
}
if (obj == null || obj.getClass() != this.getClass())
{
return false;
}
return false;
}
}
答案 0 :(得分:0)
您必须配置JavaFX才能正确使用3D。特别是您必须打开深度缓冲。在此问题的可接受答案中对此进行了解释:Overlaping Shapes - wrong overlapping shapes behaviour