【问题标题】:where to place code for kivy button in a game在游戏中放置 kivy 按钮的代码的位置
【发布时间】:2018-09-28 10:08:27
【问题描述】:

你好我的问题是我不知道如何在我的游戏中放置一个按钮而不使游戏画面消失。 每当我尝试在代码中添加 return btn1 时,它只会显示按钮。但不是游戏。我确信这是一个初学者问题,但查找它对我不起作用。

顺便说一句,这是我私下使用的教程中的代码

我的代码是:

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
import kivy.uix.button
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.button import Button

def callback(instance):
 print('The button <%s> is being pressed' % instance.text)

btn1 = Button(text='Hello world 1')
btn1.bind(on_press=callback)
btn2 = Button(text='Hello world 2')
btn2.bind(on_press=callback)




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


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 PongGame(Widget):

 ball = 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 update(self, dt):
    self.ball.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

    # 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))

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)





if __name__ == '__main__':
 PongApp().run() 

【问题讨论】:

    标签: python button kivy


    【解决方案1】:

    如果您希望一个小部件成为另一个小部件的一部分,则该小部件必须是另一个小部件的儿子,或者它的祖先是该小部件的儿子,并且当您在 build() 中返回 btn1 时,您表示它是根,即窗口,它不显示游戏,使小部件的儿子成为一个选项是使用add_widget()

    class PongApp(App):
        def build(self):
            game = PongGame()
            game.add_widget(btn1) # <--
            btn2.pos = 100, 100
            game.add_widget(btn2) # <--
            game.serve_ball()
            Clock.schedule_interval(game.update, 1.0 / 60.0)
            return game
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多