首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改类中变量的值[Python]

如何更改类中变量的值[Python]
EN

Stack Overflow用户
提问于 2018-08-18 03:25:32
回答 1查看 43关注 0票数 0

我想添加一个更新self.ScoreP变量的值的函数

我在屏幕上显示了一个数字,它打印出ScoreP (updateScoreBoard())的当前值。它是准确的和完美的工作,但我也打印出getScoreP。无论当前分数是多少,ScoreP都会打印0。

代码语言:javascript
复制
            import pygame

            class ScoreBoard():

                def __init__(self):
                    self.WIDTH = 1024
                    self.HEIGHT = 576
                    self.WHITE = (255, 255, 255)
                    self.BLACK = (0,0,0)
                    self.minFont = "font/Minecraft.ttf"
                    self.scoreFont = pygame.font.Font(self.minFont, 75)
                    self.ScoreP = 0
                    self.ScorePStr = str(self.ScoreP)
                    self.ScoreO = 0
                    self.ScoreOStr = str(self.ScoreO)
                    self.ScorePWidth, self.ScorePHeight = self.scoreFont.size(str(self.ScoreP))
                    self.ScoreOWidth, self.ScoreOHeight  = self.scoreFont.size(str(self.ScoreO))
                    self.ScorePX = (self.WIDTH/2)-self.ScorePWidth*2
                    self.ScorePY = 10
                    self.ScoreOX = self.WIDTH/2 + self.ScoreOWidth
                    self.ScoreOY = 10






                def updateScoreBoard(self, screen):
                        pygame.draw.rect(screen, self.BLACK, [self.ScorePX, self.ScorePY, self.ScorePWidth, self.ScorePHeight])
                        scorePRender = self.scoreFont.render("{}".format(self.ScoreP), False, self.WHITE)
                        screen.blit(scorePRender, (self.ScorePX,  self.ScorePY))

                        pygame.draw.rect(screen, self.BLACK, [self.ScoreOX, self.ScoreOY, self.ScoreOWidth, self.ScoreOHeight])
                        scoreORender = self.scoreFont.render("{}".format(self.ScoreO), False, self.WHITE)
                        screen.blit(scoreORender, (self.ScoreOX,  self.ScoreOY))
                        pygame.display.flip()


                def updateScore(self, playerIncrease, opponentIncrease):
                    self.ScoreP += playerIncrease
                    self.ScorePStr = self.ScoreP

                    self.ScoreO += opponentIncrease 
                    self.ScoreOStr = self.ScoreO


                def getScoreP(self):
                    return self.ScoreP

但是,getScore函数会打印出0,尽管游戏会正确跟踪并重绘比分

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-18 04:09:34

在这里我不认为我改变了太多,但它是有效的。另外,下次给我们你的全部代码,包括你如何测试它,因为问题可能就在那里。我在最后添加了一个测试,你可以删除它。

代码语言:javascript
复制
import pygame
import random
class ScoreBoard:
    def __init__(self,w,h):
        pygame.font.init()
        self.WIDTH = w
        self.HEIGHT = h
        self.screen = pygame.display.set_mode((1024,576))
        self.WHITE = (255, 255, 255)
        self.BLACK = (0,0,0)
        self.minFont = None
        self.scoreFont = pygame.font.Font(self.minFont, 75)
        self.ScoreP = 0
        self.ScoreO = 0
        self.ScorePWidth, self.ScorePHeight = self.scoreFont.size(str(self.ScoreP))
        self.ScoreOWidth, self.ScoreOHeight  = self.scoreFont.size(str(self.ScoreO))
        self.ScorePX = (self.WIDTH/2)-self.ScorePWidth*2
        self.ScorePY = 10
        self.ScoreOX = self.WIDTH/2 + self.ScoreOWidth
        self.ScoreOY = 10
    def updateScoreBoard(self):
        self.ScorePWidth, self.ScorePHeight = self.scoreFont.size(str(int(self.ScoreP)))
        self.ScoreOWidth, self.ScoreOHeight  = self.scoreFont.size(str(int(self.ScoreO)))
        screen = self.screen    
        screen.fill(self.WHITE)

        pygame.draw.rect(screen, self.BLACK, [self.ScorePX, self.ScorePY, self.ScorePWidth, self.ScorePHeight])
        scorePRender = self.scoreFont.render("{}".format(int(self.ScoreP)), False, self.WHITE)
        screen.blit(scorePRender, (self.ScorePX,  self.ScorePY))

        pygame.draw.rect(screen, self.BLACK, [self.ScoreOX, self.ScoreOY, self.ScoreOWidth, self.ScoreOHeight])
        scoreORender = self.scoreFont.render(str(int(self.ScoreO)), False, self.WHITE) 
        screen.blit(scoreORender, (self.ScoreOX,  self.ScoreOY))

        pygame.display.flip()       


    def updateScore(self, playerIncrease, opponentIncrease):
        self.ScoreP += playerIncrease
        self.ScoreO += opponentIncrease 


    def getScoreP(self):
        return self.ScoreP
running = True
a = ScoreBoard(1024,576) 
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            break   
    a.updateScore(random.random()/10,random.random()/10)
    a.updateScoreBoard()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51901753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档