Рисунок от руки в Pygame - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь провести эксперимент с использованием Pygame. Я пытаюсь написать простой кусок кода, чтобы можно было рисовать на экране с помощью мыши. Это код, который я написал:

import pygame
import pygame.time
import graphics

def init_surface():
    DISPLAY_SURFACE = pygame.display.set_mode((640,480), pygame.DOUBLEBUF)
    return graphics.ViewportSurface(DISPLAY_SURFACE)

def init_mouse_pointer():
    mouse_pointer_color = pygame.Color(255, 64, 64)
    mouse_pointer = graphics.MousePointer(5, mouse_pointer_color, graphics.Point(0,0))
    return mouse_pointer, mouse_pointer_color

def main():
    pygame.init()

    window_surface = init_surface()

    center_point = graphics.Point(0,0)

    mouse_pointer, mouse_pointer_color = init_mouse_pointer()

    color = pygame.Color(255, 255, 255)
    clock = pygame.time.Clock()

    while True:
        # Event handling
        for event in pygame.event.get():
            if event.type == pygame.NOEVENT:
                continue
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    sys.exit()

        # Update mouse status  
        mouse_position = pygame.mouse.get_pos()     
        mouse_position_viewport = window_surface.convert_coordinate_from_display_to_viewport(graphics.Point(mouse_position[0], mouse_position[1]))
        mouse_pointer.set_position(mouse_position_viewport)

        # Update screen
        window_surface.draw_point(center_point, color)
        mouse_pointer.draw(window_surface)
        window_surface.flip()
        clock.tick(180)

if __name__ == '__main__':
    main()

Проблема в том, что при перемещении мыши я получаю не непрерывную линию, а пунктирную линию, как вы можете видеть на следующем рисунке:

enter image description here По какой причине линия не является непрерывной? Что-то не так в моем коде? Я не понимаю, где проблема. Какая у тебя идея?

1 Ответ

0 голосов
/ 28 апреля 2018

Как сказал skrx, мышь просто движется слишком быстро. Это случается много раз, и мне приходилось сталкиваться с этой проблемой. Решение это соединить точки линией. Посмотрите на это:

surface = pygame.display.set_mode((640, 480))
dots = []

while True:
    mouse_pos = pygame.mouse.get_pos()
    dots.append(mouse_pos)
    pygame.draw.lines(surface, (255, 255, 255), False, dots)  # use this, much more efficient then drawing every line between the points
    # keep closed as False

Что он делает, так это добавляет новый набор точек к каждой петле и с pygame.draw.lines соединяет их все. Надеюсь, это поможет.

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