如何为PyGame项目定义函数签名?

时间:2017-03-10 17:11:17

标签: python pygame

我正在尝试确定此函数fireshell()的位置参数(我认为这就是所谓的)。

我尝试过self和变量elapsedTimepos.xpos.y的组合而没有成功。我试图确定调用和定义中传递的参数。

我是编程新手,请原谅我缺乏知识。

 if event.type == pg.KEYUP:

       if event.key == pg.K_0:
                self.endTime = time.time()
                self.end = timer()
                self.E = pg.time.get_ticks()
                self.elapsedTime = self.endTime - self.startTime
                print("ENDING", self.endTime, self.startTime)
                print("elapsed time", (self.endTime - self.startTime))
                print (self.start, self.end, "difference", (self.end - self.start))
                print ( "E", self.E, "S", self.S)
                print("elapsed time", self.elapsedTime)
                self.player.fireshell( ?, ?, ?, ?)

me with fireshell

def fireshell(?, ?, ?, ?):
    fire = True
    print("fire", self.pos.x, self.pos.y)
    fireX = int(self.pos.x) 
    fireY = int(self.pos.y) - 30  


    while fire:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                pg.quit()
                quit()
        pg.draw.circle(self.screen, RED, (fireX, fireY), 5)

        fireX -= (12 - elapsedTime)*2
        print(elapsedTime)
        print(fireX)
        pg.display.update()
        self.clock.tick(20)

1 个答案:

答案 0 :(得分:0)

这取决于您实际尝试传递给函数的内容。忽略变量一秒钟,你想用这个功能完成什么?看起来你正试图发射射弹。现在我认为self.pos.x和self.pos.y是你所拥有的射击射弹的位置(可能是一个坦克?或任何射击射弹的东西)。所以我认为这将成为射弹路径的起点。行

fireX = int(self.pos.x) 
fireY = int(self.pos.y) - 30  

将设置射弹的起点(与坦克x相同的x,以及坦克上方30个像素,这听起来像一个非常标准的起点)。然后,在那之后你有了你的火圈,它只是沿着它的路径移动射弹。我在循环中看到的问题是该循环是无限的。您将fire变量初始化为true

fire = True

但你从来没有做过那么假,所以"同时火"循环将无限循环。您需要为循环结束的位置创建一个条件,这取决于您。你只需要确定你想要坦克射弹的路径何时结束,当发生这种情况时,将火力设置为假,循环将结束,继续你的基本游戏功能。

关于你需要传递什么。从我所看到的看起来你看起来你正在使用一个对象存储你的数据(来自你如何使用self.pos.x),所以我要做的就是放这个类里面的fireshell函数,然后你不需要向函数传递任何东西,你可以在函数本身内使用self.pos.x,self.pox.y和self.elapsed时间,并且因为函数将是与这些变量相同的类的成员,不应存在访问冲突或错误。