скорость игры в пиг игры варьируется от компьютера к другому - PullRequest
0 голосов
/ 28 апреля 2018

Я только что закончил свою вторую игру на Python с pygame, но на этот раз я столкнулся с новой проблемой. Когда я попробовал игру на другом компьютере, скорость игры была такой высокой, намного выше, чем должна была быть, я попытался настроить FPS, но это не помогло. Как это можно исправить и почему это происходит даже тогда, когда я уже установил все настройки, такие как скорость движения и игровой FPS?

import pygame
from settings import Settings
import game_functions as gf
from ship import Ship
from pygame.sprite import Group
from game_stats import Stats
from animation import spriteSheet
from scoreboard import ScoreBoard
from button import Button

def run_game():

    pygame.init()

    icon = pygame.image.load('icons/icon.png')
    pygame.display.set_icon(icon)

    so_settings = Settings()

    screen = pygame.display.set_mode((so_settings.screen_width, so_settings.screen_height))

    pygame.display.set_caption('Space Vikers')

    last_tick = 0    

    ship = Ship(screen, so_settings)
    stats = Stats(so_settings, screen)


    bullets = Group()
    bullets_enemy = Group()
    enemies = Group()
    explosion = Group()

    exploAni = spriteSheet("animations/explosion.png", 5, 4)
    sb = ScoreBoard(so_settings, screen, stats, bullets, ship)
    btn = Button(screen)

    gf.start_background_music()

    clock = pygame.time.Clock()
    FPS = 120
    while True:
        clock.tick(FPS)

        while stats.main_menu:

            gf.move_bg(so_settings, screen, sb, stats, last_tick)
            btn.draw_button()
            pygame.display.flip()
            gf.check_event(screen, so_settings, ship, bullets, sb, stats, btn)

        if stats.game_active:
            gf.update_enemy_bullet(bullets_enemy, so_settings, screen)
            gf.update_bullet(bullets, so_settings, sb)
            gf.generate_enemy(so_settings, stats, last_tick, screen, ship, enemies, bullets_enemy, bullets, explosion, sb)
            gf.update(so_settings, screen, bullets, enemies, bullets_enemy, ship, exploAni, explosion, stats, sb)
            gf.move_bg(so_settings, screen, sb, stats, last_tick)
            gf.check_event(screen, so_settings, ship, bullets, sb, stats, btn)
        else:
            gf.move_bg(so_settings, screen, sb, stats, last_tick)
            gf.check_event(screen, so_settings, ship, bullets, sb, stats, btn)

run_game()

1 Ответ

0 голосов
/ 28 апреля 2018

Ваша проблема в том, что медленный компьютер не способен обрабатывать 120 кадров в секунду. Вы можете легко проверить это, включив следующую строку в цикл после оператора clock.tick:

print(clock.get_fps())

Это напечатает фактически достигнутый FPS

Есть способы исправить это. Сначала вы можете сделать все скорости движения в зависимости от возвращаемого значения clock.tick:

dt = clock.tick()

А потом где-то в скриптах движения:

pos = pos+speed*dt # Just an example

Это то, что вы всегда должны делать в будущем.

Если вы не хотите переписывать свою систему движения, просто уменьшите частоту кадров:

FPS = 30
...