私は過去に acm グラフィックス ライブラリでかなりの作業を行ってきましたが、スタンフォードが割り当てたブレイクアウト問題に取り組み始めたところです。グラフィックに関して過去に何度か経験した問題の 1 つは、座標が実際に表示されている形状を正確に反映していないことです。最終的に、それらの割り当てについて、私はそれを目で見て、適切に見えるまで修正を加えることになりました。ここで何かが欠けているのは明らかなので、単純なグラフィックプログラムはそれほど難しくないはずです。
たとえば、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 ピクセルの黒い境界線があるはずですが、そうではありません。パーセンテージのピクセルを変更しようとしましたが、結果が悪化しました。Y 値が約 -35 に近くなるまでボックスを手動で編集しますが、それは少し遠すぎます。誰が何がうまくいかないのか考えていますか?
クラス内の他のメソッドを実行するために行われたこれらの変更をブレイクアウトします。
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);
}