float x = 100;
float y = 100;
float p = 150;
float l = 10;
int r = 150;
int t = 100;
int s = 100;
int w = 60;
int h = 60;
int z = 11;
int eyeSize = 10;
int pigNose = 30;
int pigBody = 30;
int pigEars = 35;
int pigTail = 20;
int speed = 1;
void setup () {
size (600, 600);
}
void draw () {
background(255);
//Draw legs
fill(255);
rect(x+(2*w), y+h/3.5, z, 2*z);
rect(x+(w), y+h/3, z, 2*z);
rect(x+(1.5*w), y+h/3, z, 2*z);
rect(x+(2.5*w), y+h/3.5, z, 2*z);
////draw body
fill(255);
ellipse(2.1*x,y-pigBody, p, p-(2*l));
//draw tail
fill(0);
line(2.85*x, y-pigTail, (6+l)*pigTail, pigTail*3);
// Draw payer's head
fill(255);
ellipse(x,y-pigNose,t,t);
// Draw player's eyes
fill(0);
ellipse(x-w/3+1,y-h/2,eyeSize,eyeSize);
ellipse(x+w/3-1,y-h/2,eyeSize,eyeSize);
//Draw nose
fill(0);
ellipse(x, y, pigNose, pigNose);
//draw ears
fill(0);
ellipse(x-(w/2),y-h, pigEars, pigEars);
fill(0);
ellipse(x+(w/2),y-h, pigEars, pigEars);
}
void mousePressed(){
x = mouseX;
y = mouseY;
}
我在使用变量而不是魔术数字时表现不佳,我想知道为什么当我点击屏幕上的某个地方时,猪会分开?我也应该使用实例变量,但我不确定如何。有人可以帮忙吗?这是为了处理。
答案 0 :(得分:0)
通过使用x
和y
变量并将所有形状基于这些变量,您已经找到了正确的想法。但是你有一件事是错的:当你真的将添加到这些变量时,你将这些变量乘以不同的值来得到你的形状的位置得到你的形状的位置。
以这种方式思考,使用一个更简单的例子:
size(200, 100);
float x = 100;
float y = 50;
ellipse(x, y, 20, 20);
ellipse(x*.8, y, 20, 20);
这会创建一个彼此相邻的两个圆圈的图形:
这似乎是正确的,但现在如果我更改x
变量会发生什么?
size(200, 100);
float x = 50;
float y = 50;
ellipse(x, y, 20, 20);
ellipse(x*.8, y, 20, 20);
由于我将x
值乘以.8
,现在我将x
值更改为50
,第二个椭圆将位于{{ 1}},距离第一个圆圈仅40
像素。但是在第一个草图中,第二个椭圆距离是10
像素!
请注意,如果我增加20
,同样的事情会发生,圆圈之间的空间会增加。这就是你的例子中发生的事情。
要解决此问题,我需要将值添加到我的变量中以获取其他形状的位置:
x
现在,无论size(200, 100);
float x = 150;
float y = 50;
ellipse(x, y, 20, 20);
ellipse(x-20, y, 20, 20);
的值是什么,圈子都会彼此相邻(在这种情况下,20
像素分开)。
你必须做类似的事情,只需要两个变量而不是一个。如果没有意义,请尝试在一张纸上绘制图形,并为x
和x
使用一些不同的示例值。其他形状的位置是什么?
此外,您已经在使用实例变量。这些只是草图顶部的变量。 (除非你原本应该使用课程,但我怀疑这是否属于这种情况。)