我已经尝试了所有尝试让我的精灵跳跃,但我决定从头开始尝试找到一种方法再次执行此操作。你们有什么方法可以提供帮助。我的碰撞检测取决于vspeed
所以当我碰到我的平台时,我不认为我可以将vspeed
设置为0。多年来我一直坚持这个。现在我的角色只是简单地上下移动。我需要一个简单的跳跃。任何帮助将不胜感激!
class Player(pygame.sprite.Sprite):
def __init__(self,x,y,width = 65, height = 35):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.hspeed,self.vspeed = 2,4
self.images=[]
r0 = pygame.image.load("Images\Player\i1.png")
r1 = pygame.image.load("Images\Player\i2.png")
r2 = pygame.image.load("Images\Player\i3.png")
r3 = pygame.image.load("Images\Player\i4.png")
self.hurt = pygame.image.load("Images\Player\Hurt.png")
self.images.append(r0)
self.images.append(r1)
self.images.append(r2)
self.images.append(r3)
self.rotatedimages = []
rr0 = pygame.transform.flip(r0 ,True, False)
rr1 = pygame.transform.flip(r1 ,True, False)
rr2 = pygame.transform.flip(r2 ,True, False)
rr3 = pygame.transform.flip(r3 ,True, False)
self.rotatedimages.append(rr0)
self.rotatedimages.append(rr1)
self.rotatedimages.append(rr2)
self.rotatedimages.append(rr3)
self.gravity = 0.5
self.index = 0
self.image = self.images[self.index]
self.rect = pygame.Rect(self.x,self.y,width,height)
self.TimeNum=0
self.TimeTarget=10
self.Timer = 0
self.collision = False
def Level1PlatColl(self, BlockListGrass, TrapList, enemygroup, PowerUps):
PlatformCollision = pygame.sprite.spritecollide(self, BlockListGrass, False )
for each_object in PlatformCollision:
self.collision = True
if self.collision == True:
self.OnGround = True
if self.vspeed > 0:
self.rect.bottom = each_object.rect.top
if self.vspeed <0:
self.rect.top = each_object.rect.bottom
def move(self):
key = pygame.key.get_pressed()
if key[pygame.K_LEFT]:
self.rect.move_ip(-self.hspeed,0)
if key[pygame.K_RIGHT]:
self.rect.move_ip(self.hspeed,0)
if key[pygame.K_UP]:
self.rect.y -= self.vspeed
if key[pygame.K_DOWN]:
self.rect.y += self.vspeed
答案 0 :(得分:1)
当您按K_UP
时,设置vchange = vspeed
(和self.OnGround = False
)
在每个框架/循环中,您使用y -= vchange
跳转
在每个框架/循环中,您使用vchange -= gravity
来减慢跳跃速度。
首先它会让玩家向上移动,但是重力会降低玩家的速度并让玩家向下移动。
(当我说&#34;按&#34;我的意思是从pygame.KEYUP
到pygame.KEYDOWN
的关键更改状态的单一时刻 - 而不是当你按下它时 - 所以你必须使用for event in pygame.event.get()
代替pygame.key.get_pressed()
或使用onGround
检查K_UP
)