python - 如何在屏幕上绘制对象?
问题描述
我想在屏幕上显示“障碍”类的每个对象。对象存储在列表中obstacle_list
。我没有收到错误消息,但窗口只是冻结并且屏幕上没有显示任何对象。我认为问题一定出在某个地方,def spawn_obstacle(self):
但我不知道我在哪里犯了错误。
import pygame
import random
import time
import math
# Initialize pygame
pygame.init()
# Create window (width, height)
screen = pygame.display.set_mode(((800, 600)))
ScreenHeight = screen.get_height()
ScreenWidth = screen.get_width()
# Background picture
background = pygame.image.load("background.jpg")
# Title and Icon
pygame.display.set_caption("F22-Raptor Simulator")
icon = pygame.image.load("jet1.png")
pygame.display.set_icon(icon)
# Object List (obstacles)
obstacle_list = []
class Obstacle(object):
def __init__(self): # removed unused parameters
self.obstacleImg = 'rock.png' # pygame.image.load("rock.png")
self.obstacleX = random.randint(600, 700)
self.obstacleY = random.randint(0, ScreenHeight - 64)
self.obstacleX_change = random.uniform(-0.3, -0.2)
def __repr__(self):
return f'Obstacle(image={self.obstacleImg!r}, X={self.obstacleX}, Y={self.obstacleY}, change={self.obstacleX_change})'
def spawn_obstacle(self):
image = pygame.image.load(self.obstacleImg)
screen.blit(image, (self.obstacleX, self.obstacleY))
# Keep window running (Infinite-Loop)
running = True
# Timer
timer1_start = time.time()
timer1_current = 0
# Counter while-loop to display objects
count_object_display = 0
# While-Loop (Everything that takes place during the game is inside here)
while running:
timer1_current = time.time()
if timer1_current - timer1_start >= 1:
timer1_start = time.time() # Timer of start set to current time
obstacle = Obstacle() # Create instance of class obstacle
obstacle_list.append(obstacle)
print(obstacle)
# Insert Background
screen.blit(background, (0, 0))
# End game / close window
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
while count_object_display <= len(obstacle_list)-1:
obstacle_list[count_object_display].spawn_obstacle()
count_object_display += 1
if count_object_display > len(obstacle_list)-1:
count_object_display = 0
# Update after each iteration of the while-loop
pygame.display.update()
解决方案
你在这里有一个无限循环:
while count_object_display <= len(obstacle_list)-1:
obstacle_list[count_object_display].spawn_obstacle()
count_object_display += 1
if count_object_display > len(obstacle_list)-1:
count_object_display = 0
您进入 while 循环并设置count_object_display
为1
.
在下一行,1 > 0
所以你设置count_object_display
回0
.
而且由于0 <= 0
while 循环永远运行。
我不知道你想在那里做什么,但也许只是使用一个简单的for
循环,比如:
for o in obstacle_list:
o.spawn_obstacle()
推荐阅读
- javascript - Angular 11 中验证器指令的单元测试
- excel - 服务器执行创建 Outlook 应用程序失败
- ios - 动作 ML 分类器未给出预期结果
- python - 更改 Gurobi 中的下限
- html - 当我单击播放按钮时,它显示一条错误消息“无法读取 null 的属性 'play'”
- firebase - 如何计算 Firebase 事件中的“每位用户计数”值
- linux - 需要调试 MMAP 那么 MMAP 的目标文件或包含 MMAP() 的模块在哪里——如何在 linux 中找到?
- python - python csv,删除所有逗号,但每行的第一个和最后一个
- c# - 在 xamarin 中滚动 CollectionView 图片时,它的滞后,该怎么办?
- java - Java中不同方式调用变量的影响