Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pygame中,如果对象碰到边界,如何停止移动 导入pygame 随机输入 pygame.init() 黑色=(0,0,0) 红色=(255,0,0) 显示宽度=800 显示高度=600 FPS=20 gameDisplay=pygame.display.set_模式((显示宽度、显示高度)) pygame.display.set_标题(“太空跳跃者”) img=pygame.image.load('starship2.png') 精灵化=50 边界限制=200 clock=pygame.time.clock() font=pygame.font.SysFont(无,25) def gameLoop(): gameExit=False gameOver=False 引线x=显示宽度/2 引线y=显示高度/2 交换=0 ychange=0 randBlockX=random.randrange(0,boundlimit+1) randBlockY=random.randrange(0575) 不退出游戏时: blit(img,[lead\ux,lead\uy]) pygame.display.update() 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT: gameExit=True 如果event.type==pygame.KEYDOWN: 如果event.key==pygame.K_左: xchange=-spritesize/2 ychange=0 如果event.key==pygame.K_RIGHT: xchange=精灵化/2 ychange=0 如果event.key==pygame.K_UP: ychange=-spritesize/2 交换=0 如果event.key==pygame.K_向下: ychange=精灵化/2 交换=0 如果event.type==pygame.KEYUP: 如果event.key==pygame.K_左或event.key==pygame.K_右: 交换=0 如果event.key==pygame.K_向上或event.key==pygame.K_向下: ychange=0 铅x+=交换 铅y+=ychange 游戏显示。填充(黑色) pygame.draw.rect(游戏显示,红色,[randBlockX,randBlockY,600,25]) 如果(lead_x+spritesize0:)_Python_Pygame - Fatal编程技术网

Python 在pygame中,如果对象碰到边界,如何停止移动 导入pygame 随机输入 pygame.init() 黑色=(0,0,0) 红色=(255,0,0) 显示宽度=800 显示高度=600 FPS=20 gameDisplay=pygame.display.set_模式((显示宽度、显示高度)) pygame.display.set_标题(“太空跳跃者”) img=pygame.image.load('starship2.png') 精灵化=50 边界限制=200 clock=pygame.time.clock() font=pygame.font.SysFont(无,25) def gameLoop(): gameExit=False gameOver=False 引线x=显示宽度/2 引线y=显示高度/2 交换=0 ychange=0 randBlockX=random.randrange(0,boundlimit+1) randBlockY=random.randrange(0575) 不退出游戏时: blit(img,[lead\ux,lead\uy]) pygame.display.update() 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT: gameExit=True 如果event.type==pygame.KEYDOWN: 如果event.key==pygame.K_左: xchange=-spritesize/2 ychange=0 如果event.key==pygame.K_RIGHT: xchange=精灵化/2 ychange=0 如果event.key==pygame.K_UP: ychange=-spritesize/2 交换=0 如果event.key==pygame.K_向下: ychange=精灵化/2 交换=0 如果event.type==pygame.KEYUP: 如果event.key==pygame.K_左或event.key==pygame.K_右: 交换=0 如果event.key==pygame.K_向上或event.key==pygame.K_向下: ychange=0 铅x+=交换 铅y+=ychange 游戏显示。填充(黑色) pygame.draw.rect(游戏显示,红色,[randBlockX,randBlockY,600,25]) 如果(lead_x+spritesize0:)

Python 在pygame中,如果对象碰到边界,如何停止移动 导入pygame 随机输入 pygame.init() 黑色=(0,0,0) 红色=(255,0,0) 显示宽度=800 显示高度=600 FPS=20 gameDisplay=pygame.display.set_模式((显示宽度、显示高度)) pygame.display.set_标题(“太空跳跃者”) img=pygame.image.load('starship2.png') 精灵化=50 边界限制=200 clock=pygame.time.clock() font=pygame.font.SysFont(无,25) def gameLoop(): gameExit=False gameOver=False 引线x=显示宽度/2 引线y=显示高度/2 交换=0 ychange=0 randBlockX=random.randrange(0,boundlimit+1) randBlockY=random.randrange(0575) 不退出游戏时: blit(img,[lead\ux,lead\uy]) pygame.display.update() 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT: gameExit=True 如果event.type==pygame.KEYDOWN: 如果event.key==pygame.K_左: xchange=-spritesize/2 ychange=0 如果event.key==pygame.K_RIGHT: xchange=精灵化/2 ychange=0 如果event.key==pygame.K_UP: ychange=-spritesize/2 交换=0 如果event.key==pygame.K_向下: ychange=精灵化/2 交换=0 如果event.type==pygame.KEYUP: 如果event.key==pygame.K_左或event.key==pygame.K_右: 交换=0 如果event.key==pygame.K_向上或event.key==pygame.K_向下: ychange=0 铅x+=交换 铅y+=ychange 游戏显示。填充(黑色) pygame.draw.rect(游戏显示,红色,[randBlockX,randBlockY,600,25]) 如果(lead_x+spritesize0:),python,pygame,Python,Pygame,而不是使用两个变量(lead_x,lead_y)来存储对象的位置,请使用a。它与 import pygame import random pygame.init() black = (0,0,0) red = (255,0,0) display_width = 800 display_height = 600 FPS = 20 gameDisplay = pygame.display.set_mode((display_width,display_height)) pygame.displ

