平台游戏中的启动变量

问题描述:

我已经制作了一个平台游戏,其中有通电。其中一个通电是一个闪电,旨在提高你的速度。但是,当我告诉它增加速度时,它会增加速度,但是使我的播放器无需按下我的箭头键即可移动。任何帮助?我知道你看不到它,但是我已经包含了player.update等,但是我没有显示它,所以代码会被缩短。平台游戏中的启动变量

感谢

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 = 0,0 
    self.speed = 2 
    self.Jump = 10 

    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.deadimages = [self.hurt] 

    self.gravity = 0.35 
    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 


def update(self, event = None): 
    self.calcgravity() 

    self.rect.x += self.hspeed 
    self.rect.y += self.vspeed 

    #Walking animation of animation when left or right key is pressed. 
    key = pygame.key.get_pressed() 
    if self.Timer >= 0: 
     if key[pygame.K_RIGHT]: 
      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 

     if key[pygame.K_LEFT]: 
      self.TimeNum+=1 
      if self.TimeNum == self.TimeTarget: 
       self.index +=1 
       if self.index >= len(self.rotatedimages): 
        self.index = 0 
       self.image = self.rotatedimages[self.index] 
       self.TimeNum = 0 
    # if you go outside the boundaries of the game. 
    if player.rect.x < 0: 
     GameOver() 


def move(self, hspeed, vspeed): 
    self.hspeed += hspeed 
    self.vspeed += vspeed 


def Level1Coll(self,PowerUps): 

    PowerUpsCollision = pygame.sprite.spritecollide(self,PowerUps,True) 
    for speedboost in PowerUpsCollision: 
     self.speed = 3 


def main() 

GameExit = False 

while GameExit==False: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       player.move(-player.speed,0) 
      if event.key == pygame.K_RIGHT: 
       player.move(player.speed,0) 
      if event.key == pygame.K_UP: 
       player.move(0,-player.Jump) 
       JumpSound.play() 

     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT: 
       player.move(player.speed,0) 
      if event.key == pygame.K_RIGHT: 
       player.move(-player.speed,0) 
      if event.key == pygame.K_UP: 
       player.move(0,0) 
+0

这部分代码看起来不错 - 而'speed = 3'不会改变它 - 也许会显示其余的代码。 – furas

+0

问题是因为在某一时刻你将2加到'hspeed/vspeed',然后减去3,所以它给出'hspeed = -1'或'vspeed = -1'而不是'hspeed = 0'或'vspeed = 0' - 如果你设置'extra_speed = 3',你必须(以某种方式)改变'hspeed'和'vspeed',如果你设置'speed = 3'' – furas

您设置self.speed等于3,这通常意味着精灵将在自己的移动与3的速度而不是创建一个新的变量:

extra_speed = 0 

并适用于增加精灵速度:

self.rect.y += (self.vspeed + extra_speed) 

现在当精灵没有加电,没有任何变化,因为速度没有增加。但是当精灵获得加电时,只需将extra_speed更改为3,并在精灵完成加电后重置为0。为了解决即时运行的问题,在检查运行之前,使用另一个变量来确定何时运行和使用它。

running = False 
#A few lines later into your update function 
if running: 
    self.rect.x += self.hspeed 
    self.rect.y += (self.vspeed + extra_speed) 

上面的代码表示如果running为真,则适当地移动精灵。否则,请勿移动精灵。

+0

,那么你得到'self.rect.y + =(self.vspeed + 3) '即使'vspeed'是'零'时,球员也会移动。 – furas

+0

非常感谢我通过按键条件语句实现了这一点,它就像一个魅力! – Jim

+0

如果这是您意见中的最佳答案,您可以点击我答案旁边的绿色复选标记 –