gpt4 book ai didi

python - 为什么我的跳跃在 python 3/pygame 中不起作用

转载 作者:行者123 更新时间:2023-12-01 04:26:43 25 4
gpt4 key购买 nike

我没有收到任何错误,只是当我尝试按向上箭头键时,它什么也没做。

我的玩家类别中的跳跃( self )有问题吗?或者我需要为其添加更新吗?我不确定

这是我的代码

import pygame


pygame.init()


screen = pygame.display.set_mode((800,600))

pygame.display.set_caption("use arows")


movex = 0



class player:

def __init__(self ,x, y):

self.x = x
self.y = y
self.width = 32
self.height = 32
self.velocity = 0
self.falling = False
self.onGround = False

def jump(self):
if(self.onGround == False):
return

self.velocity = 8
self.onGround = False



def detectCollisions(self,x1,y1,w1,h1,x2,y2,w2,h2):

if (x2+w2>=x1>=x2 and y2+h2>=y1>=y2):

return True

elif (x2+w2>=x1+w1>=x2 and y2+h2>=y1>=y2):

return True

elif (x2+w2>=x1>=x2 and y2+h2>=y1+h1>=y2):

return True

elif (x2+w2>=x1+w1>=x2 and y2+h2>=y1+h1>=y2):

return True

else:

return False

def update(self, gravity, blockList):
if (self.velocity < 0):
self.falling = True

collision = False
blockX,blockY = 0,0
for block in blockList:

collision = self.detectCollisions(self.x, self.y, self.width, self.height, block.x, block.y, block.width, block.height )
if collision == True:
blockx = block.x
blocky = block.y
break


if(collision == True):
if (self.falling == True):
self.falling == False
self.onGround== True
self.velocity = 0
self.y = blocky - self.height

if (self.onGround == False):
self.velocity += gravity
self.y -= self.velocity

def render(self,screen):
pygame.draw.rect(screen,(0,0,0),(self.x, self.y, self.width, self.height))


class Block:
def __init__ (self, x, y):
self.x = x
self.y = y
self.width = 32
self.height = 32

def render(self,screen):
pygame.draw.rect(screen,(0,0,0),(self.x, self.y, self.width, self.height))



gravity = -0.5

black = (0,0,0)
white = (255,255,255)
blue = (50,60,200)

clock = pygame.time.Clock()

player = player(0,0)

# 25 colums and 19 rows
level1 = [
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
]

blockList = []

for y in range (0,len(level1)):
for x in range (0,len(level1[y])):
if (level1[y][x] == 1):
blockList.append(Block(x*32, y*32))



gameloop = True

while gameloop:

for event in pygame.event.get():
if event.type == pygame.QUIT:
gameloop = False

if(event.type == pygame.KEYDOWN):
if (event.key == pygame.K_RIGHT):
movex = 5

elif(event.key == pygame.K_LEFT):
movex = -5

elif (event.key == pygame.K_UP):
player.jump()


if(event.type == pygame.KEYUP):
if (event.key == pygame.K_RIGHT):
movex = 0

elif(event.key == pygame.K_LEFT):
movex = 0

screen.fill(blue)

for block in blockList:
block.render(screen)
player.x += movex

player.update(gravity, blockList)
player.render(screen)
clock.tick(60)

pygame.display.update()

pygame.quit()

最佳答案

您的 update() 方法中有一个拼写错误:

if(self.falling == True):
self.falling == False
self.onGround == True

这些只是毫无意义的陈述。您需要将它们更改为单个等号,以便它实际上更改这些变量的值。应该是:

if self.falling == True:
self.falling = False
self.onGround = True

顺便说一句,Python 中不需要 if 语句条件周围的括号,因此我从答案中删除了它们。我建议您也删除它们。

编辑 - 进一步说明:

var1 == var2 始终返回 True 或 False,具体取决于它们是否相等。它不会更改 var1 或 var2 的值。

var1 = var2 将 var1 设置为等于 var2。

完整示例:

var1 = 1
var2 = 2

var1 == var2 # Nothing happens

var1 = var2 # var1 now equals 2

var3 = var1 == var2 # var3 now equals True. You might want some parenthesis around this one just for clarity.

print(var1,var2,var3) # Prints "2 2 True"

关于python - 为什么我的跳跃在 python 3/pygame 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003396/

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