目前我已经制作了一款平台游戏,可以左右移动我的角色。他从地面开始。关于如何让他跳起来的任何想法,因为我无法弄明白?目前,如果我按下向上键,我的玩家精灵将继续向上移动,或者如果按下它,只需向上移动并保持向上。我想让他退缩一步。
由于
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 = 2
self.vspeed = 0
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.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.OnGround = True
self.trapcollision = False
self.enemycollision = False
def update(self, BlockListGrass, TrapList, enemygroup):
key = pygame.key.get_pressed()
if key[pygame.K_RIGHT] or key[pygame.K_LEFT]:
self.TimeNum+=1
if self.TimeNum == self.TimeTarget:
self.index +=1
if self.index >= len(self.images):
self.index = 0
self.image = self.images[self.index]
self.TimeNum = 0
PlatformCollision = pygame.sprite.spritecollide(self, BlockListGrass, False )
for each_object in PlatformCollision:
if self.vspeed > 0:
self.rect.bottom = each_object.rect.top
if self.vspeed < 0:
self.rect.top = each_object.rect.bottom
TrapCollision = pygame.sprite.spritecollide(self,TrapList,False )
for each_object in TrapCollision:
self.trapcollision = True
if self.trapcollision:
self.dead()
EnemyCollision = pygame.sprite.spritecollide(self,enemygroup,False )
for each_object in EnemyCollision:
self.enemycollision = True
if self.enemycollision:
self.dead()
def dead(self):
self.Timer += 1
if self.Timer >= 10:
self.images.append(self.hurt)
self.image = self.images[4]
self.hspeed = 0
if self.Timer == 50:
GameOver()
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.vspeed = 5
self.rect.y -= self.vspeed
self.OnGround = False
if self.OnGround == False:
self.vspeed += self.gravity
答案 0 :(得分:0)
我从未使用过pygame,但一般来说你必须实现一个简单的物理集成循环,它会从垂直速度周期性地递减重力并使对象失效:
vspeed = vspeed - gravity * timeStep
y = y + vspeed * timeStep
如果以60 Hz更新,则timeStep为1/60秒。
跳转按钮会将vspeed设置为初始跳跃速度,不执行任何操作:
vspeed = jumpSpeed
答案 1 :(得分:0)
改变这个:
if key[pygame.K_UP]:
self.vspeed = 5
self.rect.y -= self.vspeed
因此,在rect
向上移动后,它被迫向下移动。如果需要更多的实际跳转,请尝试添加一条小曲线。如果跳跃是直接向上和向下,则以下情况应该起作用:
if key[pygame.K_UP]:
for i in range(20): #Delay the falling down as loops are very fast
if i <= 10:
self.rect.y -= 0.5
elif i > 10:
self.rect.y += 0.5