在pygame中使用move_ip移动多边形

时间:2015-07-18 12:00:56

标签: python pygame

我无法在pygame中使用函数move_ip()移动多边形,如果我绘制一个矩形,但是不能使用多边形,则代码效果很好。当我按任意箭头键时它没有响应。

我认为我不需要太空飞船矩形,因为多边形是pygame,但似乎不对,我不知道,我弄得一团糟

这是我的pygame代码:

import sys, os
import pygame
from pygame.locals import *
import numpy as np

if sys.platform in ["win32","win64"]: os.environ["SDL_VIDEO_CENTERED"]='1'

width_screen = 600
height_screen = 480
screen_size = (width_screen, height_screen)
positionx_screen = 0
positiony_screen = 32
title_window = 'ASTEROIDS'

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

spaceship = pygame.Rect(200, 475, 120, 20)

def quit_screen(event):
    if event.type == QUIT:
        pygame.quit()
        sys.exit()


class Spaceship():
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.colour = WHITE
        self.thickness = 0
        self.movex = 20

    def draw_nave(self):
        vertices = np.array([[screen_size[0]/2, screen_size[1] /2 - 30],[screen_size[0]/2 + 15, screen_size[1]/2],
                             [screen_size[0]/2-15, screen_size[1] / 2]])
        pygame.draw.polygon(screen_game, self.colour, vertices, self.thickness)


    def move_spaceship_right(self):
        spaceship.move_ip(self.movex, 0)


    def move_spaceship_left(self):
        spaceship.move_ip(- self.movex, 0)


def game():
    pygame.init()
    running = True
    global screen_game
    screen_game = pygame.display.set_mode(screen_size,
                                          positionx_screen, positiony_screen)
    pygame.display.set_caption(title_window)

    clock = pygame.time.Clock()

    my_spaceship = Spaceship(200, 475, 120, 20)

    screen_game.fill(BLACK)
    while running:
        screen_game.fill(BLACK)
        for event in pygame.event.get():
            quit_screen(event)
            if event.type == pygame.KEYDOWN:
                if event.key == K_RIGHT:
                    my_spaceship.move_spaceship_right()
                if event.key == K_LEFT:
                    my_spaceship.move_spaceship_left()


        my_spaceship.draw_nave()
        pygame.display.flip()
        clock.tick(60)

if __name__ == "__main__":
    try:
        game()
    except:
        pygame.quit()

由于

1 个答案:

答案 0 :(得分:0)

问题是您的Rect与您绘制的多边形无关。你只需每次都在相同的位置绘制它。

最好创建一次Surface,在Surface上绘制一次多边形,并在绘制新spaceship时使用Surface作为位置。

我建议从Sprite进行子类化,在Surface函数中创建__init__,并将Rect保存在self.rect而不是spaceship变量。

然后使用draw的{​​{1}}功能或将Sprite放入Sprite