我怎样才能在我的代码中做一个弹性碰撞,当条件语句为真时,只向前移动子弹,而不反弹,我错了吗?
class Problem2(Scene):
def construct(self):
square = Square(side_length=3)
string = Line(square.get_corner(
UP), [0, 4, 0], buff=0)
bullet = Circle(radius=0.2, fill_color=GREY, fill_opacity=1)
bullet.shift(6*LEFT)
def updatebullet(bullet, dt):
bullet_vel = 2
bullet.shift(bullet_vel*dt)
if bullet.get_x() >= square.get_x():
bullet_vel = -bullet_vel
bullet.add_updater(updatebullet)
self.play(FadeIn(square, string))
self.play(FadeIn(bullet))
self.wait(10)
1条答案
按热度按时间2nbm6dog1#
你的问题是,每次调用函数时,
bullet_vel
都被自动分配给2
,然后移位完成,然后它被更改。这意味着更改从未生效,因为每次调用该函数时都会重置。我在这段代码中所做的就是在子弹移动之前移动速度的变化(我还添加了一个标志,这样它就不会在正负速度之间交替出现)