python - 跳入 PyGame 难题的问题
问题描述
我有一个非常复杂的程序,可以让忍者在屏幕上运行。当您按下时,他会滑动并返回。当你向上推时,他应该跳下来然后跑下来。但是忍者一直在跳跃,唯一摆脱它的方法就是当你完全在地面上时滑行。他只在地面上滑动很好,但不知道为什么他一直在弹跳。
我不知道如何解决这个问题,但我已经尝试了一些细化并在代码中切换,但它没有帮助。以下代码很复杂,必须包含图像。我不希望您获取图像并对其进行测试,我只是希望专业人士查看它,看看他们是否能看到我没有看到的东西。
我认为这是有问题的代码中的主要部分:
if not (isjump):
if Counter > 17:
if keys[pygame.K_UP]:
isjump = True
isrunning = False
isslide = False
Counter = 0
else:
if jumpCount >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y -= (jumpCount ** 2) * 0.5 * neg
jumpCount = jumpCount -1
else:
isJump = False
jumpCount = 10
这是整个代码:
import pygame
import time
x = 60
y = 300
pygame.init()
Counter = 0
jumpCount = 10
imagerun = 0
imageslide = 0
imagejump = 0
isslide = False
isjump = False
ninjaheight = 128
ninjawidth = 128
isrunning = True
def redrawgame():
global isrunning
win.blit(bg, (bgX, 0)) # draws our first bg image
win.blit(bg, (bgX2, 0))
if isrunning == True:
win.blit(Run[imagerun],(x, y))
if isslide == True:
isrunning = False
win.blit(Slide[imageslide],(x, y))
if isjump == True:
win.blit(Jump[imagejump],(x, y))
pygame.display.update()
bg = (pygame.image.load('bg.jpg'))
bgX = 0
bgX2 = bg.get_width()
win = pygame.display.set_mode((1200, 500))
pygame.display.set_caption("First Game")
Run = [pygame.transform.scale(pygame.image.load('Run__0.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__1.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__2.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__3.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__4.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__5.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__6.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__7.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__8.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__9.png'), (ninjaheight, ninjawidth))]
Slide = [pygame.transform.scale(pygame.image.load('Slide__0.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__1.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__2.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__3.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__4.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__5.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__6.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__7.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__8.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__9.png'), (ninjaheight, ninjawidth))]
Jump = [pygame.transform.scale(pygame.image.load('Jump__1.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__2.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__3.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__4.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__5.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__6.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__7.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__8.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Jump__9.png'), (ninjaheight, ninjawidth))]
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
time.sleep(0.025)
Counter += 1
keys = pygame.key.get_pressed()
if keys[pygame.K_DOWN]:
if not isslide == True:
if Counter > 17:
if jumpCount == 10:
isrunning = False
isjump = False
isslide = True
Counter = 0
imageslide = 0
if isrunning == True:
if imagerun == 9:
imagerun = 0
else:
imagerun +=1
if isslide == True:
if imageslide == 9:
isslide = False
isrunning = True
else:
imageslide += 1
if not (isjump):
if Counter > 17:
if keys[pygame.K_UP]:
isjump = True
isrunning = False
isslide = False
Counter = 0
else:
isJump = False
else:
if jumpCount >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y -= (jumpCount ** 2) * 0.5 * neg
jumpCount = jumpCount -1
else:
isJump = False
jumpCount = 10
bgX -= 15.4 # Move both background images back
bgX2 -= 15.4
if bgX < bg.get_width() * -1: # If our bg is at the -width then reset its position
bgX = bg.get_width()
if bgX2 < bg.get_width() * -1:
bgX2 = bg.get_width()
redrawgame()
if isslide == False and isjump == False:
isrunning = True
pygame.quit()
很抱歉将整个代码放入但 IDK 发生错误的地方。我希望有人可以提供帮助。这是我做过的最难的程序,所以很混乱。随意评论其他搞砸的事情。非常感谢所有能帮助像我这样的菜鸟的人。谢谢你,互联网上的一个随机家伙。
解决方案
推荐阅读
- c# - 如何解决“错误的 JSON 转义序列:\U”在 blazor 中添加 swagger 端点作为连接服务
- sql-server - 如果组中没有记录比特定数据更新,则分组
- sql - 'WITH' 子句不适用于 in 运算符
- elasticsearch - 如何在 laravel scout 和弹性搜索中使搜索更有效?
- django - ValueError - 视图没有返回 HttpResponse 对象。它返回 None 而不是
- vue.js - 使用 Vuetify v-rating 模块测试组件时,“TypeError:无法读取未定义的属性‘isFilled’”
- entity-framework - 出现错误此操作需要连接到“主”数据库
- amazon-web-services - 将 S3 快照数据迁移到 Aurora 实例
- python - 在带有 MSAL 的 Python 守护程序应用程序中使用 Azure Active Directory 对 Azure Functions 应用程序进行身份验证
- javascript - 下载文件时强制显示“另存为”对话框