对形状进行分组,以便我可以通过单击鼠标循环浏览它们 - 处理和 java
group shapes so I can cycle through them with mouse clicks - processing and java
我有下面显示的代码,它可以在一个更大的圆周围显示 2、3、4、5、6、7、8 个圆,每个圆等距。
我知道代码写得很长,但我不知道对值进行编码的较短方法 - 如何让代码为我计算出坐标。
我的问题分为两部分。
如何对代码进行分组,使前 2 个省略号为一组,后三个省略号为一组,依此类推?
我如何循环浏览群组,例如,
鼠标左键按下 = 组向后移动一个
鼠标右键按下 = 组向前移动一个
我一直在阅读有关如何创建形状组的信息,但我知道怎么做吗?如果我能够做到这一点,我想我将有机会编写代码,如果按下鼠标左键,显示图像+1 等
int b, w;
void setup () {
size (600, 600); //size of the sceen
background (255, 255, 255); //colour of the screen
b = 0; //sets value of b
w = 255; //sets value of white
//frameRate (1);
fill (b);
ellipse (300, 190, 20, 20);
ellipse (300, 410, 20, 20);
// above is for 2 ellipses
/*
fill (b);
ellipse (300, 190, 20, 20);
ellipse (395.2627944, 355, 20, 20);
ellipse (204.7372056, 355, 20, 20);
//above is for 3 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (410, 300, 20, 20);
ellipse (300, 410, 20, 20);
ellipse (190, 300, 20, 20);
//above is for 4 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (404, 266, 20, 20);
ellipse (364, 388, 20, 20);
ellipse (235, 388, 20, 20);
ellipse (195, 271, 20, 20);
//above is for 5 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (395, 245, 20, 20);
ellipse (395, 355, 20, 20);
ellipse (300, 410, 20, 20);
ellipse (204, 355, 20, 20);
ellipse (204, 245, 20, 20);
//above is for 6 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (386, 231, 20, 20);
ellipse (407, 324, 20, 20);
ellipse (348, 399, 20, 20);
ellipse (252, 399, 20, 20);
ellipse (192, 324, 20, 20);
ellipse (214, 231, 20, 20);
//above is for 7 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (378, 222, 20, 20);
ellipse (410, 300, 20, 20);
ellipse (378, 378, 20, 20);
ellipse (300, 410, 20, 20);
ellipse (222, 378, 20, 20);
ellipse (190, 300, 20, 20);
ellipse (222, 222, 20, 20);
//above is for 8 ellipses
*/
}
void draw() {
//fill (w);
//ellipse (width/2, height/2, 200, 200); // the guide circle. Not needed in final code.
}
我不是已经将每个圆创建为一个形状了吗? (我是这里的一个苦苦挣扎的新手!)。
我想知道我是否能够改为这样做。
我可以为每个椭圆创建一个变量吗?然后通过按键调用每个椭圆(或多个)。
类似
int c1, c2, c3, c4, c5, c6;
void setup() {
size (600,600);
background (255,255,255);
c1 = ellipse (300, 190, 20, 20);
c2 = ellipse (300, 410, 20, 20);
//etc
}
void draw() {
if '+' pressed, show c1, c2
if '+' pressed again, show c1, c3, c4
if '+' pressed again, show c1, c2, c5, c6
}
第一步是尽可能不要重新发明轮子。
Java Swing 有一个几何结构 API,请查看 2D Graphics and Working with Geometry 了解更多详细信息。
您可以根据需要使用 Map
或 List
或两者的组合来创建一组形状
List<Shape> group = new ArrayList<Shape>(25);
group.add(new Ellipse2D.Float(300, 190, 20, 20));
group.add(new Ellipse2D.Float(300, 410, 20, 20));
然后您可以使用 Map
或另一个 List
对组进行分组,但这将取决于您的需要...
现在,这样做的好处是您可以获得很多额外的功能,例如,您可以变换形状、更改它的位置或旋转,如果您愿意的话,您还可以获得一些额外的功能来确定是否给定的点落在形状内
通过使用 MouseListener
,您可以捕获 mouseClicked
事件并循环遍历您的集合...
public void mousePressed(MouseEvent evt) {
for (Shape shape : group) {
if (group.contains(evt.getPoint())) {
// The shape was clicked...
}
}
}
形状 API 也受 Graphics2D
API 支持,允许您通过传递形状的引用来绘制 and/or 填充形状。
我有下面显示的代码,它可以在一个更大的圆周围显示 2、3、4、5、6、7、8 个圆,每个圆等距。
我知道代码写得很长,但我不知道对值进行编码的较短方法 - 如何让代码为我计算出坐标。
我的问题分为两部分。
如何对代码进行分组,使前 2 个省略号为一组,后三个省略号为一组,依此类推?
我如何循环浏览群组,例如, 鼠标左键按下 = 组向后移动一个 鼠标右键按下 = 组向前移动一个
我一直在阅读有关如何创建形状组的信息,但我知道怎么做吗?如果我能够做到这一点,我想我将有机会编写代码,如果按下鼠标左键,显示图像+1 等
int b, w;
void setup () {
size (600, 600); //size of the sceen
background (255, 255, 255); //colour of the screen
b = 0; //sets value of b
w = 255; //sets value of white
//frameRate (1);
fill (b);
ellipse (300, 190, 20, 20);
ellipse (300, 410, 20, 20);
// above is for 2 ellipses
/*
fill (b);
ellipse (300, 190, 20, 20);
ellipse (395.2627944, 355, 20, 20);
ellipse (204.7372056, 355, 20, 20);
//above is for 3 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (410, 300, 20, 20);
ellipse (300, 410, 20, 20);
ellipse (190, 300, 20, 20);
//above is for 4 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (404, 266, 20, 20);
ellipse (364, 388, 20, 20);
ellipse (235, 388, 20, 20);
ellipse (195, 271, 20, 20);
//above is for 5 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (395, 245, 20, 20);
ellipse (395, 355, 20, 20);
ellipse (300, 410, 20, 20);
ellipse (204, 355, 20, 20);
ellipse (204, 245, 20, 20);
//above is for 6 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (386, 231, 20, 20);
ellipse (407, 324, 20, 20);
ellipse (348, 399, 20, 20);
ellipse (252, 399, 20, 20);
ellipse (192, 324, 20, 20);
ellipse (214, 231, 20, 20);
//above is for 7 ellipses
fill (b);
ellipse (300, 190, 20, 20);
ellipse (378, 222, 20, 20);
ellipse (410, 300, 20, 20);
ellipse (378, 378, 20, 20);
ellipse (300, 410, 20, 20);
ellipse (222, 378, 20, 20);
ellipse (190, 300, 20, 20);
ellipse (222, 222, 20, 20);
//above is for 8 ellipses
*/
}
void draw() {
//fill (w);
//ellipse (width/2, height/2, 200, 200); // the guide circle. Not needed in final code.
}
我不是已经将每个圆创建为一个形状了吗? (我是这里的一个苦苦挣扎的新手!)。
我想知道我是否能够改为这样做。 我可以为每个椭圆创建一个变量吗?然后通过按键调用每个椭圆(或多个)。
类似
int c1, c2, c3, c4, c5, c6;
void setup() {
size (600,600);
background (255,255,255);
c1 = ellipse (300, 190, 20, 20);
c2 = ellipse (300, 410, 20, 20);
//etc
}
void draw() {
if '+' pressed, show c1, c2
if '+' pressed again, show c1, c3, c4
if '+' pressed again, show c1, c2, c5, c6
}
第一步是尽可能不要重新发明轮子。
Java Swing 有一个几何结构 API,请查看 2D Graphics and Working with Geometry 了解更多详细信息。
您可以根据需要使用 Map
或 List
或两者的组合来创建一组形状
List<Shape> group = new ArrayList<Shape>(25);
group.add(new Ellipse2D.Float(300, 190, 20, 20));
group.add(new Ellipse2D.Float(300, 410, 20, 20));
然后您可以使用 Map
或另一个 List
对组进行分组,但这将取决于您的需要...
现在,这样做的好处是您可以获得很多额外的功能,例如,您可以变换形状、更改它的位置或旋转,如果您愿意的话,您还可以获得一些额外的功能来确定是否给定的点落在形状内
通过使用 MouseListener
,您可以捕获 mouseClicked
事件并循环遍历您的集合...
public void mousePressed(MouseEvent evt) {
for (Shape shape : group) {
if (group.contains(evt.getPoint())) {
// The shape was clicked...
}
}
}
形状 API 也受 Graphics2D
API 支持,允许您通过传递形状的引用来绘制 and/or 填充形状。