[英]Why cant i place more than one rectangle in pygame?
我正在尝试制作一个 2D 游戏,玩家可以在其中带着树木四处走动。 但是由于某种原因,当程序试图放置一棵树时它没有出现。 我已经尝试了一切,比如将代码移动到不同的部分,甚至将矩形的特定区域设置为 300 300,但它不会显示。 如果您对如何修复它有任何想法,甚至有一些很棒的建议。 树的代码在第 26 行。
谢谢!
代码:
import pygame
import random
player=(255,0,0)
grass = (0,150,0)
tree = (0,100,0)
dis_height = 600
dis_width = 600
pygame.init()
dis=pygame.display.set_mode((600,600))
x1 = 300
y1 = 300
x1_change = 0
y1_change = 0
tree_placex = random.randint(1, 600)
tree_placey = random.randint(1, 600)
pygame.display.set_caption('testing stuff')
game_over=False
while not game_over:
for event in pygame.event.get():
for i in range(10):
pygame.draw.rect(dis,player,[tree_placex,tree_placey,20,20])
#/////////////////PLAYER MOVEMENT////////////////////
if event.type==pygame.QUIT:
game_over=True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
y1_change = -0.5
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = 0.5
x1_change = 0
elif event.key == pygame.K_LEFT:
y1_change = 0
x1_change = -0.5
elif event.key == pygame.K_RIGHT:
y1_change = 0
x1_change = 0.5
elif event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
y1_change = 0
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = 0
x1_change = 0
elif event.key == pygame.K_LEFT:
y1_change = 0
x1_change = 0
elif event.key == pygame.K_RIGHT:
y1_change = 0
x1_change = 0
if y1 < 0:
pygame.draw.rect(dis,player,[x1,0,15,15])
y1 = 600
pygame.display.update()
dis.fill(grass)
elif x1 < 0:
pygame.draw.rect(dis,player,[0,x1,15,15])
x1 = 600
pygame.display.update()
dis.fill(grass)
elif y1 >= dis_height:
pygame.draw.rect(dis,player,[x1,600,15,15])
y1 = 0
pygame.display.update()
dis.fill(grass)
elif x1 >= dis_width:
pygame.draw.rect(dis,player,[600,y1,15,15])
x1 = 0
pygame.display.update()
dis.fill(grass)
x1 += x1_change
y1 += y1_change
dis.fill(grass)
pygame.draw.rect(dis,player,[x1,y1,15,15])
pygame.display.update()
pygame.quit()
quit()
您正在将草渲染到其他所有内容之上。 尝试只调用一次dis.fill(grass)
,然后再绘制其他内容
也许在这里
while not game_over:
for event in pygame.event.get():
dis.fill(grass)
最好在您处理完事件之后
典型的 PyGame 应用程序循环必须:
pygame.time.Clock.tick
限制每秒帧数以限制 CPU 使用率pygame.event.pump()
或pygame.event.get()
来处理事件。blit
所有对象)pygame.display.update()
或pygame.display.flip()
更新显示在绘制矩形之前,您必须清除应用程序循环中的显示:
clock = pygame.time.Closk()
# application loop
while not game_over:
clock.tick(100)
# event loop
for event in pygame.event.get():
if event.type==pygame.QUIT:
game_over=True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
y1_change = -0.5
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = 0.5
x1_change = 0
elif event.key == pygame.K_LEFT:
y1_change = 0
x1_change = -0.5
elif event.key == pygame.K_RIGHT:
y1_change = 0
x1_change = 0.5
elif event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
y1_change = 0
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = 0
x1_change = 0
elif event.key == pygame.K_LEFT:
y1_change = 0
x1_change = 0
elif event.key == pygame.K_RIGHT:
y1_change = 0
x1_change = 0
# move player
x1 += x1_change
y1 += y1_change
if y1 < 0:
y1 = 600
elif x1 < 0:
x1 = 600
elif y1 >= dis_height:
y1 = 0
elif x1 >= dis_width:
x1 = 0
# clear the display
dis.fill(grass)
# draw all objects in the scene
for i in range(10):
pygame.draw.rect(dis,player,[tree_placex,tree_placey,20,20])
pygame.draw.rect(dis,player,[x1,y1,15,15])
# update display
pygame.display.update()
pygame.quit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.