R
R
Roman Izumrudov2021-02-26 00:01:47
Python
Roman Izumrudov, 2021-02-26 00:01:47

I am writing a platformer in python on windows 10, I want to make the character turn around (change the picture when pressed), but for some reason it doesn’t work for me?

At startup and during error checking, it does not issue, but does not change the image,

the code of the main.py file

from pygame import *
import sys
import os

# Инициализируем загруженную библиотеку.
init()


pictures_folder = os.path.join('p1_jump.png')
player_left = image.load(os.path.join('p1_walk_l.png'))
player_right = image.load(os.path.join('p1_walk_r.png'))


# Создаем окно разрешением 640х480
screen = display.set_mode((640, 480))

# Устанавливаем название окна
display.set_caption('example')

# Загружаем фоновый рисунок, в формате:
# jpg, png, gif(без анимации), bmp, pcx, tga(без сжатия), tif.
background = image.load('bg.png')


######
images = ['p1_walk_l.png']
######


# Отрисовываем рисунок в нашем окне
screen.blit(background, (0, 0))

# Создаем игровой объект
class GameObj:
    def __init__(self, img, x, y, step):
        self.img = img # Картинка объекта
        self.x = x # x, y - коодинаты начального положения
        self.y = y
        self.step = step # Шаг, на который будет смещаться объкт
        self.pos = img.get_rect().move(x, y)
    def _move(self, event):
        if event.key == K_UP: #273 код клавиши вверх
            self.pos = self.pos.move(0, -self.step)
        if event.key == K_DOWN:
            self.pos = self.pos.move(0, self.step)
        if event.key == K_LEFT:
            self.image = player_left
            self.pos = self.pos.move(-self.step, 0)
        if event.key == K_RIGHT:
            self.image = player_left
            self.pos = self.pos.move(self.step, 0)

       
avatar = image.load('p1_jump.png')

# Инициируем игровой объект
x = GameObj(avatar, 320, 220, 10)

# Рисуем картинку объекта, в его координатах
screen.blit(x.img, x.pos)

# Запускаем бесконечный цикл, чтобы окно не схлопнулось после появления :)
while 1:
    for i in event.get(): # Перебор в списке событий
        if i.type == QUIT: # Обрабатываем событие шечка по крестику закрытия окна
            sys.exit()
        if i.type == KEYDOWN:
            screen.blit(background, x.pos, x.pos)
            x._move(i)
            screen.blit(x.img, x.pos)
    # Обновляем изображение в окне, чтобы изменения в нем стали видны
    display.flip()


pl.py file code
import pygame
import random
import os


class Player(pygame.sprite.Sprite):
    def __init__(self, player_img, color, w, h):
        pygame.sprite.Sprite.__init__(self)
        self.image = player_img
        self.image.set_colorkey(color)
        self.rect = self.image.get_rect()
        self.w = w
        self.h = h
        self.rect.center = (self.w / 2, self.h / 2)

    def update(self):
        self.rect.x += 5
        if self.rect.left > self.w:
          self.rect.right = 0

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
soremix, 2021-02-26
@Pelemexa

Do you have unused variables highlighted in your code editor?
The same

if event.key == K_LEFT:
  self.image = player_left
  self.pos = self.pos.move(-self.step, 0)
if event.key == K_RIGHT:
  self.image = player_left

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question