Pygame侧滚动器未按预期运行

时间:2019-01-06 23:30:09

标签: python pygame

我打算使用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方向上被剪掉。

1 个答案:

答案 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)