我过去在acm图形库方面做了相当多的工作,我刚刚开始解决斯坦福布置的突破性问题。我在过去几次遇到的图形问题之一是坐标不能准确地反映形状实际出现的位置,尽管我已经反复检查过它们。最后,对于这些任务,我最终看了看它,并进行了修改,直到它看起来像是正确的。很明显,我在这里遗漏了一些东西,因为一个简单的图形程序应该不会这么难。
例如,使用acm.graphics时,我的代码如下所示。
public static final int APPLICATION_WIDTH = 400;
public static final int APPLICATION_HEIGHT = 600;
public void setupBorder(){
// **Sets Black Background
GRect b = new GRect(0,0,400,600); //** Sets Black Background
fillObj(b,Color.black);
add(b);
//**Sets White Square so border is 5 pixels wide on each side
b = new GRect(5,5,APPLICATION_WIDTH-10,APPLICATION_HEIGHT-10);
fillObj(b,Color.white);
add(b);
}所以我在这里的想法是,它向右移动了5个像素,向下移动了5个像素,我需要减去这些像素,然后再额外增加5个像素,使边框每边5个像素(basic 2b+x =1 side,2a+y= vertical side)。你可能会认为这会在每边创建一个5像素的黑色边框,中间有一个白色的正方形,但事实并非如此,它在窗口的左侧、右侧和顶部创建了一个边框,而不是底部。那么,对于这么简单的事情,会出什么问题呢?我在纸上检查了两倍,三倍,甚至四倍的计算,它应该是一个中间有5个像素黑色边框的白色正方形,但它不是,我试着改变像素的百分比,但效果更差。手动编辑该框,直到Y值接近-35,尽管这有点太远了。有人知道哪里出问题了吗?

对运行和类中的其他方法进行了这些更改的Breakout。
public void run() {
/* You fill this in, along with any subsidiary methods */
init();
}
public void init(){
setupBorder();
}
public void setupBorder(){
//**Black Background
GRect b = new GRect(0,0,400,600); //**Black Background
fillObj(b,Color.black);
add(b);
b = new GRect(5,5,APPLICATION_WIDTH-10,APPLICATION_HEIGHT-10);
fillObj(b,Color.white);
add(b);
}
public void fillObj(GFillable a, Color argC)
{
a.setFillColor(argC);
a.setFilled(true);
}发布于 2012-11-14 18:40:46
看起来您混淆了应用程序窗口的大小(不包括窗口边框,但包括菜单,在本例中为400*600 )和可绘制区域(不包括菜单)的大小,这意味着您在可绘制区域(位于菜单下方)之外进行绘制。
您的窗口具有:
你要么
getCanvas().getHeight()GraphicsProgram是一个Applet,这似乎不是找出菜单高度并按该数量增加窗口高度(最后的手段)。发布于 2012-11-14 21:23:23
可以使用setSize()方法更改窗口的大小。这样做,你仍然面临着一个坐标问题。
您只需在调用setSize()时处理它。
OFFI也在处理这个突破性的任务,也有同样的问题。几分钟前发布在此站点。/OFF
https://stackoverflow.com/questions/13376840
复制相似问题