名称错误:未定义名称“playerMovement”

2024-06-06 21:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是来问我的代码有什么问题?我正在制作一个游戏引擎,我想最简单的分类玩家类型的方法就是把它们放到不同的脚本中,然后在那里使用它们。然而,我有一个轻微的问题,这样做,并没有线索如何解决它。你知道吗

下面是我得到的错误:

Traceback (most recent call last): File "C:\Users\Harry Court\AppData\Local\Programs\Python\Python36-32\projects\Game Engine\main.py", line 48, in <module> topDownPlayerControls() NameError: name 'topDownPlayerControls' is not defined

附言:如果有更简单的方法,请告诉我!你知道吗

你知道吗主.py你知道吗

import pygame
from playerSelection import *


import ctypes
from ctypes.wintypes import HWND, LPWSTR, UINT


# Window Size
display_w = 1366
display_h = 768

# Initialize and Set Display
pygame.init()
gameDisplay = pygame.display.set_mode((display_w, display_h))
pygame.display.set_caption("The Joker Engine (Version Undecided) - By Harrison Court")
clock = pygame.time.Clock()


# Ctypes ID's
IDYES = 6
IDNO = 7

x = (display_w * 0.45)
y = (display_h * 0.8)

# Colours
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)

running = True

gameDisplay.fill(white)

while running:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:

            # Misc.
            if event.key == pygame.K_ESCAPE:
                quitWindow = ctypes.windll.user32.MessageBoxW(0, "Are you sure you want to quit?", "Warning!", 4)

                # Confirm they want to leave.
                if quitWindow == IDYES:
                    quit()

        topDownPlayerControls()

pygame.display.update()
clock.tick(60)

pygame.quit()
quit()

你知道吗玩家选择.py地址:

import pygame

from tkinter import Tk, Frame, Menu

import ctypes
from ctypes.wintypes import HWND, LPWSTR, UINT

x = (300)
y = (300)

playerImg = pygame.image.load('Player.png')

class playerMovement():

    def player(x,y):
        gameDisplay.blit(playerImg, (x,y))

    def topDownPlayerControls():

        if event.type == pygame.KEYDOWN:
            # Left & Right
            if event.key == pygame.K_LEFT:
                x_change = -5
                print("Left")
            elif event.key == pygame.K_RIGHT:
                x_change = 5
                print("Right")

            # Up & Down
            if event.key == pygame.K_DOWN:
                y_change = 5
                print("Down")

            elif event.key == pygame.K_UP:
                y_change = -5
                print("Up")

        # If no keys are pressed, do this...
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                x_change = 0
            if event.key == pygame.K_DOWN or event.key == pygame.K_UP: 
                y_change = 0

        # Player Movement
        x += x_change
        y += y_change

更新脚本:

你知道吗主.py地址:

import pygame
from playerSelection import *
from gui import *
from tkinter import *

import ctypes
from ctypes.wintypes import HWND, LPWSTR, UINT

# Define stuff
player = playerMovement()

# Window Size
display_w = 1366
display_h = 768

# Initialize and Set Display
pygame.init()
gameDisplay = pygame.display.set_mode((display_w, display_h))
pygame.display.set_caption("The Joker Engine (Version Undecided) - By Harrison Court")
clock = pygame.time.Clock()

# Ctypes ID's
IDYES = 6
IDNO = 7

x = (display_w * 0.45)
y = (display_h * 0.8)

# Colours
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)

running = True

gameDisplay.fill(white)

# Make sure the game isn't dying on us.
while running:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:

            # Misc.
            if event.key == pygame.K_ESCAPE:
                quitWindow = ctypes.windll.user32.MessageBoxW(0, "Are you sure you want to quit?", "Warning!", 4)

                # Confirm they want to leave.
                if quitWindow == IDYES:
                    quit()

    player.displayPlayer(x,y)
    player.topDownPlayerControls


pygame.display.update()
clock.tick(60)

pygame.quit()
quit()

你知道吗玩家选择.py地址:

import pygame

from tkinter import Tk, Frame, Menu

import ctypes
from ctypes.wintypes import HWND, LPWSTR, UINT

x = (300)
y = (300)

display_w = 1366
display_h = 768

gameDisplay = pygame.display.set_mode((display_w, display_h))
playerImg = pygame.image.load('Player.png')

class playerMovement():

    def displayPlayer(self,x,y):
        gameDisplay.blit(playerImg, (x,y))

    def topDownPlayerControls(self):

        if event.type == pygame.KEYDOWN:
            # Left & Right
            if event.key == pygame.K_LEFT:
                x_change = -5
                print("Left")
            elif event.key == pygame.K_RIGHT:
                x_change = 5
                print("Right")

            # Up & Down
            if event.key == pygame.K_DOWN:
                y_change = 5
                print("Down")

            elif event.key == pygame.K_UP:
                y_change = -5
                print("Up")

        # If no keys are pressed, do this...
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                x_change = 0
            if event.key == pygame.K_DOWN or event.key == pygame.K_UP: 
                y_change = 0

        # Player Movement
        x += x_change
        y += y_change

Tags: keyfrompyimporteventiftypedisplay
1条回答
网友
1楼 · 发布于 2024-06-06 21:52:43

错误消息是函数topDownPlayerControls未定义。这是因为您试图将其作为自由函数调用。但是,这个函数是在playerMovement类中定义的。因此,您首先需要创建一个playerMovement对象,然后对该对象调用topDownPlayerControls函数。它看起来像这样:

player = playerMovement()
player.topDownPlayerControls()

看起来在那之后你还会有很多其他的失败,但我将把它作为练习:)

相关问题 更多 >