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

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日

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab