问题描述
我最近开始使用 Pygame 并尝试制作游戏,但在此过程中我遇到了问题。我制作了一个不会移出屏幕的播放器,它在两侧都很好,但是,当它到达角落时,它会离开屏幕。如果你没有明白我的问题,请复制我的代码并在您的计算机中运行它,然后用箭头键移动播放器,然后移动到屏幕的末端和角落,您现在就可以得到它。
import pygame
import random
pygame.init()
screen = pygame.display.set_mode((800,600))
background = pygame.image.load('background.jpg')
# Title and Icon
title = pygame.display.set_caption('space')
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# player
playerIMG = pygame.image.load('spaceship.png')
playerX = 370
playerY = 480
playerX_change = 0
playerY_change = 0
# enemy
enemyIMG = pygame.image.load('enemy.png')
enemyX = random.randint(0,768)
enemyY = random.randint(50,150)
enemyX_change = 1
enemyY_change = 0
# bullet
bulletIMG = pygame.image.load('bullet.png')
bulletX = 0
bulletY = 480
bulletX_change = 0
bulletY_change = 1
bullet_state = "ready"
def player(X,Y):
screen.blit(playerIMG,(X,Y))
def enemy(X,Y):
screen.blit(enemyIMG,Y))
def fire_bullet(X,Y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletIMG,(X+10,Y+10))
# Game loop
running = True
while running:
screen.fill((0,0))
screen.blit(background,(0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# key strokes
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -1
if event.key == pygame.K_RIGHT:
playerX_change = +1
if event.key == pygame.K_UP:
playerY_change = -1
if event.key == pygame.K_DOWN:
playerY_change = 1
if event.key == pygame.K_SPACE:
if bullet_state is "ready":
bulletX = playerX
bulletY = playerY
fire_bullet(bulletX,bulletY)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
playerX_change = -0.3
if event.key == pygame.K_RIGHT:
playerX_change = 0.3
if event.key == pygame.K_UP :
playerY_change = -0.3
if event.key == pygame.K_DOWN :
playerY_change = +0.3
player(playerX,playerY)
enemy(enemyX,enemyY)
# player boundaries
playerX += playerX_change
playerY += playerY_change
if playerX < 0:
playerX = 0
elif playerX >= 736:
playerX = 736
elif playerY <= 0:
playerY = 0
elif playerY > 480:
playerY = 480
# enemy movement
enemyX += enemyX_change
if enemyX <= 0:
enemyX_change = 1
elif enemyX >= 736:
enemyX_change = -1
# bullet movement
if bulletY <= 0:
bulletY = 480
bullet_state = "ready"
if bullet_state is 'fire':
fire_bullet(bulletX,bulletY)
bulletY -= bulletY_change
print(playerX,playerY)[enter image description here][1]
pygame.display.update()
解决方法
您需要分别检查 x 和 y 方向。如果玩家超过 x 方向的限制,则不会评估 y 方向,因为您使用的是 if
-elif
序列:
running = True
while running:
# [...]
if playerX < 0:
playerX = 0
elif playerX >= 736:
playerX = 736
# elif playerY <= 0: <--- DELETE
if playerY <= 0: # <--- ADD
playerY = 0
elif playerY > 480:
playerY = 480