我正在做一个类,以放入所有有关pygame键盘的命令,至少是我需要的所有命令,但是当我使用if or else等于我要稍后定义的“变量”时,它将返回错误告诉我它没有定义。
我对技术领域的知识还不够了解,对不起。我开始使用button作为key()
的参数,并且遇到相同的错误,然后尝试使用__init__()
,但是我可以使用它(不确定如何使用),然后以这种方式进行制作...
class control():
def button(self, button):
self.button = button
def exit(self):
if event.type == pygame.QUIT:
pygame.quit()
def key(self, axis, speed):
if event.type == pygame.KEYDOWN:
if event.key == self.button:
axis = 0
axis = speed
ctrl = control()
w = control().button(K_w)
s = control(K_s)
UP = control(K_UP)
DOWN = control(K_DOWN)
while True:
for event in pygame.event.get():
ctrl.exit()
w.key(y1, -5)
s.key(y1, +5)
UP.key(y2, -5)
DOWN.key(y2, +5)
File "C:/Users/Smith/PycharmProjects/untitled/venv/test0002.py", line 25, in <module> w = control().button(K_w) NameError: name 'K_w' is not defined
我想使用键功能定义按钮,因此我可以稍后在每次键盘输入时使用它,而不必每次都重新写一次。
答案 0 :(得分:0)
错误消息
未定义名称“ K_w”
发生,因为您忘记了模块名称空间。
该常量的名称为 static Int64 substrings(string n)
{
string p = string.Empty, q = string.Empty, r = string.Empty;
char[] c = n.ToCharArray();
string s = string.Empty;
Int64 res = 0;
for (int x = 0; x < n.Length; x++)
{
res += Convert.ToInt64(n[x].ToString());
}
for (int x = 0; x < n.Length; x++)
{
if (x > 0)
{
p = n[x - 1].ToString();
q = n[x].ToString();
r = p + "" + q;
p = q;
q = r[0].ToString();
res += Convert.ToInt64(r);
}
}
for(int x = 0; x < n.Length; x++)
{
if (n.Length > 2)
{
s += n[x];
}
}
if (n.Length > 2)
{
return res + Convert.ToInt64(s);
}
else
{
return res;
}
}
,而不是pygame.K_w
。常量放置在pygame模块的命名空间中。
使用常量的完整名称:
K_w
或导入pygame常量,请参见pygame.locals
w = control().button(pygame.K_w)
另外,变量from pygame.locals import *
# [...]
w = control().button(K_w)
从未定义,因为w
确实会生成对象,但是control()
不会返回任何值。方法按钮应返回button()
:
self
但是我建议在类class control():
def button(self, button):
self.button = button
return self
中实现构造函数,而不要在方法control
中实现(当然,您可以同时使用两者):
button
方法class control():
def __init__(self, button=0):
self.button = button
ctrl = control()
w = control(K_w)
s = control(K_s)
UP = control(K_UP)
DOWN = control(K_DOWN)
必须返回参数key
的新值:
axis