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