Как скрыть конкретную точку c в pygame? - PullRequest
1 голос
/ 08 мая 2020

Я хотел бы сделать так, чтобы в этом коде после рисования новой строки старая исчезла через 2 секунды, и в течение этих 2 секунд вы не могли рисовать больше линий. Я не понимаю, почему мой код сейчас не работает. По сути, я пытаюсь использовать тик и переменную, чтобы сообщить мне, когда прошли 2 секунды, но по какой-то причине он что-то делает.

from pygame import * 

init()
size = width, height = 650, 650
screen = display.set_mode(size)

WHITE = (255,255,255)
BLACK = (0, 0, 0)
RED = (255, 100, 94)
BLUE = (112, 219, 255)
GREEN = (138, 255, 142)
YELLOW = (255, 255, 158)
color = GREEN

running = True
myClock = time.Clock()
prevprev_pos = None
prev_pos = None
cur_pos = None
start_time = None

# Game Loop
while running:
    for e in event.get(): 
        if e.type == QUIT:
            running = False
        if e.type == MOUSEBUTTONDOWN:

            if e.button == 1:                
                if cur_pos != None and prev_pos == None:  #if clicked once and not twice
                    start_time = time.get_ticks()
                    prevprev_pos = prev_pos
                    prev_pos = cur_pos
                    cur_pos = e.pos
                if prev_pos == None: #if not clicked twice 
                    cur_pos = e.pos 


            if e.button == 3:      
                if color == GREEN:
                    color = BLUE
                elif color == BLUE:
                    color = RED
                elif color == RED:
                    color = GREEN                     

    if prev_pos != None:   #when clicked twice, draw line
        if time.get_ticks() - start_time <= 2000:
            screen.fill(BLACK)
            draw.line(screen, color, prevprev_pos, prev_pos)
            draw.line(screen, color, prev_pos, cur_pos)
            draw.circle(screen, color, prev_pos, 5) 


        else:   #after 2 seconds, reset pos of clicks, and clear screen
            prev_pos = None
            cur_pos = None
            screen.fill(BLACK)


    if cur_pos != None:   #if clicked once, draw the circle
        draw.circle(screen, color, cur_pos, 5)

    display.flip()
    myClock.tick(60)

quit()

1 Ответ

1 голос
/ 08 мая 2020

Это только проверка на 2 секунды при нажатии, вам нужно проверять каждый кадр. Перемещение if prev_pos != None: из события l oop и изменение e.pos на cur_pos, казалось, почти помогло вам получить то, что вам нужно. После добавления немного здесь и там, я думаю, что получил то, что вы были после

from pygame import * 

init()
size = width, height = 650, 650
screen = display.set_mode(size)

BLACK = (0, 0, 0)
RED = (255, 100, 94)
BLUE = (112, 219, 255)
GREEN = (138, 255, 142)
YELLOW = (255, 255, 158)
color = GREEN

running = True
myClock = time.Clock()
prev_pos = None
cur_pos = None
start_time = None

# Game Loop
while running:
    for e in event.get(): 
        if e.type == QUIT:
            running = False
        if e.type == MOUSEBUTTONDOWN:
            if e.button == 1:              
                if cur_pos != None and prev_pos == None:  #if clicked once and not twice
                    start_time = time.get_ticks()
                    prev_pos = cur_pos
                    print("start")
                    cur_pos = e.pos
                if prev_pos == None: #if not clicked twice
                    cur_pos = e.pos                 

            if e.button == 3:      
                if color == GREEN:
                    color = BLUE
                elif color == BLUE:
                    color = RED
                elif color == RED:
                    color = GREEN

    if prev_pos != None:   #when clicked twice, draw line
        if time.get_ticks() - start_time <= 2000:
            screen.fill(BLACK)
            draw.line(screen, color, prev_pos, cur_pos)
            draw.circle(screen, color, prev_pos, 5) 
        else:   #after 2 seconds, reset pos of clicks, and clear screen
            prev_pos = None
            cur_pos = None
            screen.fill(BLACK)

    if cur_pos != None:   #if clicked once, draw the circle
        draw.circle(screen, color, cur_pos, 5)

    display.flip()
    myClock.tick(60)

quit()

                if prev_pos != None and prev_prev_pos == None:
                    start_time = time.get_ticks()
                    prev_pos = cur_pos
                    print("start")
                    cur_pos = e.pos
                if cur_pos != None and prev_pos == None:
                    prev_pos = cur_pos
                if prev__prev_pos == None:
                    cur_pos = e.pos   

и


if prev_prev_pos != None:   
        if time.get_ticks() - start_time <= 2000:
            screen.fill(BLACK)
            draw.line(screen, color, prev_pos, cur_pos)
            draw.circle(screen, color, prev_pos, 5) 
            draw.circle(...)
        else:
            prev_pos = None
            prev_prev_pos = None
            cur_pos = None
            screen.fill(BLACK)


from pygame import * 

init()
size = width, height = 650, 650
screen = display.set_mode(size)

BLACK = (0, 0, 0)
RED = (255, 100, 94)
BLUE = (112, 219, 255)
GREEN = (138, 255, 142)
YELLOW = (255, 255, 158)
color = GREEN

running = True
myClock = time.Clock()

start_time = None


points = [] 
times = []
max_lines = 2

# Game Loop
while running:

    screen.fill(BLACK)  #clear the screen

    for e in event.get(): 
        if e.type == QUIT:
            running = False
        if e.type == MOUSEBUTTONDOWN:
            if e.button == 1:              
                if len(points) < max_lines + 1: #if not max lines on screen
                    if len(points) > 0: #if there is already a point in list, move all across and add new pos to start
                        times.append(time.get_ticks())  
                        points.append(points[-1])
                        for i in range(len(points)-2,-1,-1):
                            points[i] = points[i - 1]
                        points[0] = mouse.get_pos()                        
                    else:  #else append first point
                        points.append(mouse.get_pos())
            if e.button == 3:      
                if color == GREEN:
                    color = BLUE
                elif color == BLUE:
                    color = RED
                elif color == RED:
                    color = GREEN

    for i in range(len(points)-1,-1,-1): #for every point in points
        draw.circle(screen,color,points[i],5)
        if i < len(points) - 1:  #after second point, draw lines
            draw.line(screen,color,points[i],points[i+1])
            if time.get_ticks() - times[i - 1] > 2000:  #check for  seconds
                del points[i + 1]    #delete last point
                del times[i - 1]    #delete the time

    display.flip()
    myClock.tick(60)

quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...