gpt4 book ai didi

python - Pygame 侧滚动条未按预期运行

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:12 24 4
gpt4 key购买 nike

我计划使用 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 方向上被切断。

最佳答案

将来,您应该发布终端崩溃时告诉您的内容,那里有很多信息。

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

告诉我们文件“test.py”(我在计算机上对这个文件的称呼)第 69 行有一个错误,

然后它向我们显示有错误的行

pygame.draw.circle(ds, white, (circlePosX, playerPosY - 25), circleRadius, 0)

它期望一个整数,但得到一个 float 。

当白球到达中间时,circlePosX不再是int(例如67)而是变成float(例如44.5)。

“解决方案”是:

pygame.draw.circle(ds, white, (int(circlePosX), playerPosY - 25), circleRadius, 0)

关于python - Pygame 侧滚动条未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54066868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com