4

我一直致力于将我的一些处理代码移植到 NetBeans 中的常规 Java。到目前为止一切顺利,除了我使用非灰度颜色时,大多数东西都很好用。

我有一个绘制螺旋图案的脚本,并且应该根据模数检查改变螺旋中的颜色。然而,该脚本似乎挂起,我无法真正解释原因。

如果有人对处理和 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++;
    }
}
4

3 回答 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;
  }

希望这可以帮助。

于 2008-10-04T09:55:53.180 回答
0

要查看这里发生的事情,请添加

stroke(255);

在抽奖开始时。你会看到所有想要的圆圈都画出来了,但没有颜色。正如之前的海报所提到的:您只在第 11、13 和 17 次迭代中使用非灰色。

我认为您的颜色值是这里的主要问题。从参考页

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

如果您查看您的值,您会看到一个非常低的 alpha 值,这可能无法与背景区分开来。

于 2008-10-21T08:44:01.900 回答
0

不确定您是否还有问题。你提到挂。这是在黑暗中拍摄,但我记得弗莱重复说 size() 调用必须是 setup() 中的第一条指令。所以也许下移 background() 调用可能会有所帮助。反正伤不起。

于 2008-10-30T10:54:07.977 回答