Python Pygame 按键创建矩形或任意图形

标签 python pygame

首先我创建一个矩形并将它放在屏幕中央 第二,我想按一个键来显示这个矩形 当我执行 bullet.bullet_move(setting)bullet.draw_bullet(setting) 时没有任何反应 代码如下:

#! /usr/bin/python
import pygame as p
import sys

class Setting():
    def __init__(self,width,height):
        self.w=width
        self.h=height
        self.flag=p.RESIZABLE
        self.color=(255,255,255)
        self.speed=1
        self.screen=p.display.set_mode((self.w,self.h),self.flag)
        p.display.set_caption("Bullet")
        self.bullet_s=1
        self.bullet_w=100
        self.bullet_h=300
        self.bullet_c=(0,0,0)

class Bullet(p.sprite.Sprite):
    def __init__(self,setting):
        super().__init__()
        self.screen_rect=setting.screen.get_rect()
        self.screen_center=self.screen_rect.center

        self.bullet=""
        self.bullet.center=self.screen_center
        self.color=setting.bullet_c
        self.speed=setting.bullet_s
#        self.centery=float(self.bullet.centery)
    def bullet_move(self,setting):
        for event in p.event.get():
            if event.type == p.QUIT:
                sys.exit()
            elif event.type == p.KEYDOWN:
                if event.key ==p.K_UP:
                    self.bullet=p.Rect((0,0),(setting.bullet_w,setting.bullet_h))
                    self.bullet.center=self.screen_center
#        self.y -= self.speed
#        self.bullet.y=self.y
    def draw_bullet(self,setting):
        p.draw.rect(setting.screen,self.color,self.bullet)


def game():
    p.init()
    setting=Setting(1200,800)
    bullet=Bullet(setting)


    while True:
       bullet.bullet_move(setting)
       setting.screen.fill((255,0,0))
       bullet.draw_bullet(setting)
       p.display.flip()
game()

最佳答案

bullet_move 是进行事件处理的错误位置。删除它!

class Bullet(p.sprite.Sprite):
    def __init__(self,setting):
        super().__init__()
        self.screen_rect=setting.screen.get_rect()
        self.screen_center=self.screen_rect.center
        self.bullet=p.Rect((0,0),(setting.bullet_w,setting.bullet_h))
        self.bullet.center=self.screen_center
        self.color=setting.bullet_c
        self.speed=setting.bullet_s
        self.centery=float(self.bullet.centery)
    def bullet_move(self,setting):
         self.bullet.y -= self.speed
    def draw_bullet(self,setting):
        p.draw.rect(setting.screen,self.color,self.bullet)

创建一个项目符号列表 (bullets = []) 并在按下 UP 时产生一个新的项目符号。创建一个项目符号并将其.appendbullets。可以在 for 循环中移动 (bullet_move) 和绘制 (draw_bullet) 子弹:

def game():
    p.init()
    setting=Setting(1200,800)

    bullets = []
    while True:
       for event in p.event.get():
            if event.type == p.QUIT:
                sys.exit()
            elif event.type == p.KEYDOWN:
                if event.key == p.K_UP:
                    bullets.append(Bullet(setting))

       for bullet in bullets:
           bullet.bullet_move(setting)
       setting.screen.fill((255,0,0))
       for bullet in bullets:
           bullet.draw_bullet(setting)
       p.display.flip()

或者使用 pygame.sprite.Group :

def game():
    p.init()
    setting=Setting(1200,800)

    bullets = p.sprite.Group()
    while True:
       for event in p.event.get():
            if event.type == p.QUIT:
                sys.exit()
            elif event.type == p.KEYDOWN:
                if event.key == p.K_UP:
                    bullets.add(Bullet(setting))

    # [...]

关于Python Pygame 按键创建矩形或任意图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58985625/

相关文章:

python - Pygame:重新缩放像素大小

python - 如何使用 pygame.image 加载 PNG 文件?

python - Pythons HTMLParser 可以编辑/更改 HTML 元素 innerText 还是只能读取它

java - 如何快速构建Web Application?

python - 删除 Django DB 中的重复行

python - 如何实时增加或减少声音的音量(dB)?

python - 我正在流血图像,但它在一毫秒左右后消失

python - Pygame - 使用 Time 打印秒数

python - 如何旋转 pandas 数据框,使多列中的唯一值成为新列?

python - 如何将函数应用于 numpy 中的滚动窗口?