繁体   English   中英

为什么我不能在 pygame 中放置多个矩形?

[英]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 应用程序循环必须:

在绘制矩形之前,您必须清除应用程序循环中的显示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM