Проблемы с перемещением персонажа в игре с мышью на питоне - PullRequest
0 голосов
/ 25 сентября 2019

Я играю в игру point'n'click в pygame.Я мог бы реализовать движение клавиатуры, но моим персонажем нельзя управлять мышью.Я получаю эту ошибку:

Traceback (most recent call last):
  File "/home/grzegorz/Pulpit/Gierka/gierka.py", line 19, in 
<module>
class Player(pg.Rect):
File "/home/grzegorz/Pulpit/Gierka/gierka.py", line 34, in Player
if event.key == BUTTON_LEFT:
AttributeError: 'Event' object has no attribute 'key'

Вот исходный код:

import pygame as pg
from pygame.locals import *
from pynput.mouse import Controller  

pg.init()

mouse = Controller()
pg.mouse.set_cursor(*pg.cursors.broken_x)
pg.display.set_caption("White Collar: The Game")

display = pg.display.set_mode((1000, 1000))
pg.init()
character = pg.image.load("hero.png")
background = pg.image.load("obraz1.png")
characterx = 300
charactery = 300

class Player(pg.Rect):
while True:
    display.blit(background, (0, 0))
    display.blit(character, (characterx, charactery))
    for event in pg.event.get():
        if event.type == KEYDOWN:
            if event.key == K_a:
                characterx -= 40
            if event.key == K_d:
                characterx += 40
            if event.key == K_w:
                charactery -= 40
            if event.key == K_s:
                charactery += 40
        if event.type == MOUSEBUTTONDOWN:
            if event.key == BUTTON_LEFT:
                characterx -= 10
                charactery -= 10
        if event.type == QUIT:
            pg.quit()
            exit()
    pg.display.update()

Я пытаюсь добиться перемещения моего персонажа с помощью мыши - клавиатура уже работает, ноЯ понятия не имею, как реализовать мышь в этой игре

1 Ответ

0 голосов
/ 26 сентября 2019

Исключение говорит о том, что объект Event не имеет атрибута key.Взгляните на документацию Pygame :

События, поступающие из системы, будут иметь гарантированный набор атрибутов-членов в зависимости от типа.Ниже приведен список типов событий со своими конкретными атрибутами.

QUIT              none
ACTIVEEVENT       gain, state
KEYDOWN           key, mod, unicode, scancode
KEYUP             key, mod
MOUSEMOTION       pos, rel, buttons
MOUSEBUTTONUP     pos, button
MOUSEBUTTONDOWN   pos, button
JOYAXISMOTION     joy, axis, value
JOYBALLMOTION     joy, ball, rel
JOYHATMOTION      joy, hat, value
JOYBUTTONUP       joy, button
JOYBUTTONDOWN     joy, button
VIDEORESIZE       size, w, h
VIDEOEXPOSE       none
USEREVENT         code

Как вы можете видеть, когда Event имеет тип MOUSEBUTTONDOWN, он не имеет атрибута key, ноатрибуты pos и button.

Поэтому, если вы хотите проверить, нажата ли левая кнопка мыши, проверьте наличие event.button == 0.

Когда вы столкнетесь с этим видомошибки, используйте отладчик для проверки рассматриваемого объекта (или просто используйте print операторы) и посмотрите документацию.

...