好的,因此在code.org的游戏实验室中,它们提供了一个预制函数,称为“ line();”。它应绘制一条源于给定x1 y1和x2 y2坐标的线。当我尝试创建一个for循环,该循环允许我在同一个y像素上绘制3个线段时,for循环只是在draw循环内永久运行(但不正确,它只是将x2和y2移至了无限右),所以我将其移到了绘图循环之外,现在我什么也没得到...
var spaceXPos = 70;
var spaceXPos2 = spaceXPos + 25;
for (var i = 0; i < 4; i++){
stroke(rgb(255, 255, 255));
strokeWeight(2);
line(spaceXPos, 200, spaceXPos2, 200);
spaceXPos = spaceXPos + 20;
}
function draw() {
background("wheat");
}
这是一个独立项目,我使用code.org是因为它提供了易于使用的动画和绘图屏幕,并且我还将通过它学习AP CompSci类。
这里是游戏实验室中此代码的链接 https://studio.code.org/projects/gamelab/_w391nq3oEo62S3WOOpWg6NrMrMHNvo8n20gVMDu5hg
答案 0 :(得分:0)
当您的line()
命令位于绘制循环之外时,如您发布的示例代码中所示,将按顺序进行以下操作:
for
循环,该循环最终调用了line()
四次。draw()
函数调用background("wheat")
,在设置代码的输出上进行绘制。每秒发生多次。因此您看不到任何输出(背景颜色除外),因为您的draw()
函数正在您的for
循环绘制的线条上绘制。
如果如上所述,将for
循环移到draw()
中,以使代码如下所示:
var spaceXPos = 70;
var spaceXPos2 = spaceXPos + 25;
function draw() {
background("wheat");
for (var i = 0; i < 4; i++){
stroke(rgb(255, 255, 255));
strokeWeight(2);
line(spaceXPos, 200, spaceXPos2, 200);
spaceXPos = spaceXPos + 20;
}
}
...然后发生以下情况:
spaceXPos
设置为70,而spaceXPos2
设置为95。 绘制(第一次):绘制背景,然后绘制线条。每次绘制一条线时,您都会向spaceXPos
添加20,但是spaceXPos2
并没有变化,因此在第一个绘制调用中绘制的四条线是:
line(70, 200, 95, 200)
line(90, 200, 95, 200)
line(110, 200, 95, 200)
line(130, 200, 95, 200)
绘制(第二次):再次绘制背景,然后再次绘制线条。但是,spaceXPos
的值未重置,因此它一直向右移动。请注意,x2
值95并未更改,因此该行的一端位于同一位置。
line(150, 200, 95, 200)
line(170, 200, 95, 200)
line(190, 200, 95, 200)
line(210, 200, 95, 200)
绘制(依此类推):该行的一端一直向右移动,直到它离开屏幕为止,并且看不到更多更改,因此最终得到类似这个:
如果您的目标是连续绘制三个线段,则需要确保每个调用的x1和x2值都发生变化,并确保它们在每个绘制调用中都从同一位置开始。这是一种方法:
var START_X = 70;
var FIXED_Y = 200;
var WIDTH = 20;
var GAP = 5;
function draw() {
background("wheat");
stroke(rgb(255, 255, 255));
strokeWeight(2);
for (var i = 0; i < 3; i++){
line(
(WIDTH + GAP) * i + START_X,
FIXED_Y,
(WIDTH + GAP) * i + START_X + WIDTH,
FIXED_Y
);
}
}