处理中的颜色变化

4
我一直在将我的Processing代码转移到NetBeans中的普通Java上。到目前为止,一切都很顺利,除了当我使用非灰度颜色时出现的问题。
我有一个绘制螺旋图案的脚本,应该根据模数检查来改变螺旋中的颜色。然而,脚本似乎卡住了,我真的无法解释为什么。
如果有人有处理Processing和Java方面的经验,并且可以告诉我我的错误在哪里,我真的很想知道。
为了进行同行评审,这是我的小程序:
package spirals;
import processing.core.*;

public class Main extends PApplet
{
    float x, y;
    int i = 1, dia = 1;

    float angle = 0.0f, orbit = 0f;
    float speed = 0.05f;

    //color palette
    int gray = 0x0444444;
    int blue = 0x07cb5f7;
    int pink = 0x0f77cb5;
    int green = 0x0b5f77c;

    public Main(){}

    public static void main( String[] args )
    {
        PApplet.main( new String[] { "spirals.Main" } );
    }

    public void setup()
    {
        background( gray );
        size( 400, 400 );
        noStroke();
        smooth();
    }

    public void draw()
    {
        if( i % 11 == 0 )
            fill( green );
        else if( i % 13 == 0 )
            fill( blue );
        else if( i % 17 == 0 )
            fill( pink );
        else
            fill( gray );

        orbit += 0.1f; //ever so slightly increase the orbit
        angle += speed % ( width * height );

        float sinval = sin( angle );
        float cosval = cos( angle );

        //calculate the (x, y) to produce an orbit
        x = ( width / 2 ) + ( cosval * orbit );
        y = ( height / 2 ) + ( sinval * orbit );

        dia %= 11; //keep the diameter within bounds.
        ellipse( x, y, dia, dia );
        dia++;
        i++;
    }
}
3个回答

2
你考虑过添加调试语句(System.out.println)并查看Java控制台吗?
可能会有大量输出和明显的减速,但至少可以看到在没有任何变化时发生了什么。
我认为存在逻辑错误的是填充if语句;每次迭代都会决定该迭代的颜色并用该颜色进行填充。只有i == 11、13或17的迭代才会被填充为一种颜色。而下一个迭代将使用灰色覆盖该颜色。我认为它容易闪烁,可能太快而无法看清。
难道你不想要类似于这样的东西吗?
public class Main extends PApplet
{
  ...

  int currentColor = gray;

  public Main(){}

  ...

  public void draw()
    {
        if( i % 11 == 0 )
           currentColor = green;
        else if( i % 13 == 0 )
           currentColor = blue;
        else if( i % 17 == 0 )
           currentColor = pink;
        else {
           // Use current color
        } 

        fill(currentColor);

        ...
}

这样,你可以从灰色开始,然后到绿色、蓝色、粉红色、绿色、蓝色、粉红色等等。如果你也想在某个时刻看到灰色,你需要添加类似以下的内容:

  else if ( i % 19 ) {
    currentColor = gray;
  }

希望这可以帮到您。

0

不确定您是否仍然有问题。您提到了“挂起”。这只是一个猜测,但我记得 Fry 重复说过 size() 调用必须是 setup() 中的第一条指令。因此,将 background() 调用下移可能会有所帮助。无论如何都不会有坏处。


0

要查看这里发生了什么,请添加

stroke(255);

在绘制开始时,您将看到所有想要的圆形绘制,但没有颜色。正如之前的帖子所提到的:您仅在第11、13和17次迭代中使用非灰色。

我认为您的颜色值是主要问题。从参考页面上来看:

从技术角度来看,颜色是32位信息,按AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB的顺序排序,其中A包含alpha值,R是红/色调值,G是绿/饱和度,B是蓝/亮度。

如果您查看您的值,您会发现非常低的alpha值,这可能与背景无法区分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接