为什么我不能在Pygame中放置多个矩形?关闭

发布于 2025-01-28 21:16:27 字数 2579 浏览 2 评论 0 原文

我正在尝试制作一个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()

I am trying to make a 2D game where the player can walk around with trees. But for some reason when the program tries to place a tree it doesn't appear. I have tried everything like moving the code to different sections and even setting the specific area of the rectangle to 300 300 but it won't show. If you have any ideas on how to fix it or even some suggestions that would be great. The code for the tree is in line 26.

Thank you!

CODE:

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()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小糖芽 2025-02-04 21:16:27

您正在渲染其他一切的草地。 其他任何内容绘制之前precablelly

请在

while not game_over:
    for event in pygame.event.get():
        dis.fill(grass)

尝试仅调用 dis.fill(grass)一次,然后在处理这些事件之后,

You are rendering the grass ontop of everything else. Try only calling dis.fill(grass) once, before anything else has drawn

Maybe here

while not game_over:
    for event in pygame.event.get():
        dis.fill(grass)

Preferabllly after you have handled the events

零時差 2025-02-04 21:16:27

典型的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()

The typical PyGame application loop has to:

You must clear the display in the application loop before drawing the rectangles:

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文