如何在kivy Pong球游戏中从另一个类调用一个类的函数

2023-12-06

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

更新:我可以从 PongSample 调用serve_ball2(),但serve_ball2() 无法按预期运行,即它不发球。

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

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

要使用您的课程,请添加game.serve_ball2() to PongApp

class PongApp(App):
    def build(self):
        game = PongGame()
        game.serve_ball()
        game.serve_ball2()
        Clock.schedule_interval(game.update, 1.0 / 60.0)
        return game

And add self.ball2从桨上弹起:

#bounce of paddles
self.player1.bounce_ball(self.ball)
self.player2.bounce_ball(self.ball)
self.player1.bounce_ball(self.ball2)
self.player2.bounce_ball(self.ball2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在kivy Pong球游戏中从另一个类调用一个类的函数 的相关文章

随机推荐

  • 如何在 C# Asp.net 中取消注册 Page.ClientScript

    我正在将 java 脚本注册到我的 Asp net 代码隐藏文件中 该文件工作正常 现在 我在同一页面上有一些更新面板 问题是每当任何更新面板中有任何更改时 都会自动调用此脚本 有什么办法可以阻止这种情况发生吗 我无法从我的页面中删除更新面
  • 如何在PHP中显示或预览上传的图像,而不保存到数据库?

    我的项目实际上涉及2个页面 第1页是一个表单 用于将上传的图像提交到第2页action 2page php 并将显示和预览图像 它应该在客户端服务器上运行 这意味着不涉及将图像文件保存到其中并将特定图像检索回我想要执行的页面的数据库 实际上
  • WELD-001409 不明确的依赖关系

    我想将我的 ejb ProfileEJB 注入到我的 jsf 托管 bean SampleController 中 如下所示 Stateless LocalBean public class ProfileEJB PersistenceCo
  • 我想创建一个 DeskBand。我必须使用 C++ 吗?

    我想创建一个 DeskBand 来在 Windows 任务栏上显示一些信息 但我正在努力在 C 中实现我需要的功能 我接触C 已经有10 15年了 过去 7 年我一直在 NET 中工作 在你说之前 我知道 DeskBands 已被弃用 但建
  • 在 pandas 中保存跳过行并读取 csv

    我有一个清单跳过行 说 1 5 10 gt 行号 当我将其传递给熊猫read csv 它会忽略这些行 但是 我需要将这些跳过的行保存在不同的文本文件中 我浏览了 pandas read csv 文档和其他几篇文章 但不知道如何将其保存到文本
  • 使用 Java URLConnection 进行 Cookie 管理

    我对 android 编程相当陌生 最近成功实现了 HTTP Post 请求 却发现我的 cookie 没有存储在后续的 Post Get 请求之间 我浏览了互联网 找到了一些 Android 的 Apache 客户端和 Java 的 Ht
  • Facebook Like 按钮,用于来自其自己的 ios 应用程序的应用程序的一个 Facebook 页面

    我正在寻找在我的 ios 本机应用程序中显示 Like 按钮 该应用程序的用户已经通过 Facebook 帐户连接到应用程序 stackoverflow 上有几个与 Facebook Like Button 相关的问题 但这些问题并不特定于
  • 可以在一页上使用相同的 schema.org 标记两次吗?

    在产品页面上 我在不同位置对一种产品有两个聚合评级 这意味着它们包含相同的信息 由于用户体验原因 我希望在该页面上出现两次 但我不确定是否可以每次都使用 schema org 标记它们 或者这是否是无用的重复 想知道是否有解决方案itemr
  • 如何在 Clojure 中获取参数名称?

    我想从函数内部获取函数外部定义的 var 的名称 该名称应该是我在原始定义范围内使用的名称 而不是我实际尝试使用该名称的任何嵌套绑定 所以我想做一些类似的事情 学术示例 defn f1 x1 println hello you passed
  • Tkinter按钮命令返回值?

    我在从 tkinter 返回变量时遇到问题Button命令 这是我的代码 class trip calculator def init self file self gui def gui self returned values def
  • Spring Boot Cloud Foundry 错误中没有独特的服务映射接口错误

    我正在尝试遵循本教程https github com cf platform eng spring boot cities tree master cities service在 Cloud Foundry 中运行我的 Spring Boo
  • 特征列预训练嵌入

    如何使用预训练嵌入tf feature column embedding column I used pre trained嵌入tf feature column embedding column 但这不起作用 错误是 错误是 ValueE
  • PIP如何确定多个依赖的依赖的版本

    假设我们在 Python 中有以下依赖树 PIP作为包安装程序 A 1 2 1 B 1 5 4 C D 1 3 0 C 我们还假设包的现有版本C分别是 0 0 8 1 0 2 据我们所知 PIP不会将同一包的不同版本安装到环境中 这意味着它
  • 无法使用 GraalVM 生成本机映像

    我试图使用 quarkus 和 GraalVM 创建一个自定义运行时 Lambda 并在此过程中 https quarkus io guides amazon lambda 我试图为 Gradle 应用程序构建一个本机映像 我在 Windo
  • 选择随机行,但一列中没有重复的值

    这是从单个表中进行的简单选择 目的是随机选择四种产品 从 x 个类别中的每个类别中选择一种 并有一些 位置 限制 我试过这个 SELECT pName pID from products WHERE pDisplay 1 AND pFeat
  • 使用 PHPExcel 在 1 个单元格内设置不同的字体颜色

    我想使用 PHPExcel 让文本在 1 个单元格内具有不同的颜色 但我找不到有关它的信息 是否可以 我相信它可以从 xls 中完成 但是可以在 PHPExcel 中使用编程来完成吗 是的 可以使用 Rich Text 对象在 PHPExc
  • 比较集合的函数;帮助提高效率

    我正在尝试编写一个函数来比较两个列表以查看它们是否代表同一组 那是 a b c d d and d c b a d 代表同一个集合 元素可以按任意顺序排列 这就是我所拥有的 有效的 defun samesetp list1 list2 co
  • 我无法获取 HTML 页面的完整源代码

    使用Python 我想抓取一个网页上的数据 该网页的来源非常大 它是某个用户的Facebook页面 假设该 URL 是我要抓取的 URL 我运行以下代码 import urllib2 usock urllib2 urlopen url da
  • UITableViewCell 自定义类 - 子视图高度约束更改后重新加载单元格高度

    我有一个自定义按钮UITableViewCell班级 它显示 隐藏视图 同一单元格的一部分 这样做时单元格的高度应该改变 这是按钮操作 在UITableViewCell自定义类 IBAction func showHideCartView
  • 如何在kivy Pong球游戏中从另一个类调用一个类的函数

    我正在使用教程中给出的 PongGame 代码练习 Kivy 我想知道如何从新创建的类 PongSample 中调用 PongGame 类中的函数 serve ball2 在下面的代码中 我创建了一个 PongSample 类 以便在第一个