Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为什么我的两个对象同时移动?_Python_Class - Fatal编程技术网

Python:为什么我的两个对象同时移动?

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]

基本上,每当我按下left、right、a或d时,它都会同时移动两个字符而不是一个。我在更新前后都尝试过包含打印语句,我四处询问,被告知这是一个别名问题,但我仍然找不到解决方案。我是否需要创建两个独立的类,或者我在某些代码中做了一些错误的事情

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
相同的默认值,并且您稍后使用该值所做的一切都只是将其更改到位,因此每个人都继续共享相同的速度。值类型,请救命!