Member 13718939 Ответов: 1

Я новичок в программировании, я хочу переместить изображение(танка) в pygame, но ошибка говорит: "объект" событие "не имеет атрибута "ключ", не мог бы кто-нибудь мне помочь?


#this is entity:
from pygame import *
import pygame
class Entity:
    type = 0
    
    def draw(self,win,Tank):
        win.blit(Tank,(29, 358))


    def MoveUpdate(self,win,Tank):
        for event in pygame.event.get():
            if event.type == KEYDOWN and event.key == K_w:
                v.y = v.y + 5
        
            elif event.type == KEYDOWN and event.key == K_s:
                
                v.y = v.y - 5
            
            elif event.key == pygame.K_a:
            
                Tank = pygame.transform.rotate(win,-45)
            
            elif event.key == pygame.K_d:
            
                Tank = pygame.transform.rotate(win,45)
              
 #this is Window:
import sys
import pygame
import Entity
running = True

class Window:
    def __init__(self,text):
        # setup/open a window
        pygame.init()
        infoObject = pygame.display.Info()
        self.DISPLAYSURF = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
        pygame.display.set_caption(text)
        BackGround = pygame.image.load("grass20.png")
        BackGround = pygame.transform.scale(BackGround, (infoObject.current_w,infoObject.current_h) )
        self.DISPLAYSURF.blit(BackGround,(0, 0))
        self.Tank = pygame.image.load("Tank.png")
        self.Tank = pygame.transform.scale(self.Tank,(50,50))
        
    def update(self):
             #check for events
        # quit pygame (close the window)
        for event in pygame.event.get():  
            if event.key == pygame.K_q:
                global running
                running = False
                pygame.quit()
                sys.exit()
#this is Vector:
class Vector:
    def __init__(self,x,y):
        self.x = x
        self.y = y
#This is main:
import pygame
from Vector import *
from Window import *
from Entity import *

running = True

# store positions, anything that has x and y
     
Ent = Entity()

win = Window("TankGame")

while running:
    Ent.draw(win.DISPLAYSURF,win.Tank)
    Ent.MoveUpdate(win.DISPLAYSURF,win.Tank)
    win.update()
    pygame.display.flip()


Что я уже пробовал:

Я попробовал поставить скобки,превратив else if в elif.

Richard MacCutchan

Какая строка выдает ошибку?

Richard MacCutchan

Проблема скорее всего в том что вы проверяете event.key для событий, которые не могут быть нажатиями клавиш. Регистрация event.type первый.

CPallini

Мой виртуальный 5.

1 Ответов

Рейтинг:
4

CPallini

Цитата:
если event.type == KEYDOWN и event.key == K_w:
v. y = v. y + 5

elif event.type == KEYDOWN и event.key == K_s:

v. y = v. y - 5

событие Элиф.ключ == с которым Pygame.К_а:

Танк =, с которым Pygame.преобразования.поворот(победа,-45)

событие Элиф.ключ == с которым Pygame.K_d:

Танк =, с которым Pygame.преобразования.поворот(Победы,45)
Как Ричард рекомендуется, чтобы вы всегда были уверены, что это событие связано с клавиатурой, прежде чем пытаться получить доступ к key собственность.
Так
if event.type == KEYDOWN:
    if event.key == K_w:
        v.y = v.y + 5
    elif event.key == K_s:
        v.y = v.y - 5
    elif event.key == pygame.K_a:
        Tank = pygame.transform.rotate(win,-45)
    elif event.key == pygame.K_d:
        Tank = pygame.transform.rotate(win,45)


Richard MacCutchan

Есть реальные 5

CPallini

Большое спасибо.