python - 我的 pygame 程序闪烁,不完全确定为什么
问题描述
基本上,当我运行此程序时,我想要发生的一切都会发生,除非紫色水滴落下时,它们会闪烁而不是保持实线。我试着弄清楚它并弄乱了pygame.display.update()
and thepygame.display.flip()
但它要么会一直闪烁,要么紫色的线条就会消失
import random
pygame.init()
window = (640,360)
background = pygame.Surface(window)
screen = pygame.display.set_mode(window)
def main():
drops = [Drop]*500
for i in range(len(drops)):
drops[i] = Drop()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((230,230,250))
for drop in drops:
drop.show()
drop.fall()
pygame.display.update()
pygame.quit()
def translate(value, leftMin, leftMax, rightMin, rightMax):
# Figure out how 'wide' each range is
leftSpan = leftMax - leftMin
rightSpan = rightMax - rightMin
# Convert the left range into a 0-1 range (float)
valueScaled = float(value - leftMin) / float(leftSpan)
# Convert the 0-1 range into a value in the right range.
return rightMin + (valueScaled * rightSpan)
class Drop:
def __init__(self):
self.x = random.randrange(0,640)
self.y = random.randrange(-500,-100)
self.z = random.randrange(0,20)
self.yspeed = translate(self.z, 0, 20, .2, .3)
self.len = translate(self.z, 0, 20, 10, 20)
def fall(self):
self.y += self.yspeed
self.yspeed += 0.000001
if self.y > 360:
self.y = random.randrange(-200,-100)
self.yspeed = translate(self.z, 0, 20, .2, .3)
def show(self):
pygame.draw.line(screen, (138, 43, 226), (self.x,self.y), (self.x, self.y + self.len), width = random.randrange(1,4))
main()
解决方案
它闪烁是因为您随机改变每帧每个雨滴的宽度:
pygame.draw.line(screen, (138, 43, 226), (self.x,self.y), (self.x, self.y + self.len), width = random.randrange(1,4)) # <---
添加一个with
属性并为每个实例的雨滴设置一个随机值,而不是每帧:
class Drop:
def __init__(self):
self.x = random.randrange(0,640)
self.y = random.randrange(-500,-100)
self.z = random.randrange(0,20)
self.yspeed = translate(self.z, 0, 20, .2, .3)
self.len = translate(self.z, 0, 20, 10, 20)
self.width = random.randrange(1,4) # <---
def fall(self):
self.y += self.yspeed
self.yspeed += 0.000001
if self.y > 360:
self.y = random.randrange(-200,-100)
self.yspeed = translate(self.z, 0, 20, .2, .3)
def show(self):
pygame.draw.line(screen, (138, 43, 226), (self.x,self.y),
(self.x, self.y + self.len), width = self.width) # <---
推荐阅读
- java - 如何使用 JACOB 接收字节数组?
- python - 如何找到具有给定索引的 TensorFlow 节点?
- doctrine-orm - Doctrine ORM 加入父行上的用户组
- angular - Firebase 托管未显示本地化构建
- docker - Kubernetes 服务连接被拒绝,如何访问服务?
- javascript - 在 Bootbox 弹出窗口中渲染 D3 可折叠树视图?
- javascript - React Typescript - 动态类型
- microsoft-graph-api - Microsoft Graph Intune:如何获取“注册者”用户数据
- android - 更改 APK 文件中的图像
- ruby-on-rails - 改变设计更新方法和强大的参数?