我正在用 Pygame 制作游戏,虽然我指定了边界,但我的玩家正在进入角落
I'm making a game with Pygame, my player is going of the corners though i specified the boundaries
我最近开始学习 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, (X, 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, 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
我最近开始学习 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, (X, 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, 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