0

我正在制作一个根据屏幕宽度显示玩家和敌人得分的 Pong 游戏。两个分数都应与屏幕中间保持 20 像素的距离,一切正常,但我遇到了一些问题:

首先,我以一种玩家可以在左右两边的方式制作游戏。初始化分数时,一些属性将传递给 Text 类(如topcenterx),这些属性将定义应放置的位置。我试着这样做:

self.player_score = Text(self.player.score, 32, WHITE,
                         top = 10, right = SCREEN_WIDTH/2 - 20)
self.enemy_score = Text(self.player.score, 32, WHITE,
                         top = 10, left = SCREEN_WIDTH/2 + 20)

但由于球员和双方可以改变这不是一个好的解决方案。

其次,我希望文本始终与屏幕中心保持相同的距离,但是当分数增长到两位或更多位数时,文本会占用更多空间。对于右侧,它不是问题,但对于左侧,文本越来越接近屏幕中间。这是我的 Text 类中的 set_value 方法:

def set_value(self, new_value):
        if new_value != self._value: 
            self._value = new_value
            self.image = self._create_surface()
            self.rect = self.image.get_rect(top     = self.rect.top,
                                            bottom  = self.rect.bottom,
                                            left    = self.rect.left,
                                            right   = self.rect.right,
                                            centerx = self.rect.centerx,
                                            centery = self.rect.centery)

我该如何解决这些问题?

4

2 回答 2

1

我希望文本始终与屏幕中心保持相同的距离,但是当分数增长到两位或更多数字时,文本会占用更多空间

要相对于矩形的中心偏移,可以使用虚拟属性。确保在重新渲染缓存文本时更新矩形,并获取它的新矩形宽度

对于左侧的分数:

left_score.rect.centery = screen_rect.centery
left_score.rect.right = screen_rect.centerx - 20
于 2013-09-18T03:46:22.847 回答
1

您为什么不调用它们self.score_leftself.score_right并且根据玩家的一方,将值放在左侧或右侧实例上:

# prepare the Text fields
self.score_right = Text(left, 32, WHITE, top = 10, right=SCREEN_WIDTH/2-20)
self.score_left = Text(right, 32, WHITE, top= 10, left=SCREEN_WIDTH/2+20)

# then, when updating:
a, b = playerScore, enemyScore
if playerSide == "right": a, b = b, a   # swap `a` and `b`
self.score_left.text = a
self.score_right.text = b

对于第二个,要右对齐文本,您可以在x = right - textWidth. 您可以使用 Font.size(text).

于 2013-09-18T02:19:36.437 回答