我打算使用pygame制作一个简单的侧滚动游戏,但是滚动部分使我有些困惑。我大致遵循YouTube教程来帮助我,但是我编写的代码未按预期运行。我正在运行python 3.6,并且正在使用PyCharm。
我已经遍历了本教程的各个部分,并且我所拥有的一切都可以正确匹配。本教程使用的是python 2.7,但我认为它的影响不会太大。我是编程和python的新手,所以我真的无法分辨出什么问题
import pygame
from pygame.locals import *
black = (0, 0, 0, 255)
white = (255, 255, 255, 255)
w = 1280
h = 720
hw = w / 2
hh = h / 2
pygame.init()
clock = pygame.time.Clock()
ds = pygame.display.set_mode((w, h))
pygame.display.set_caption("Side Scroller!")
FPS = 500
bg = pygame.image.load("mountains.png").convert()
bg_width, bg_height = bg.get_rect().size
stageWidth = bg_width * 2
stagePosX = 0
startScrollingPosX = hw
circleRadius = 25
circlePosX = circleRadius
playerPosX = circleRadius
playerPosY = 585
PlayerVelocityX = 0
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
k = pygame.key.get_pressed()
if k[K_RIGHT]:
playerVelocityX = 1
elif k[K_LEFT]:
playerVelocityX = -1
else:
playerVelocityX = 0
playerPosX += playerVelocityX
if playerPosX > stageWidth - circleRadius:
playerPosX = stageWidth - circleRadius
if playerPosX < circleRadius:
playerPosX = circleRadius
if playerPosX < startScrollingPosX:
circlePosX = playerPosX
elif playerPosX > stageWidth - startScrollingPosX:
circlePosX = playerPosX - stageWidth + w
else:
circlePosX = startScrollingPosX
stagePosX += -playerVelocityX
rel_x = stagePosX % bg_width
ds.blit(bg, (rel_x, 0))
if rel_x < w:
ds.blit(bg, (rel_x, 0))
pygame.draw.circle(ds, white, (circlePosX, playerPosY - 25),
circleRadius, 0)
pygame.display.update()
clock.tick(FPS)
ds.fill(black)
当球到达屏幕中间时,背景应该开始滚动,但是一旦球击中屏幕中间,背景就会崩溃。另外,背景无法完全显示,并且背景在y方向上被剪掉。
答案 0 :(得分:0)
将来,您应该发布终端崩溃时告诉您的信息,其中包含很多信息。
Traceback (most recent call last):
File "test.py", line 69, in <module>
pygame.draw.circle(ds, white, (circlePosX, playerPosY - 25), circleRadius, 0)
TypeError: integer argument expected, got float
告诉我们第69行的文件“ test.py”(在我的计算机上称为文件)有错误,
然后向我们显示有错误的行
pygame.draw.circle(ds, white, (circlePosX, playerPosY - 25), circleRadius, 0)
并且它期望一个整数,但是得到一个浮点数。
当白球到达中间时,circlePosX不再是整数(例如67),而是一个浮点数(例如44.5)。
“解决方案”是:
pygame.draw.circle(ds, white, (int(circlePosX), playerPosY - 25), circleRadius, 0)