Как я могу заставить свой спрайт нормально ходить в модуле python: pygame? - PullRequest
0 голосов
/ 09 апреля 2020

Первое оправдание за мой английский sh, я француз. У меня есть небольшая проблема: я делаю 2d RPG в Pygame, и я сделал свою карту со множеством маленьких изображений травы, дерева ... Но когда я помещаю реальный размер текстур на экран, мой герой-спрайт дергается, поэтому я попробуйте уменьшить размер блоба c: мой спрайт ходил нормально, но текстуры были очень уродливыми, поэтому я задам вам вопрос: знаете ли вы, как это решить? Мой основной код:

import pygame
from game import Game
from level import Level
pygame.init()

lvl = Level()
screen = pygame.display.set_mode((1080, 720))
pygame.display.set_caption("RPG") 
game = Game()
running = True
lvl.generer()
print(game.player.rect)


while running:
    lvl.afficher(screen, 0, 0)
    if game.pressed.get(pygame.K_RIGHT) and game.player.rect.x + game.player.rect.width < 1080:
        game.player.move_right()
        #print(game.player.rect.x)

    elif game.pressed.get(pygame.K_LEFT) and game.player.rect.x > 0:
        game.player.move_left()
        #print(game.player.rect.x)

    elif game.pressed.get(pygame.K_DOWN):
        game.player.move_down()
        #screen.scroll(0, -game.player.velocity)
        #print(game.player.rect.y)

    elif game.pressed.get(pygame.K_UP):
        game.player.move_up()
        #screen.scroll(0, game.player.velocity)
        #print(game.player.rect.y)

    screen.blit(game.player.image, game.player.rect)

    pygame.display.flip()

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

        elif event.type == pygame.KEYDOWN:
             game.pressed[event.key] = True

        elif event.type == pygame.KEYUP:
            game.pressed[event.key] = False

И мой класс игрока (который унаследовал игровой класс, но я не ставлю свой игровой класс на этот пост)

import pygame

class Player(pygame.sprite.Sprite):
    def __init__(self, game):
        super(Player, self).__init__()
        self.game = game
        self.health = 100
        self.maxHealth = 100
        self.attack = 10
        self.velocity = 100
        self.image = pygame.image.load("assets/player/player_face/player_face.png")
        self.original_image = pygame.image.load("assets/player/player_face/player_face.png")
        self.image = pygame.transform.scale(self.image, (300, 300)) 
        self.rect = self.image.get_rect()
        self.rect.x = 400
        self.rect.y = 500

    def move_right(self):
        self.rect.x += self.velocity
        self.image = pygame.image.load("assets/player/player_profileLeft/player_profile_left.png")
        self.image = pygame.transform.scale(self.image, (300, 300)) 

    def move_left(self):
        self.rect.x -= self.velocity
        self.image = pygame.image.load("assets/player/player_profileRight/player_profile_right.png")
        self.image = pygame.transform.scale(self.image, (300, 300)) 

    def move_down(self):
        self.rect.y += self.velocity
        self.image = pygame.image.load("assets/player/player_face/player_face.png")
        self.image = pygame.transform.scale(self.image, (300, 300)) 

    def move_up(self):
        self.rect.y -= self.velocity
        self.image = pygame.image.load("assets/player/player_back/player_dos.png")
        self.image = pygame.transform.scale(self.image, (300, 300)) 

и мой игровой класс:

# -*- coding: utf-8 -*-
import pygame
from player import Player

class Game:
    def __init__(self):
        self.all_players = pygame.sprite.Group()
        self.player = Player(self)
        self.all_players.add(self.player)
        self.pressed = {}


    def check_collision(self, sprite, group):
        return pygame.sprite.spritecollide(sprite, group, False, pygame.sprite.collide_mask)

1 Ответ

0 голосов
/ 09 апреля 2020

Если я правильно вижу, вы не используете [var] = pygame.time.Clock () и [var] .tick ([некоторое число]), что ограничивает FPS. Я думаю, что ваша проблема в том, что FPS колеблется и вызывает отставание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...