而不是使用两个变量(
lead_x
lead_y
)来存储对象的位置,请使用a。它与

import pygame
import random

pygame.init()
black = (0,0,0)
red = (255,0,0)

display_width = 800
display_height = 600
FPS = 20

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("The Space Jumpers")

img = pygame.image.load('starship2.png')
spritesize = 50
boundlimit = 200

clock = pygame.time.Clock()

font = pygame.font.SysFont(None, 25)

def gameLoop():
    gameExit = False
    gameOver = False
    lead_x = display_width / 2
    lead_y = display_height / 2
    xchange = 0
    ychange = 0

    randBlockX = random.randrange(0,boundlimit+1)
    randBlockY = random.randrange(0,575)

    while not gameExit:
        gameDisplay.blit(img, [lead_x,lead_y])
        pygame.display.update()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    xchange = -spritesize / 2
                    ychange = 0
                if event.key == pygame.K_RIGHT:
                    xchange = spritesize / 2
                    ychange = 0
                if event.key == pygame.K_UP:
                    ychange = -spritesize / 2
                    xchange = 0
                if event.key == pygame.K_DOWN:
                    ychange = spritesize / 2
                    xchange = 0
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    xchange = 0
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                    ychange = 0











        lead_x += xchange
        lead_y += ychange 

        gameDisplay.fill(black)
        pygame.draw.rect(gameDisplay,red, [randBlockX, randBlockY, 600, 25])

        if (lead_x+spritesize < randBlockX and randBlockY<lead_y<randBlockY+25) :
            randBlockX = random.randrange(0,boundlimit+1)
            randBlockY = random.randrange(0,575)
        elif (lead_x+spritesize < randBlockX and randBlockY<lead_y<randBlockY+25 ):
            randBlockX = random.randrange(0,boundlimit+1)
            randBlockY = random.randrange(0,575)
        elif (lead_x > randBlockX+600 and randBlockY<lead_y<randBlockY+25):
            randBlockX = random.randrange(0,boundlimit+1)
            randBlockY = random.randrange(0,575)
        elif (lead_x > randBlockX+600 and randBlockY<lead_y<randBlockY+25):
            randBlockX = random.randrange(0,boundlimit+1)
            randBlockY = random.randrange(0,575)






        clock.tick(FPS)   


    pygame.quit()
    quit()

gameLoop()
要绘制对象,只需执行以下操作:

gameDisplay = pygame.display.set_mode((display_width,display_height))
gameDisplay_rect = gameDisplay.get_rect()

img = pygame.image.load('starship2.png')
img_rect = img.get_rect(center=gameDisplay_rect.center)
现在,移动对象,而不是

gameDisplay.blit(img, img_rect)
你能行

 lead_x += xchange
 lead_y += ychange 
然后将阻止您的对象离开屏幕。

我认为这将起作用: 尝试将if语句(如果pygame.key==pygame.K_左:)更改为(如果pygame.key==pygame.K_左且x>0:)

我一直在为一个学校项目做同样的事情,并且得到了它,这样当你触摸到边界时它就会停止精灵,但是如果你发垃圾邮件点击那个按钮,你就可以通过。我现在有一个if语句说(如果x<0:x_change=0),但我没有尝试过我建议的方法。我希望它能起作用。

在许多方面肯定更好,但是如果您仍然想保留旧的
lead\u x
lead\u y
结构,您可以在事件循环之外添加单独的语句:

 img_rect.move_ip(lead_x, lead_y)
 img_rect.clamp_ip(gameDisplay_rect)
如果引线x=显示宽度:
铅x-=10

诸如此类。

看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。展示这一努力的一个好方法是将您迄今为止编写的代码包括在内,例如input(如果有)、预期输出和实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。请检查和。在此处查找有关
pygame
和碰撞检测的问题。@martineau非常感谢您,但当我这样做时,所有动作都无效,我只能上下移动……那么您一定做错了。更新您的问题并包括e修改后的代码。另外,
starship2.png
图像的尺寸是多少?
if lead_x <= 0:
    lead_x += 10 # just use any small distance to push you back to place every frame
elif lead_x >= display_width:
    lead_x -= 10