gpt4 book ai didi

java - 基本 Java 图形和坐标无法正常工作

转载 作者:行者123 更新时间:2023-12-02 07:27:21 25 4
gpt4 key购买 nike

我过去已经对 acm 图形库做了很多工作,并且刚刚开始研究斯坦福大学分配的突破问题。我过去多次遇到的图形问题之一是坐标并不能准确反射(reflect)形状实际出现的位置,尽管我已经对它们进行了两次和三次检查。最后,对于这些作业,我最终目视并进行修改,直到看起来合适为止。很明显我在这里遗漏了一些东西,因为一个简单的图形程序不应该这么困难。

例如,使用 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 个像素的黑色边框,中间有一个白色方 block ,但事实并非如此。它在窗口的左侧、右侧和顶部创建边框,但不在底部创建边框。那么这么简单的事情,可能会出什么问题吗?我已经两次、三次甚至四次检查了纸上的计算结果,它应该是中间有一个带有 5 像素黑色边框的白色正方形,但事实并非如此。我尝试过更改像素的百分比,但效果更差。手动编辑该框,直到它看起来接近 Y 值约 -35,尽管这有点太远了。有人知道出了什么问题吗?

appwindow

Breakout对类中的 run 和其他方法进行了这些更改。

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);
}

最佳答案

看起来您混淆了应用程序窗口的大小(不包括窗口边框,但包括菜单,在您的情况下为 400*600)与可绘制区域的大小(不包括菜单),这意味着您正在可绘制区域(位于菜单下方)之外进行绘画。

您的窗口有:

  • 由操作系统提供的边框。内部尺寸为 400x600。
  • 菜单栏。
  • 菜单栏下方的可绘制区域( Canvas )。它比菜单栏宽度短 400x600。

你要么

  • 需要读取 Canvas 大小并使用它来代替窗口大小:getCanvas().getHeight()
  • 需要设置 Canvas 大小而不是窗口大小,并让窗口大小根据需要自行调整。由于 GraphicsProgram 是一个 Applet,这似乎不可能。
  • 需要找出菜单高度并将窗口高度增加相应的高度(最后的手段)。

关于java - 基本 Java 图形和坐标无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13376840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com