2016-05-29 69 views
0

此前,我們修正了代碼的滯後和之前,遊戲使精靈滯後。我們修正了這個問題,但是這次它繼續讓精靈飛得太高,離開屏幕沒有回落......我們該怎麼做才能讓精靈(罌粟)不會跳得這麼高?雪碧跳躍的方式太高

import pygame, sys 
from pygame.locals import * 
pygame.init() 

class Poppy(pygame.sprite.Sprite): 
    def __init__(self): #making the player 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load('POPPY.png') 
     self.rect = self.image.get_rect() 
     self.grav = .5 
     self.y_vel = 5 
     self.jumping = False 

    def jump_update(self): #checking the jumps 
     if self.jumping: 
      self.y_vel += self.grav 
      self.rect.y += self.y_vel 

    def jump(self): #the jump initializer 
     if not self.jumping: 
      self.y_vel = -50 
      self.jumping = True 

    def keys(self): #the keys 
     key = pygame.key.get_pressed() 
     dist = 5 
     if key[pygame.K_RIGHT]: # right key 
      self.rect.x += dist # move right 
     elif key[pygame.K_LEFT]: # left key 
      self.rect.x -= dist 

    def collide_check(self, platform_list): #check if it hit the ground or the platforms 
     for blocks in platform_list: 
      if pygame.sprite.collide_rect(self, blocks) == True: 
       self.rect.y = blocks.top 

     if self.rect.y >= 600-self.rect.height:    # BALL HITS TOP AND BOTTOM 
      self.y_vel = 0 
      self.rect.y = 600 - self.rect.height 
      self.jumping = False 

    def move(self): 
     self.rect.y += self.y_vel 

    def draw(self, surface): 
     surface.blit(self.image, (self.rect.x, self.rect.y)) 

class Platform(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load('levoneplatform.png') 
     self.rect = self.image.get_rect() 

class Enemy(pygame.sprite.Sprite): 

def __init__(self): 
    pygame.sprite.Sprite.__init__(self) 
    self.image = pygame.image.load('enemy.png') 
    self.rect = self.image.get_rect() 


class Menu(): 
    def __init__(self): 
     self.background_image = pygame.image.load('menu.png').convert_alpha() 

    def update(self): 
     screen.blit(self.background_image, [0,0]) 


class LevOne(): 
    def __init__(self): 

     self.background_image = pygame.image.load('night.png').convert_alpha() 


     platforms_one = [ (200,300), 
         (50,500), 
         (550,650), 
         (300,200), 
         (120,100) 
        ] 
     for k,v in platforms_one: 
      platform = Platform() 
      enemy = Enemy() 
      platform.rect.x = k 
      enemy.rect.x = k 
      platform.rect.y = v 
      enemy.rect.y = v - 44 
      platform_list.add(platform) 
      enemy_list.add(enemy) 

    def update(self): 
     screen.blit(self.background_image, [0, 0]) 

class LevTwo(): 
    def __init__(self): 

     self.background_image = pygame.image.load('night.png').convert_alpha() 

     platforms_two = platforms_two = [ (300,400), 
         (500,500), 
         (100,300), 
         (300,100), 
        ] 

     for k,v in platforms_two: 
      platform = Platform() 
      enemy = Enemy() 
      platform.rect.x = k 
      enemy.rect.x = k 
      platform.rect.y = v 
      enemy.rect.y = v - 44 
      platform_list.add(platform) 
      enemy_list.add(enemy) 

    def update(self): 
     screen.blit(self.background_image, [0,0]) 


screen = pygame.display.set_mode((800,600)) 
enemy_list = pygame.sprite.Group() 
platform_list = pygame.sprite.Group() 
Poppy = Poppy() 
Menu = Menu() 
LevOne = LevOne() 


clock = pygame.time.Clock() 
level = 1 

while True: 
    clock.tick(60) 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == KEYDOWN: 
      if event.key == K_SPACE: 
       Poppy.jump() 

    Menu.update() 
    if event.type == MOUSEBUTTONDOWN: 
     x,y = pygame.mouse.get_pos() 
     if x >= 544.86 and x <= 700.86 and y <= 385.02 and y >= 340.03: 
      level = 1 

    if level == 1: 


     Poppy.keys() 
     Poppy.move() 

     LevOne.update() 


     Poppy.draw(screen) 
     platform_list.draw(screen) 
     enemy_list.draw(screen) 

     pygame.display.update() 

    if level == 2: 

     second_lives = 3 

     LevTwo.update() 
     Poppy.keys() 
     Poppy.move() 

     platform_list.draw(screen) 
     enemy_list.draw(screen) 
     Poppy.draw(screen) 

    pygame.display.update() 

回答

1

您已經將重力設置爲0.5單位/秒^ 2,但跳躍速度爲-50單位/秒;這將需要近兩分鐘的時間才能再次開始下降!

要麼增加重力,要麼降低跳躍速度到-3。

編輯:

調用此函數在您的move()update()功能的地方:

def jump_update(self): #checking the jumps 
    if self.jumping: 
     self.y_vel += self.grav 
     self.rect.y += self.y_vel 

現在它不被使用。

+0

謝謝,但它一直在向上移動,不會停止。我能做什麼? – Angela

+0

@Angela我看了你的代碼,出現了一些錯誤。我編輯了我的答案,包括其中之一。不要忘記確保你正確地檢查碰撞;我無法讓玩家登陸平臺。你也可以在'self.y_vel> 12'時停止增加重力,以防止它們變得太快。 – Aaron3468