我的处理程序中随机放置了许多圆圈。每个人都是这样开始的:
ellipse(x, y, radius, radius);
我想知道我是否能以某种方式为每个圆指定一个z-index值。较高z指数的圆圈显示较低z圆圈的圆圈。
答案 0 :(得分:1)
我现在无法测试,但我相信您应该查看 fill()
方法。此函数中的第四个参数指定不透明度(AKA alpha透明度)。它在Processing.org/learning/color。
编辑:此订单上的thread似乎与您的问题相同。建议使用图像透明度,但似乎更好的答案是使用Processing Layar Library。以下是some examples - 第一个似乎与您的问题一致。
引用图层示例的Advanced部分:
动态添加,删除或重新排序图层
可以在a期间动态添加,删除或重新排序图层 草图的执行,但这样做时应该非常小心。该 可以操纵由AppletLayers对象管理的图层列表 通过获取ListIterator对象。列表如何的语义 应该通过阅读来仔细研究通过迭代器操纵 Javadoc for java.util.ListIterator。难以理解的原因 在草图执行期间操纵列表是因为列表 正在迭代图层以呈现它们。最好的 操纵图层列表的位置在主草图的绘图中() 方法而不是图层的draw()方法或鼠标或键盘 事件处理。
答案 1 :(得分:1)
另一种选择是使用数组或列表跟踪您的省略号,因此您有两个步骤:
以下是使用键入的ArrayList:
的示例ArrayList<Ellipse> ellipses = new ArrayList<Ellipse>();
void setup(){
size(400,400,P2D);
smooth();
fill(192,0,0,192);
reset();
}
void reset(){
ellipses.clear();
for(int i = 0 ; i < 40; i++){
float radius = random(5,25);
Ellipse e = new Ellipse(i*10,random(20,380),radius,radius,i);
ellipses.add(i,e);
}
}
void draw(){
background(255);
for(Ellipse e : ellipses) e.draw();
}
void keyPressed(){
reset();
}
class Ellipse{
float x,y,w,h;
int zIndex;
Ellipse(float ax,float ay,float aw,float ah,int az){
x = ax;
y = ay;
w = aw;
h = ah;
zIndex = az;
}
void draw(){
ellipse(x,y,w,h);
}
}
请注意,ArrayLists非常灵活,您可以轻松地在您需要的索引处添加元素。
如果要使用数组,则需要确保可以根据所选属性对数组进行排序,因此需要实现Comparable interface:
int numEllipses = 40;
Ellipse[] ellipses = new Ellipse[numEllipses];//this will store original/unsorted data
Ellipse[] ellipsesSorted = new Ellipse[numEllipses];//this will store the sorted data
void setup(){
size(400,400,P2D);
smooth();
fill(192,0,0,192);
reset();
}
void reset(){
for(int i = 0 ; i < numEllipses; i++){
float radius = random(5,25);
int index = (int)random(0,numEllipses);
Ellipse e = new Ellipse(i*10,random(20,380),radius,radius,index);
ellipses[i] = e;
}
//copy original data into an array to be sorted
arrayCopy(ellipses, ellipsesSorted);
//sort the array - uses the compareTo method behind the scenes
Arrays.sort(ellipsesSorted);
}
void draw(){
background(255);
for(Ellipse e : ellipsesSorted) e.draw();
}
void keyPressed(){
reset();
}
class Ellipse implements Comparable<Ellipse>{
float x,y,w,h;
int zIndex;
Ellipse(float ax,float ay,float aw,float ah,int az){
x = ax;
y = ay;
w = aw;
h = ah;
zIndex = az;
}
void draw(){
ellipse(x,y,w,h);
}
int compareTo(Ellipse e)
{
if(e.zIndex > this.zIndex) return 1;
else if(e.zIndex < this.zIndex) return -1;
else return 0;
}
String toString(){
return "z index: "+zIndex;
}
}