对象在pygame中逃离窗口.如何防止它这样做



所以,我是python初学者,想创建一个太空入侵者游戏。但我面临一个问题。

如果我长时间按下左箭头键或右箭头键,玩家对象将退出pygame窗口。

这是我的代码-

import pygame
pygame.init()

window = pygame.display.set_mode((1200,800))
pygame.display.set_caption('RESCUE THE SPACESHIP')
close = False
spaceship_velocity = 0
spaceship_X = 550
spaceship_Y = 670
spacehip_img = pygame.image.load('spaceship.png')

while not close:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
spaceship_velocity -= 1
if event.key == pygame.K_RIGHT:
spaceship_velocity += 1
#Doesn't seems to work
if spaceship_X < -25:
spaceship_X == -25
if spaceship_X > 1125:
spaceship_X == 1125
spaceship_X = spaceship_X + spaceship_velocity
print(spaceship_X)
window.fill((255,255,255))
window.blit(spacehip_img , (spaceship_X , spaceship_Y))
pygame.display.update()

在问这个问题之前,我已经尝试过了,但它似乎并没有将宇宙飞船限制在窗口内

if spaceship_X < -25:
spaceship_X == -25
if spaceship_X > 1125:
spaceship_X == 1125

有什么办法吗?

尝试将位置检查移动到spaceship_X = spaceship_X + spaceship_velocity之后,并可能将其更改为:

screen_rect = screen.get_rect()
if spaceship_X < screen_rect.left:
spaceship_X = screen_rect.left
if spaceship_X > screen_rect.right - spaceship_width:
spaceship_X = screen_rect.right - spaceship_width

请确保使用单等于运算符=(用于赋值(,而不是双等于运算符==。您需要添加一个spaceship_width变量或常量,以像素表示宇宙飞船的宽度。


另一种解决方案是改用rect来测量宇宙飞船的尺寸,然后进行

spaceship.rect = spaceship.rect.clamp(screen.get_rect())

我更改了

==

=

它对我的非常有效

之前

if spaceship_X < -25:
spaceship_X == -25
if spaceship_X > 1125:
spaceship_X == 1125

if spaceship_X < -25:
spaceship_X = -25
if spaceship_X > 1125:
spaceship_X = 1125

相关内容

最新更新