2014-01-29 4 views
1

Я делаю графический тест с использованием PyGame для моделирования развертки Кристалла дракона. Я уже сделал одну успешную версию, которая отслеживает все точки, когда они вращаются вокруг друг друга, но, очевидно, это начинает значительно замедляться после нескольких итераций. Чтобы ускорить это, я хочу просто сохранить рисованные сегменты в переменную изображения и постоянно сохранять сегмент экрана в переменной и нарисовать их, а не отслеживать множество точек. Как я могу выполнить одно из следующих действий?Как рисовать на экранном экране в PyGame

  • Розыгрыша с переменными изображениями вне экрана, а затем получает обращено на экран в нужном месте
  • Спасите часть видимого экрана в изображение переменного

Я пытался читать через некоторые документации PyGame, но я не имел никакого успеха.

Спасибо!

ответ

2

Создание дополнительного поверхностного объекта, а чертеж к нему - это решение. Затем этот поверхностный объект можно нарисовать на поверхностном объекте дисплея, как показано ниже.

Более подробная информация об объекте Surface PyGame можно найти here

import pygame, sys 

SCREEN_SIZE = (600, 400) 
BG_COLOR = (0, 0, 0) 
LINE_COLOR = (0, 255, 0) 
pygame.init() 
clock = pygame.time.Clock() # to keep the framerate down 

image1 = pygame.Surface((50, 50)) 
image2 = pygame.Surface((50, 50)) 
image1.set_colorkey((0, 0, 0)) # The default background color is black 
image2.set_colorkey((0, 0, 0)) # and I want drawings with transparency 

screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32) 
screen.fill(BG_COLOR) 

# Draw to two different images off-screen 
pygame.draw.line(image1, LINE_COLOR, (0, 0), (49, 49)) 
pygame.draw.line(image2, LINE_COLOR, (49, 0), (0, 49)) 

# Optimize the images after they're drawn 
image1.convert() 
image2.convert() 

# Get the area in the middle of the visible screen where our images would fit 
draw_area = image1.get_rect().move(SCREEN_SIZE[0]/2 - 25, 
            SCREEN_SIZE[1]/2 - 25) 

# Draw our two off-screen images to the visible screen 
screen.blit(image1, draw_area) 
screen.blit(image2, draw_area) 

# Display changes to the visible screen 
pygame.display.flip() 

# Keep the window from closing as soon as it's finished drawing 
# Close the window gracefully upon hitting the close button 
while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit(0) 
    clock.tick(30) 
Смежные вопросы