bilishikaoshi 2022-03-15 20:35 采纳率: 85.7%
浏览 111
已结题

pygame,图片不断重复

问题遇到的现象

坦克图片不断重叠

img

问题相关代码
import pygame
击杀字的颜色red=pygame.Color(255,0,0)
class Gamesubject():  # Gamesubject=游戏主体
    Window=None
    SCREEN_WIDTH = 800
    SCREEN_HEIGHT = 500
    #游戏主窗口
    #创建我方坦克
    TANK_P1 = None

    def __init__(self):
        pass
    def Startgame(self):  # Startgame=开始游戏
            pygame.display.init()
            Gamesubject.Window = pygame.display.set_mode([Gamesubject.SCREEN_WIDTH, Gamesubject.SCREEN_HEIGHT])
            #创建窗口并加载
            Gamesubject.TANK_P1 = Tank(350,400)
            #创建我方坦克
            pygame.display.set_caption('坦克大战v1.0') 
            # 设置游戏窗口标题
            while True:
                #于循环中完成事件的获取
                self.getEvent()
                #绘制的文字粘贴到窗口中
                Gamesubject.Window.blit(self.getTextSurface('剩余敌方坦克%d辆' % 5), (5, 5))
                #将我方坦克加载到窗口中
                Gamesubject.TANK_P1.DisplayTank()
                pygame.display.update()
    def getEvent(self):#获取鼠标,键盘事件
        #获取所有事件
        eventList =pygame.event.get()
        #对所有事件进行处理
        for event in eventList:
            if event.type == pygame.QUIT:#判断退出键
                self.Endgame()
            if event.type == pygame.KEYDOWN:#修改坦克方向,完成坦克移动
                if event.key == pygame.K_LEFT:
                    print('坦克向左移动一步')
                    Gamesubject.TANK_P1.direction = 'L'
                    Gamesubject.TANK_P1.move()
                elif event.key == pygame.K_RIGHT:
                    print('坦克向右移动一步')
                    Gamesubject.TANK_P1.direction = 'R'
                    Gamesubject.TANK_P1.move()
                elif event.key == pygame.K_UP:
                    print('坦克向上移动一步')
                    Gamesubject.TANK_P1.direction = 'U'
                    Gamesubject.TANK_P1.move()
                elif event.key == pygame.K_DOWN:
                    print('坦克向下移动一步')
                    Gamesubject.TANK_P1.direction = 'D'
                    Gamesubject.TANK_P1.move()
                elif event.key == pygame.K_SPACE:
                    print('发射子弹')
    #绘制左上角文字
    def getTextSurface(self,text):
        pygame.font.init()
        #fontList = pygame.font.get_fonts()
        #print(fontList)
        font = pygame.font.SysFont('kaiti',18)
        textSureface = font.render(text, True, 击杀字的颜色red)
        return textSureface

    #开始游戏方法
    def Endgame(self):  # Endgame=结束游戏
        print('谢谢游玩')
        exit()#结束python解释器
    #结束游戏方法
class Tank():#Tank=坦克
    def __init__(self,left, top):
        self.images = {
            'U': pygame.image.load("image\enemy3U.gif"),
            'D': pygame.image.load("image\enemy3D.gif"),
            'L': pygame.image.load("image\enemy3L.gif"),
            'R': pygame.image.load("image\enemy3R.gif")

        }
        self.direction = 'U'
        self.image = self.images[self.direction]
        #坦克所在的区域
        self.rect = self.image.get_rect()
        #指导坦克初始化位置 分别距x,y轴的位置
        self.rect.left = left
        self.rect.top = top
        self.speed = 5
        #新增速度属性

    def move(self):  # move=移动
        if self.direction == 'L':
            self.rect.left -= self.speed
        elif self.direction == 'R':
            self.rect.left += self.speed
        elif self.direction == 'U':
            self.rect.top -= self.speed
        elif self.direction == 'D':
            self.rect.top += self.speed
    #坦克的移动
    def shot(self):#shot=射击
        pass
    #坦克的射击
    def DisplayTank(self):# Display=展示
        self.image = self.images[self.direction]
    #1.重新设置坦克图片 
        Gamesubject.Window.blit(self.image,self.rect)
    #2.将坦克加入到窗口中
    #展示坦克(将坦克这个图片显示到窗口中)
class MyTank(Tank):# MyTank=我方坦克
    def __init__(self):
        pass
class Enemy(Tank):#Enemy=敌方坦克
    def __init__(self):
        pass
class bullet():#bullet=子弹
    def __init__(self,):
        pass
    def move(self):# move=移动
        pass
    #子弹的移动
    def Displaybullet():  # Display=展示
        pass
    #展示子弹
class Blasteffect():#Blasteffect=爆炸效果
    def __init__(self):
        pass
    def DisplayBlasteffect():  # Display=展示
        pass
    #展示爆炸效果
class wall():#wall=墙壁
    def __init__(self):
        pass
    def Displaywall():  # Display=展示
        pass
    #展示墙壁
class music():#music=音效
    def __init__(self):
        pass
    def play():
        pass

    #开始播放音乐
Gamesubject().Startgame()


如何让图片不重复?
  • 写回答

2条回答 默认 最新

  • chuifengde 2022-03-15 22:12
    关注
    ...
     while True:
                #于循环中完成事件的获取
                self.getEvent()
                Gamesubject.Window.fill((0, 0, 0))
                #绘制的文字粘贴到窗口中
                Gamesubject.Window.blit(self.getTextSurface('剩余敌方坦克%d辆' % 5), (5, 5))
                #将我方坦克加载到窗口中
            
                Gamesubject.TANK_P1.DisplayTank()
                pygame.display.update()
    
    ...
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 3月15日

悬赏问题

  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
  • ¥15 SQL Server analysis services 服务安装失败
  • ¥15 用html创建一个个人网页,提供网页页面
  • ¥20 java项目连接SqlServer数据库报错
  • ¥15 基于面向对象的图书馆借阅管理系统
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥20 centos linux 7.9安装php8.2.18不支持mysqli模块的问题
  • ¥15 stata空间计量LM检验
  • ¥15 关于k8s node节点被释放后如何驱逐节点并添加新节点
  • ¥15 subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1