python - 我正在使用 Pygame 制作游戏,尽管我指定了边界,但我的玩家正在拐角处
问题描述
我最近开始学习 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
推荐阅读
- ruby - 从数组中创建散列,其中值是元素的索引
- android - Kotlin Activity 将书写顺序从左到右更改为从右到左(带有不同语言的电话)
- scala - 与输入字符串匹配的字符串列表
- pom.xml - 我在这个 POM 中的错误是什么以及在哪里?
- python - Pygame 无法加载 PNG 图像
- python - Python 的 time.time 函数在全球范围内的准确性如何?
- jquery - 下拉菜单立即打开
- java - 错误:在加入 2 个流或在 Kafka 中创建 KTable 时出现 librocksdbjni6770528225908825804.dll
- javascript - 将模态存储在变量中并在点击时显示
- jersey - @XmlTransient 不适用于 Json