You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TDS游戏中如何实现朝玩家朝向发射投射物且从玩家中心生成

实现朝玩家朝向发射子弹的修改步骤

你只需要按下面3步调整现有代码即可完成功能:

步骤1:完善Bullet类,添加方向属性与移动逻辑

修改后的Bullet类代码如下,新增了角度参数用来计算飞行方向,同时添加update方法处理子弹移动与自动销毁:

class Bullet(pygame.sprite.Sprite):
    def __init__(self, x , y, angle):
        super().__init__()
        self.image = pygame.image.load('graphics/weapons/bullets/default_bullet.png').convert_alpha()
        self.rect = self.image.get_rect(center = (x,y))
        self.speed = 15
        # 计算子弹飞行方向向量,角度处理和你现有的准星逻辑保持一致
        self.dir_vec = pygame.math.Vector2()
        self.dir_vec.from_polar((self.speed, -angle))
    
    def update(self):
        # 按方向向量移动子弹
        self.rect.x += self.dir_vec.x
        self.rect.y += self.dir_vec.y
        # 子弹飞出屏幕边界后自动销毁,避免内存占用越来越高
        if self.rect.right < 0 or self.rect.left > 800 or self.rect.bottom <0 or self.rect.top >400:
            self.kill()

步骤2:添加射击触发逻辑

在主循环的事件检测块中添加点击鼠标左键发射子弹的逻辑,子弹生成位置直接取玩家中心,朝向取玩家当前的旋转角度:

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        # 新增:检测鼠标左键点击触发射击
        if event.type == MOUSEBUTTONDOWN and event.button == 1:
            # 从玩家中心生成子弹,传入玩家当前的旋转角度
            new_bullet = Bullet(player_sprite.rect.centerx, player_sprite.rect.centery, player_sprite.rotate_vel)
            bullet_group.add(new_bullet)

如果不想用鼠标触发,也可以改成按键触发,比如把判断条件改成event.type == pygame.KEYDOWN and event.key == pygame.K_f即可。

步骤3:主循环中添加子弹组的更新与绘制

在主循环的绘制部分,调用子弹组的update和draw方法:

#screen
    screen.fill('grey')
    #player sprite funtions
    player.update()
    # 新增:更新并绘制所有子弹
    bullet_group.update()
    bullet_group.draw(screen)

    clock.tick(FPS)
    pygame.display.update()

以上修改全部完成后,运行游戏即可实现从玩家中心朝当前朝向发射子弹的效果,你也可以根据需求调整子弹速度、触发按键等参数。

内容的提问来源于stack exchange,提问作者Taha saqib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:57:05