• 周四. 4 月 23rd, 2026

物嫩软件资讯网

软件资讯来物嫩

基于pygame的射击小游戏制作(二)射击子弹

admin@wunen

5 月 4, 2025



在本篇文章中,将学习如何创建子弹移动的元素,如何在屏幕中让子弹向上飞驰,如何删除超过屏幕边界的子弹。



1.编程思路



1.1 创建一个子弹

功能描述:玩家将按空格键时发射子弹,子弹在屏幕中向上穿行,抵达屏幕边缘后消失。

在settings.py文件中,的init方法中加入子弹(Bullet)的值:速度,宽度、高度、颜色、允许发射的最大子弹数量

#子弹设置
        self.bullet_speed_factor = 1
        self.bullet_width = 3
        self.bullet_height = 15
        self.bullet_color = (60,60,60)
        self.bullets_allowed = 3

在project中新建一个bullet.py ,用来存储Bullet类。该类主要用于在游戏中同时操作编组中的所有元素,为创建子弹实例,传递参数,并调用了super()来继承Sprite。

用小矩形框来代替子弹,使用pygame.Rect(),从空白创建一个宽为3,高为15像素的矩形,子弹的初始位置取决于飞船的当前位置,并应从飞船顶部射出,将子弹的top属性设置为飞船的top属性,让子弹看起来像是从飞船中射击的。将子弹的y坐标设为小数,并把子弹的颜色和速度设置分别存储在self.color和self.speed_factor中。

import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
    """一个对飞船发射的子弹进行管理的类"""
    def __init__(self, ai_settings,screen, ship):
        """在飞船所处的位置创建一个子弹对象"""
        super(Bullet, self).__init__()
        self.screen = screen
        #在(0,0)处创建一个表示子弹的矩形,再设置正确的位置
        self.rect = pygame.Rect(0, 0, ai_settings.bullet_width,
                                 ai_settings.bullet_height)
        self.rect.centerx = ship.rect.centerx
        self.rect.top = ship.rect.top
        #储存用小数表示子弹的位置
        self.y = float(self.rect.y)
        self.color = ai_settings.bullet_color
        self.speed_factor = ai_settings.bullet_speed_factor


1.2 将子弹发射出来

接下来我们要让子弹更新在屏幕中,方法update()管理子弹的位置。发射出去后,子弹在屏幕中向上移动,这意味着y坐标将不断减小,因此为更新子弹的位置,我们从self.y中减去self.speed_factor的值。子弹发射后,其x坐标始终不变,因此子弹将沿直线垂直地往上穿行。

调用draw_bullet()来绘制子弹。self.color中的颜色填充表示子弹占据的屏幕部分。

def update(self):
    """向上移动子弹"""
    #更新表示子弹位置的小数值
    self.y -= self.speed_factor
    #更新表示子弹的rect的位置
    self.rect.y = self.y

def draw_bullet(self):
    """在屏幕上绘制子弹"""
    pygame.draw.rect(self.screen, self.color, self.rect)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注