<small id='WuT7D'></small><noframes id='WuT7D'>

      1. <i id='WuT7D'><tr id='WuT7D'><dt id='WuT7D'><q id='WuT7D'><span id='WuT7D'><b id='WuT7D'><form id='WuT7D'><ins id='WuT7D'></ins><ul id='WuT7D'></ul><sub id='WuT7D'></sub></form><legend id='WuT7D'></legend><bdo id='WuT7D'><pre id='WuT7D'><center id='WuT7D'></center></pre></bdo></b><th id='WuT7D'></th></span></q></dt></tr></i><div id='WuT7D'><tfoot id='WuT7D'></tfoot><dl id='WuT7D'><fieldset id='WuT7D'></fieldset></dl></div>
      2. <tfoot id='WuT7D'></tfoot>

        • <bdo id='WuT7D'></bdo><ul id='WuT7D'></ul>
        <legend id='WuT7D'><style id='WuT7D'><dir id='WuT7D'><q id='WuT7D'></q></dir></style></legend>

        如何在kivy Pong球赛中从另一个类中调用一个类的

        时间:2023-10-10

            <tfoot id='yIzP9'></tfoot>
          1. <small id='yIzP9'></small><noframes id='yIzP9'>

            1. <i id='yIzP9'><tr id='yIzP9'><dt id='yIzP9'><q id='yIzP9'><span id='yIzP9'><b id='yIzP9'><form id='yIzP9'><ins id='yIzP9'></ins><ul id='yIzP9'></ul><sub id='yIzP9'></sub></form><legend id='yIzP9'></legend><bdo id='yIzP9'><pre id='yIzP9'><center id='yIzP9'></center></pre></bdo></b><th id='yIzP9'></th></span></q></dt></tr></i><div id='yIzP9'><tfoot id='yIzP9'></tfoot><dl id='yIzP9'><fieldset id='yIzP9'></fieldset></dl></div>

                <tbody id='yIzP9'></tbody>
                <bdo id='yIzP9'></bdo><ul id='yIzP9'></ul>
                • <legend id='yIzP9'><style id='yIzP9'><dir id='yIzP9'><q id='yIzP9'></q></dir></style></legend>
                  本文介绍了如何在kivy Pong球赛中从另一个类中调用一个类的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我正在使用教程中提供的 PongGame 代码练习 Kivy.我想知道如何从新创建的类 - PongSample 调用 PongGame 类中的函数 - serve_ball2().在下面的代码中,我创建了一个 PongSample 类,以便在第一个球与球拍碰撞时为第二个球发球.

                  I'm practicing Kivy with the PongGame code given in the tutorial. I want to know how to call a function - serve_ball2() in the class PongGame from a newly created class - PongSample. In the below code I created a class PongSample to serve the second ball once the first ball collide with the paddle.

                  更新:我可以从 PongSample 调用 serve_ball2(),但 serve_ball2() 没有按预期运行,即它没有发球.

                  Update : I can call the serve_ball2() from PongSample but the serve_ball2() doesn't function as intended i.e it doesn't serve the ball.

                  我在下面分享了完整的代码.提前致谢

                  I've shared the complete code below. Thanks in advance

                  Pong.py:

                  from kivy.app import App
                  from kivy.uix.widget import Widget
                  from kivy.properties import NumericProperty, ReferenceListProperty,
                      ObjectProperty
                  from kivy.vector import Vector
                  from kivy.clock import Clock, time
                  from threading import Thread
                  
                  class PongPaddle(Widget):
                      score = NumericProperty(0)
                  
                      def bounce_ball(self, ball):
                          if self.collide_widget(ball):
                              vx, vy = ball.velocity
                              offset = (ball.center_y - self.center_y) / (self.height / 2)
                              bounced = Vector(-1 * vx, vy)
                              vel = bounced * 1.1
                              ball.velocity = vel.x, vel.y + offset
                              PongSample().call_game()
                  
                  class PongBall(Widget):
                      velocity_x = NumericProperty(0)
                      velocity_y = NumericProperty(0)
                      velocity = ReferenceListProperty(velocity_x, velocity_y)
                  
                      def move(self):
                          self.pos = Vector(*self.velocity) + self.pos
                  
                  class PongSample(Widget):
                      def call_game(self):
                          print 'PongSample'
                          ponggame=PongGame()
                          ponggame.serve_ball2()
                  
                  class PongGame(Widget):
                      ball = ObjectProperty(None)
                      ball2 = ObjectProperty(None)
                      player1 = ObjectProperty(None)
                      player2 = ObjectProperty(None)
                  
                      def serve_ball(self, vel=(4, 0)):
                          self.ball.center = self.center
                          self.ball.velocity = vel
                  
                      def serve_ball2(self, vel=(3, 0)):  
                          print 'Serve_ball2'
                          self.ball2.center = self.center
                          self.ball2.velocity = vel
                  
                      def serve_down(self):
                          print 'Inside Serve Down'
                          self.ball.center = self.center
                          self.ball.velocity = Vector(4,0).rotate(-90)
                  
                      def update(self, dt):
                          self.ball.move()
                          self.ball2.move()
                  
                          #bounce of paddles
                          self.player1.bounce_ball(self.ball)
                          self.player2.bounce_ball(self.ball)
                  
                          #bounce ball off bottom or top
                          if (self.ball.y < self.y) or (self.ball.top > self.top):
                              self.ball.velocity_y *= -1
                          if (self.ball2.y < self.y) or (self.ball2.top > self.top):
                              self.ball2.velocity_y *= -1
                  
                          #went of to a side to score point?
                          if self.ball.x < self.x:
                              self.player2.score += 1
                              self.serve_ball(vel=(4, 0))
                          if self.ball.x > self.width:
                              self.player1.score += 1
                              self.serve_ball(vel=(-4, 0))
                  
                          if self.ball2.x < self.x:
                              self.player2.score += 1
                              self.serve_ball2(vel=(3, 0))
                          if self.ball2.x > self.width:
                              self.player1.score += 1
                              self.serve_ball2(vel=(-3, 0))
                  
                      def on_touch_move(self, touch):
                          if touch.x < self.width / 3:
                              self.player1.center_y = touch.y
                          if touch.x > self.width - self.width / 3:
                              self.player2.center_y = touch.y
                  
                  class PongApp(App):
                      def build(self):
                          game = PongGame()
                          game.serve_ball()
                          Clock.schedule_interval(game.update, 1.0 / 60.0)
                          return game
                  
                  if __name__ == '__main__':
                      PongApp().run()
                  

                  pong.kv:

                      #:kivy 1.8.0
                  
                  <PongBall>:
                      size: 50, 50 
                      canvas:
                          Ellipse:
                              pos: self.pos
                              size: self.size          
                  
                  <PongPaddle>:
                      size: 25, 200
                      canvas:
                          Rectangle:
                              pos:self.pos
                              size:self.size
                  
                  <PongGame>:
                      ball: pong_ball
                      ball2: pong_ball2
                      player1: player_left
                      player2: player_right
                  
                      canvas:
                          Rectangle:
                              pos: self.center_x-5, 0
                              size: 10, self.height
                  
                      Label:
                          font_size: 70  
                          center_x: root.width / 4
                          top: root.top - 50
                          text: str(root.player1.score)
                  
                      Label:
                          font_size: 70  
                          center_x: root.width * 3 / 4
                          top: root.top - 50
                          text: str(root.player2.score)
                  
                      PongBall:
                          id: pong_ball
                          center: self.parent.center
                  
                      PongBall:
                          id: pong_ball2
                          center: self.parent.center
                  
                      PongPaddle:
                          id: player_left
                          x: root.x
                          center_y: root.center_y
                  
                      PongPaddle:
                          id: player_right
                          x: root.width-self.width
                          center_y: root.center_y
                  

                  推荐答案

                  我强调这似乎没有必要,而 PongSample 本身似乎根本不需要存在.但是,按照您的要求,我相信以下应该有效.然而,我真正不喜欢的一件事是,在 kv 文件中创建了一个 PongSample 实例,除了为 ball2 服务之外没有任何其他目的.不过……

                  I emphasize that this seems unnecessary, and that PongSample itself seems like it needn't exist at all. However, to do what you asked, I believe the following should work. One thing I really don't like about this however, is that a PongSample instance is created in the kv file, without any other purpose than to serve ball2. However...

                  为什么不在 PongSample 类中定义 serve_ball2 函数,并将 ball2 传递给它?

                  Why not define the serve_ball2 function in the PongSample class instead, and pass ball2 to it?

                  例子:

                  class PongSample(Widget):
                  
                      def serve_ball2(self, ball2, vel=(3,0)):
                          print 'Serve ball 2'
                          ball2.center = self.center
                          ball2.velocity = vel
                  

                  在 PongGame 类中:

                  And in the PongGame class:

                  class PongGame(Widget):
                      ball = ObjectProperty(None)
                      ball2 = ObjectProperty(None)
                      player1 = ObjectProperty(None)
                      player2 = ObjectProperty(None)
                      # add this
                      sample = ObjectProperty(None)
                  

                  然后在kv文件中:

                  # add at the top
                  
                  <PongSample>:
                      size: self.size
                      pos: self.pos
                  
                  # add the below in appropriate places within the PongGame definition
                  
                  PongGame:
                      sample: pong_sample
                  
                      PongSample:
                          id: pong_sample # now it's linked to 'sample' in PongGame
                  

                  所以现在在 PongGame 中,您可以从任何方法调用 self.sample.serve_ball2(ball2).

                  So now in PongGame you can call self.sample.serve_ball2(ball2) from any method.

                  这篇关于如何在kivy Pong球赛中从另一个类中调用一个类的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:Python/Kivy App 只运行一次 下一篇:如何在 Python Kivy 应用程序中打开 pdf?

                  相关文章

                  最新文章

                  <legend id='ENl61'><style id='ENl61'><dir id='ENl61'><q id='ENl61'></q></dir></style></legend>

                      • <bdo id='ENl61'></bdo><ul id='ENl61'></ul>

                      <small id='ENl61'></small><noframes id='ENl61'>

                    1. <i id='ENl61'><tr id='ENl61'><dt id='ENl61'><q id='ENl61'><span id='ENl61'><b id='ENl61'><form id='ENl61'><ins id='ENl61'></ins><ul id='ENl61'></ul><sub id='ENl61'></sub></form><legend id='ENl61'></legend><bdo id='ENl61'><pre id='ENl61'><center id='ENl61'></center></pre></bdo></b><th id='ENl61'></th></span></q></dt></tr></i><div id='ENl61'><tfoot id='ENl61'></tfoot><dl id='ENl61'><fieldset id='ENl61'></fieldset></dl></div>
                    2. <tfoot id='ENl61'></tfoot>