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()
这是我当前的代码,在这段代码中,当对象(精灵)碰到边界时,它会继续移动,但我想要做的是,我想要阻止对象在到达边界时的移动,例如,当物体撞击左边界时,它不应再向左移动。你有点想法,它是一个简单的游戏
答案 0 :(得分:1)
不使用两个变量(lead_x
,lead_y
)来存储对象的位置,而是使用Rect
。它就像
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
你可以做到
img_rect.move_ip(lead_x, lead_y)
img_rect.clamp_ip(gameDisplay_rect)
clamp_ip
会阻止您的对象离开屏幕。
答案 1 :(得分:0)
我认为这会奏效: 尝试将你的if语句(如果pygame.key == pygame.K_LEFT :)更改为(如果pygame.key == pygame.K_LEFT和x&gt; 0:)
我一直在为一个学校项目挣扎同样的事情并且已经得到它以便在你触摸边界时停止精灵,但如果你垃圾邮件那么你可以通过。我目前有一个if语句说(如果x&lt; 0:x_change = 0),但我没有尝试过我建议的那个。我希望它有效。
答案 2 :(得分:0)
sloth's method肯定会在很多方面做得更好,但如果您仍想保留旧的lead_x
,lead_y
结构,则可以在事件循环之外添加单独的语句:
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
以及每个方向的等等。