Python:为什么我的两个对象同时移动?
基本上,每当我按下left、right、a或d时,它都会同时移动两个字符而不是一个。我在更新前后都尝试过包含打印语句,我四处询问,被告知这是一个别名问题,但我仍然找不到解决方案。我是否需要创建两个独立的类,或者我在某些代码中做了一些错误的事情Python:为什么我的两个对象同时移动?,python,class,Python,Class,基本上,每当我按下left、right、a或d时,它都会同时移动两个字符而不是一个。我在更新前后都尝试过包含打印语句,我四处询问,被告知这是一个别名问题,但我仍然找不到解决方案。我是否需要创建两个独立的类,或者我在某些代码中做了一些错误的事情 import simplegui WIDTH = 800 HEIGHT = 600 #class for character class Character: def __init__(self, pos, radius, vel = [0,0]
import simplegui
WIDTH = 800
HEIGHT = 600
#class for character
class Character:
def __init__(self, pos, radius, vel = [0,0]):
self.pos = pos
self.vel = vel
self.radius = radius
#updates position
def update(self, state):
self.pos[0] += self.vel[0]
self.pos[1] += self.vel[1]
#moving left and right
def change_left_vel(self):
self.vel[0] -= 2
def change_right_vel(self):
self.vel[0] += 2
#draws character
def draw(self, canvas, state):
canvas.draw_circle(self.pos, self.radius, 5, "White", "White")
#initializes characters and frame
class GameState:
def __init__(self):
self.frame = simplegui.create_frame("Super Smash Squad", WIDTH, HEIGHT)
self.frame.set_keydown_handler(self.keydown)
self.frame.set_keyup_handler(self.keyup)
self.frame.set_draw_handler(self.draw)
self.char1 = Character([200, 200], 15)
self.char2 = Character([400, 200], 25)
self.frame.start()
#movement for both characters
def keydown(self, key):
if key == simplegui.KEY_MAP["a"]:
self.char1.change_left_vel()
elif key == simplegui.KEY_MAP["d"]:
self.char1.change_right_vel()
elif key == simplegui.KEY_MAP["left"]:
self.char2.change_left_vel()
elif key == simplegui.KEY_MAP["right"]:
self.char2.change_right_vel()
def keyup(self, key):
if key == simplegui.KEY_MAP["a"]:
self.char1.change_right_vel()
elif key == simplegui.KEY_MAP["d"]:
self.char1.change_left_vel()
elif key == simplegui.KEY_MAP["left"]:
self.char2.change_right_vel()
elif key == simplegui.KEY_MAP["right"]:
self.char2.change_left_vel()
#draws everything
def draw(self, canvas):
self.char1.update(self)
self.char2.update(self)
self.char1.draw(canvas, self)
self.char2.draw(canvas, self)
# start frame
GameState()
您创建的每个
字符
的可能重复项,没有为vel
参数提供明确的值,共享与self.vel
相同的默认值,并且您稍后使用该值所做的一切都只是将其更改到位,因此每个人都继续共享相同的速度。值类型,请救命!