我是python的新手,我一直在尝试制作游戏。但是我想让背景在循环中不断下降,我不能这样做。 这是我的代码:
import pygame
pygame.init()
width = 800
height = 600
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
ship_width = 35
ship_height = 64
disp = pygame.display.set_mode((width,height))
pygame.display.set_caption("Space Jump")
clock = pygame.time.Clock()
bg1 = pygame.image.load("Space.png")
bg2 = pygame.image.load("Space.png")
shipImg = pygame.image.load("Ship.png")
def ship(x,y):
disp.blit(shipImg, (x,y))
def gameLoop():
x = (width * 0.45)
y = (height * 0.8)
x_ch = 0
y_ch = 0
x_bg = 0
y_bg = bg1.get_height()
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_ch = -5
elif event.key == pygame.K_RIGHT:
x_ch = 5
elif event.key == pygame.K_UP:
y_ch = -5
elif event.key == pygame.K_DOWN:
y_ch = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_ch = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
y_ch = 0
x += x_ch
y += y_ch
if x > width - ship_width or x < 0:
x_ch = 0
if y > height - ship_height or y < 0:
y_ch = 0
disp.blit(bg1, (0,x_bg))
disp.blit(bg2, (0,y_bg))
ship(x,y)
pygame.display.update()
x_bg += 1
y_bg += 1
if x_bg == -1 * x_bg.get_height(): #This is the part I'm stuck on
x_bg = y_bg + y_bg.get_height() #When I run this i get and error:
#if x_bg == -1 * x_bg.get_height():
#AttributeError: 'int' object has no
#attribute 'get_height'
if y_bg == -1 * y_bg.get_height():
y_bg = x_bg + x_bg.get_height()
clock.tick(30)
gameLoop()
pygame.quit()
quit()
因此,当我运行此代码时出现错误,但是当我在新文件上编写后台代码时,它可以正常工作但背景在某些时候结束它不会循环。 我一直试图在过去3天做这个循环背景,请帮助我。感谢。
答案 0 :(得分:1)
好吧我之前没有使用过pygame,只是快速浏览一下你的代码和文档,看起来你在一个号码get_height()
和x_bg
上呼叫y_bg
)不是,pygame称为surface
对象。
大致翻译的错误是说数字没有名称为get_height()
的方法。
您的surface
个对象定义为bg1
和bg2
,所以我的猜测就是那些会有方法。
只需将变量与正确的变量交换出来,错误应该消失。
答案 1 :(得分:0)
我不完全确定您的某些代码正在尝试做什么,但我可以帮助您入门。
你可以看到错误说: &#34;属性错误:&#39; int&#39;对象没有属性&#39; get_height&#39;&#34;
这告诉你x_bg是一个整数,而不是一个对象,所以它不能访问名为&#39; get_height&#39;的任何属性。我建议在python中学习更多关于对象和函数的知识,以及它们是如何工作的。
您好像已经使用x_bg和y_bg作为背景的位置,因此无需尝试使用任何名为get_height的函数,您可以将其替换为:
if x_bg == -1 * x_bg:
x_bg = y_bg + y_bg
这段代码的另一个问题是检查x_bg的值是否与完全相等到一个数字。虽然这有时可以工作,特别是当你只处理整数时,通常最好检查你的变量是否大于/小于一个数字。例如,如果您的背景位于y = 99,并且您正在检查y == 100,但屏幕每步移动2个像素,则您的状况将永远不会达到,而如果您正在检查y&gt; 100它应该总是被抓住。你可能想要这样的东西:
if y_bg < 0:
y_bg = height
这不会很完美,但它不应该导致任何错误,应该帮助你走上正确的轨道