当前位置: 首页 > 知识库问答 >
问题:

为什么我的角色同时混合了两种不同的形象

蒋浩
2023-03-14

我在做一个游戏,一个角色要显示一个枪动画,这取决于他所面对的位置,这里的代码决定了

class Player(object):

    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.velo = 8
        self.left = False
        self.right = False
        self.walkcount = 0
        self.Idlecount = 0
        self.guncount = 0
        self.gunisfired = False
        self.isIdle = False
        self.standing = True

    def draw(self, screen):
        #draws all the animations to the screen
        if self.walkcount + 1 >= 27:
            self.walkcount = 0
        elif self.Idlecount + 1 >= 27:
            self.Idlecount = 0
        if not(self.standing):
            if self.left:
                screen.blit(walkLeft[self.walkcount//3], (self.x,self.y))
                self.walkcount += 1
                if self.gunisfired == True:
                    if self.guncount//5 >= len(ShootR):
                        self.guncount = 0
                        self.gunisfired == False
                    screen.blit(ShootR[self.guncount//5], (self.x,self.y))
                    self.guncount += 1

            if self.right:
                screen.blit(walkRight[self.walkcount//3], (self.x,self.y))
                self.walkcount += 1
                if self.gunisfired == True:
                    if self.guncount//5 >= len(ShootR):
                        self.guncount = 0
                        self.gunisfired == False
                    screen.blit(ShootR[self.guncount//5], (self.x,self.y))
                    self.guncount += 1
        else:
            if self.left:
                if self.isIdle == True:
                    if self.Idlecount//3 >= len(IdleL):
                        self.Idlecount = 0
                        self.isIdle == False
                    screen.blit(IdleL[self.Idlecount//3], (self.x,self.y))
                    self.Idlecount += 1
                if self.gunisfired == True:
                    if self.guncount//5 >= len(ShootL):
                        self.guncount = 0
                        self.gunisfired == False
                    screen.blit(ShootL[self.guncount//5], (self.x,self.y))
                    self.guncount += 1
            else:
                if self.Idlecount//3 >= len(IdleR):
                    self.Idlecount = 0
                    self.isIdle == False
                screen.blit(IdleR[self.Idlecount//3], (self.x,self.y))
                self.Idlecount += 1
                if self.gunisfired == True:
                    if self.guncount//5 >= len(ShootR):
                        self.guncount = 0
                        self.gunisfired == False
                    screen.blit(ShootR[self.guncount//5], (self.x,self.y))
                    self.guncount += 1

        pygame.display.update()

下面是键盘绑定的代码

man = Player(300, 508, 64, 64)
run = True
while run:
    clock.tick(27)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    
    if keys[pygame.K_LEFT] and man.x > man.velo:
        man.x -= man.velo
        man.right = False
        man.left = True
        man.Idlecount = 0
        man.guncount = 0
        man.gunisfired = False
        man.standing = False
    elif keys[pygame.K_RIGHT] and man.x < 600 - man.width - man.velo:
        man.x += man.velo
        man.right = True
        man.left = False
        man.Idlecount = 0
        man.guncount = 0
        man.gunisfired = False
        man.standing = False
    elif keys[pygame.K_SPACE]:
        man.gunisfired = True
        man.isIdle = False
        man.standing = True
        man.Idlecount = 0
    else:
        man.walkcount = 0
        man.isIdle = True
        man.guncount = 0
        man.gunisfired = False
        man.standing = True

丁字是枪的图像是工作时,他是面向左,但当它是右,似乎与空闲动画的第一个图像。谁能帮帮我。

共有1个答案

司迪
2023-03-14

在方法 的其他情况下,缺少 :

class Player(object):
    # [...]

    def draw(self, screen):
        # [...]

        if not(self.standing):
            # [...]

        else:
            if self.left:
               # [...]

            else:

                if self.isIdle == True:  # <---- this is missing
                    if self.Idlecount//3 >= len(IdleR):
                        self.Idlecount = 0
                        self.isIdle == False
                    screen.blit(IdleR[self.Idlecount//3], (self.x,self.y))
                    self.Idlecount += 1
                if self.gunisfired == True:
                    if self.guncount//5 >= len(ShootR):
                        self.guncount = 0
                        self.gunisfired == False
                    screen.blit(ShootR[self.guncount//5], (self.x,self.y))
                    self.guncount += 1
 类似资料:
  • 和 对于同一 IP, 实际上, nginx 接收请求和发送给后台的服务器的请求的限速都是 每分钟 30 条吧, 这两者有什么区别了? 各位大佬帮忙看看

  • 所以С能否请您向我解释一下,正确的方法是否是为不同类型的用户提供不同的DBContext。 例如:我们有两种方法的ApicController: 之后,每个命令都依赖于具有不同配置的不同服务/DbContext。例如: 我觉得我错过了什么或者有更好的解决办法

  • 我最常看到基于角色的访问控制(RBAC)需要权限才能执行操作。为主题分配了授予其权限的角色。 我最近遇到了一个授权库,它没有权限和角色的单独概念。主体仍然被授予角色,但是授权检查直接对角色进行,并且没有权限的概念。我担心这种设计有缺点,因为我很少看到它。以这种方式组合角色和权限可能会出现什么问题?在这个系统中,什么事情更困难?

  • 问题内容: 我有以下代码… 这段代码看起来很漂亮。正在调用change事件,并且正确显示了新的selectedDate。 但是我仍然看到帖子,其中开发人员正在使用各种箍(主要是指令)来使datepicker在Angular中工作。 我在这里想念什么吗? 问题答案: 像这样使用JQuery意味着您没有在Angular中以声明方式表示应用程序在HTML中的功能。 从角度首页: AngularJS允许您

  • 这是代码: 如果我在我的机器()或这里()上尝试: 相反,这里(): 这是不同的。这是由于机器厄普西隆?还是编译器精度标志?还是不同的评估? 造成这种漂移的原因是什么?问题似乎出现在函数中(因为其他值似乎相同)。

  • 问题内容: 如何在RxSwift中合并2种不同类型的? 例如: 由于类型参数差异而无法使用。 问题答案: 对他们来说,他们需要具有相同的类型。 因此,一种选择是丢弃它们的类型信息并转换为。现在可以将它们合并: 输出: a b 1 2 c 另一种选择是将其包装在一个枚举中: 输出: next元素是STRING: 下一个元素是STRING:b next元素是INT:1 next元素是INT:2 nex

  • 我在Cplex中使用Python API来解决一个线性编程问题。使用Cplex时,我的结果如下: 但随后我将LP prolem保存为LP文件,并再次使用Cplex进行求解,结果与第一个略有不同: 下面是我的功能:

  • 一个进程不是只能被一个进程使用吗?