首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法以更简洁的方式重构它?特别是7-11行与39行的关系?使用Pygame

有没有办法以更简洁的方式重构它?特别是7-11行与39行的关系?使用Pygame
EN

Stack Overflow用户
提问于 2020-05-11 09:08:00
回答 2查看 45关注 0票数 2

我正在教五年级的学生,所以它需要尽可能简单。但是,正如您在代码行39中看到的那样,我使用的是函数参数的存储变量。然而,有没有更简单的方法呢?假设我想放入第二个字符,我必须再次放入这个长长的变量列表?

我应该创建一个字符类吗?如果是这样,我该如何将其插入到参数中?

代码语言:javascript
复制
import pygame       
pygame.init()        

win = pygame.display.set_mode((1000, 1000)) 

#Character Details
x = 100 
y = 5  
width = 10
height = 10
vel = 20 

run = True      
while run:
  pygame.time.delay(100)     

  for event in pygame.event.get():    
    if event.type == pygame.QUIT: 
      run = False

#Movement Details
  keys = pygame.key.get_pressed()

  if keys[pygame.K_LEFT]:     
    x -= vel                  #

  if keys[pygame.K_RIGHT]:
    x += vel

  if keys[pygame.K_UP]:
    y -= vel

  if keys[pygame.K_DOWN]:
    y += vel

#Without this character movement is additive.
  win.fill((0, 0, 0)) 

  pygame.draw.rect(win, (245, 100, 50), (x, y, width, height))

  pygame.display.update()
    ```
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-11 09:33:25

您可以将变量设置为Rect对象。

代码语言:javascript
复制
player1 = pygame.Rect(100,5,10,10) #x,y,w,h
player2 = pygame.Rect(200,20,10,10)
...
pygame.draw.rect(win,(245,100,50),player1)
pygame.draw.rect(win,(245,100,50),player2)

您也可以使用列表,它也可以很好地工作,但是使用Rect,它会为您计算额外的属性,如

代码语言:javascript
复制
player1.center #get center of the player, both x and y
player.right #get right side of player, same as x position + width

您也可以使用这些工具进行移动

代码语言:javascript
复制
player1.center = (200,200) #moves the center to (200,200)

但是你需要为每个玩家设置一个速度变量,你可以有一个列表

票数 2
EN

Stack Overflow用户

发布于 2020-05-12 04:05:47

@The Big Kahuna已经建议你可以用一个代表球员的rect来代替pygame.draw.rect()的一个参数。这特别回答了你的问题,你应该这么做。

既然你在向别人传授这一点,我也想提出一些其他建议。

第一个是对“大卡哈纳”所说的内容的调整。他正确地建议你应该使用pygame rect类,你应该这样做。Rect允许您通过调用位置和大小参数组合在一起的rect来创建rect,而不是像这样传递四个参数。也就是说,您可以将两个位置参数和两个大小参数组合在一起。如下所示:

代码语言:javascript
复制
size = (10, 10) # width, height
player1 = pygame.Rect((100, 5), size)
player2 = pygame.Rect((200, 20), size)

如果需要,您也可以将位置分开。

您可以做的另一件事(也是我在这里评论的真正原因)是查看pygame.draw.rect()的另一个参数。(245,100,50)是您正在绘制的颜色(请参阅文档here)。而不是仅仅使用像这样的数字,通过将颜色分配给靠近程序顶部的某个变量并在绘图调用中使用该变量,可以使它变得更加清晰。如下所示:

代码语言:javascript
复制
orangey = (245, 100, 50)
...
pygame.draw.rect(win, orangey, player1)

在这种情况下,我将颜色称为橙色,因为当我展示它时,它看起来有点橙色。但显然,您可以为它命名任何适当的描述性名称。

您可以使用多种颜色来区分播放器矩形,如下所示:

代码语言:javascript
复制
orange = pygame.Color("orange")
purple = pygame.Color("purple")
...
pygame.draw.rect(win, orange, player1)
pygame.draw.rect(win, purple, player2)

通过查看问题here的答案,您可以看到一种查找定义颜色的好方法,就像我展示的颜色一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61720771

复制
相关文章

相似问题

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