2016-05-28 4 views
1

プラットフォームゲームを作るためにスプライトでこのようなゲームを作った。パイライトはスプライトのために遅れていますか?

以前は大丈夫でしたが、今は遅れているので、重力をかけたときに1つ動き、不自然に見えます。

プラットフォームが長方形の場合、最初は問題ありませんでした。

プラットフォームを変更し、スプライトとして敵のリストを挿入しました。

正常に動作しますが、非常に遅く、非常に遅いです。 私はキャラクターがどのように「吃音」しているのが好きではありません。 どうすればいいですか?

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 = 0 
     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.grav = 0 
      self.y_vel = 0 
      self.rect.y = 600 - self.rect.height 
      self.jumping = False 

    def move(self): 
     self.rect.x += 0 
     self.rect.y += 10 

    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 setup(self): 
     background_image = pygame.image.load('menu.png').convert_alpha() 
     screen.blit(background_image, [0,0]) 


class LevOne(): 
    def setup(self): 

     background_image = pygame.image.load('night.png').convert_alpha() 
     screen.blit(background_image, [0, 0]) 


     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) 

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 = 0 

while True: 
    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() 
       Poppy.jump_update() 

    Menu.setup() 
    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: 

     first_lives = 5 
     LevOne.setup() 

     Poppy.keys() 
     Poppy.move() 


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


     Poppy.draw(screen) 

    pygame.display.update() 

答えて

1

を設定することができます私はあなたがLevOneのバックグラウンドをあらゆる繰り返しでロードしていることに気づき、さまざまなスプライトを初期化しています。これは1回限りの操作なので、すべての反復でそれを行う必要はなく、おそらくあなたが経験している吃音を引き起こしている可能性があります。 LevOneクラスの__init__に背景をロードし、そのレベルで使用されるスプライトをすべて読み込んでから、セットアップメソッドでブリッジするときにバックグラウンド変数にアクセスする必要があります。

これの代わりに;

class LevOne(): 
    def setup(self): 

     background_image = pygame.image.load('night.png').convert_alpha() 
     screen.blit(background_image, [0, 0]) 


     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) 

これを試してみてください:

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 setup(self): 
     screen.blit(self.background_image, [0, 0]) 

同じ問題は、私が気づいMenuクラスのためにそこにあります。同じ変更を以下のように行う必要があります。私はちょうど私は、これがゆっくり実行していると考えている理由を改めて表明したい

class Menu(): 
    def __init__(self): 
     self.background_image = pygame.image.load('menu.png').convert_alpha() 
    def setup(self): 
     screen.blit(self.background_image, [0,0]) 

は、遅いの操作ですべての反復、ときにシステムからファイルを開くことであり、また、あなたのスプライトリストを作成しておくことですレベル1のためには、一度だけ行う必要があります。

0

引数FPS(変数)で、しばらく "clock.tick" の末尾に挿入しよう:

clock.tick(60) #60 are the frames per second 

pygame.display.update() 

この機能を使用すると、ゲームframe_rateはに

関連する問題