我已經完成了很多與過去的acm圖形庫,我剛剛開始研究斯坦福分配的突破問題。我過去曾多次使用圖形的問題之一是座標不能準確地反映形狀實際出現的位置,儘管我已經對它們進行了雙倍和三倍的檢查。最後,對於這些任務,我最終目睹了它並進行了修改,直到它看起來是正確的。所以很明顯,我在這裏錯過了一些簡單的圖形程序,這不應該很難。基本的Java圖形和座標不能正常工作
例如,使用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個像素,每邊(基本2B + X = 1個側,2a + y =垂直邊)。你會認爲這會在中間形成一個黑色邊框,每邊5個像素,白色方塊,但不是。它在窗口的左側,右側和頂部創建邊界,但不在底部。所以這麼簡單,有什麼可能出錯?我有雙倍,三倍,甚至四倍檢查紙張上的計算,它應該是一個白色正方形,中間有一個5像素黑色邊框,但事實並非如此。我試過改變百分比像素,效果更差。手動編輯這個盒子,直到它看起來接近於Yvalue的-35,儘管這只是有點過分。任何人都知道發生了什麼問題?
appwindow http://i46.tinypic.com/10rob61.jpg
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);
}
也許'APPLICATION_HEIGHT'包括菜單? –
Jan Dvorak可能會在...(0,0)可能位於菜單的左上角。但是,在這種情況下,(5,5)會比看起來要高。怪異的... – 2012-11-14 10:28:19
可能是這樣,在調試單個getHeight/getWidth中添加,並且它在控制檯中爲每個值返回兩個值。 645 418 575 400.這只是奇怪的。 – Lorek