Why is Processing.py skipping the second-to-last item of my array?

1

I've been making a sort of abstract-art style thing in Processing. Left click is place a point, click again and it'll make a random line, right click to make a new point.

The problem comes in when I use the up and down arrows to pick a pen color. The second to last item (either black or pink) is skipped when I use these keys. Code is attached.

def setup():
    size(750, 750)
    background(255)
    global clicks
    global selector
    global fillcolors
    fillcolors = [0x80FFFFFF, 0x80000000, 0x80FF0000, 0x8000FF00, 0x800000FF, 0x80FFFF00, 0x80FF00FF, 0x8000FFFF]
    selector = 1
    clicks = 0
    ellipseMode(CENTER)
    fill(255, 255, 255, 128)

def draw():
    ellipse(50, 50, 50, 50)

def mousePressed():
    global x
    global y
    global clicks
    if (mouseButton == LEFT) and (clicks == 0):
        x = mouseX
        y = mouseY
        clicks = 1
    if (mouseButton == LEFT) and (0 < clicks < 11):
        line(x, y, x+random(-300, 300), y+random(-300, 300))
        clicks += 1
    if (mouseButton == LEFT) and (clicks == 11):
        wide = random(300)
        clicks = 1
        line(x, y, x+random(-300, 300), y+random(-300, 300))
        ellipse(x, y, wide, wide)
    if mouseButton == RIGHT:
        clicks = 0

def keyPressed():              # this is the color selector area.
    global selector
    global fillcolors
    global clicks
    clicks = 0
    if key != CODED:
        background(255)
    elif key == CODED:
        if keyCode == UP:
            if selector < 8:                  # something in here is causing the second-to-last item of the array to be skipped.
                fill(fillcolors[selector])
                selector += 1
            if selector == 7:
                fill(fillcolors[selector])
                selector = 0
        if keyCode == DOWN:
            if selector > 0:
                fill(fillcolors[selector])
                selector -= 1
            if selector == 0:
                fill(fillcolors[selector])
                selector = 7
python
processing
asked on Stack Overflow Mar 1, 2017 by Wyatt • edited Mar 1, 2017 by Kevin Workman

1 Answer

3

Your first if in each case affects your second. For UP, if selector is 6, it becomes 7, and then matches selector == 7; for DOWN, if selector is 1, it becomes 0, and then matches selector == 0.

Use elif to make them exclusive:

if selector < 8:
    fill(fillcolors[selector])
    selector += 1
elif selector == 7:
    fill(fillcolors[selector])
    selector = 0
if selector > 0:
    fill(fillcolors[selector])
    selector -= 1
elif selector == 0:
    fill(fillcolors[selector])
    selector = 7

and your first condition should probably be if selector < 7 rather than 8.

answered on Stack Overflow Mar 1, 2017 by Ry-

User contributions licensed under CC BY-SA 3.0