使用 Python kivy 创建游戏开始菜单

Posted

技术标签:

【中文标题】使用 Python kivy 创建游戏开始菜单【英文标题】:Create a Game start menu using Python kivy 【发布时间】:2020-02-24 23:24:08 【问题描述】:

我想创建一个可调整大小并且可以与 python 和 kivy 兼容的游戏菜单。我在屏幕上创建了一个按钮,当我调整它的大小时,按钮不会调整大小,只有屏幕会调整大小。

按钮未显示。我想创建一个 GUI,其中有一个背景图像,并在图像上创建一个按钮,并且屏幕应该可以调整大小。

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.graphics import BorderImage
from kivy.metrics import dp
from kivy.lang import Builder

Builder.load_string('''
<style>:
    canvas.before:
    BorderImage:
        pos: self.pos
        size: self.size
        source: "round.png"
        BoxLayout:
            orientation: "vertical"
            size: self.size
            Button:
                text:"Start Game"
                font_size: 100
                size: 100,50
                pos: 360,1024 
            Button:
                text:"Exit"
                font_size:100
                size: 100,50
                pos: 360,768
            Button:
                text:"About"
                font_size:100
                size:100,500
                pos: 360,512               


 ''')






class style(FloatLayout):
    pass

class MyApp(App):
    def build(self):
        return style()

if __name__=="__main__" :
    MyApp().run()

【问题讨论】:

向我们展示您的尝试。 @JohnAnderson 我已经编辑了帖子并添加了我的一段代码。我请求您检查我的代码,并就应该做什么给我一个解释和适当的建议。 【参考方案1】:

要获得可调整大小的Widgets,最简单的方法是使用size_hint 而不是size。然后Kivy 会为你调整大小。此外,为了获取背景图像,您可以使用Rectangle 并提供图像作为source。这是使用我提到的想法对您的代码进行的修改:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

Builder.load_string('''
<style>:
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: "round.png"
    BoxLayout:
        orientation: "vertical"
        pos_hint: 'center_x': 0.5, 'top':1.0
        size_hint: 0.25, 0.25
        Button:
            text:"Start Game"
        Button:
            text:"Exit"
        Button:
            text:"About"      
 ''')


class style(FloatLayout):
    pass


class MyApp(App):
    def build(self):
        return style()


if __name__=="__main__" :
    MyApp().run()

使用BoxLayout 可以为您完成很多工作。它将您的Buttons 排列在垂直堆栈中(在您的情况下),并为它们分配大小以填充BoxLayout。所以,基本上,你只需要担心BoxLayout 的大小,让它处理它的孩子。在上面的代码中,我将size_hint 设置为0.25, 0.25,但您可以将其设置为任何看起来不错的值。然后将BoxLayout 定位为将pos_hint 设置为'center_x': 0.5, 'top':1.0。这会将其水平放置在显示屏的中心,并位于显示屏的顶部。同样,您可以将其设置为任何您想要的。

请注意,Buttons 上没有 size_hintssizes。那是因为BoxLayout 会处理这些。

您将Buttonsfont_size 设置为100,这对我来说似乎很大,所以我只使用默认的font_size,即15spsp 表示大小为正在使用的设备缩放)。不幸的是,font_size 没有 size_hint,因此随着 Buttons 的缩放,文本将保持不变的大小。

主要思想是尽可能使用提示(而不是设置实际大小和位置),以便Kivy 可以为您完成工作。

【讨论】:

嗯首先我要感谢你的努力。我提出了一些疑问:矩形的大小是屏幕的大小?。 2. size_hint 和 pos_hint 是如何工作的?(我对 kivy 中的提示很困惑) 我的意思是这些坐标是如何工作的......就像 0.5,1.0 as pos_hint 查看pos_hint和size_hint的文档

以上是关于使用 Python kivy 创建游戏开始菜单的主要内容,如果未能解决你的问题,请参考以下文章

实战用Python+Pygame+Kivy(Buildozer)+Ubuntu开发安卓android手机端apk游戏及踩坑分享

Python、Kivy 和 Android 游戏 [关闭]

Python、Kivy、Buildozer:使用 python-firebase/requests 时出错

Kivy - 添加和删除标签

Kivy 使用 Canvas:越界开始时出现关键线错误

使用 Python 和 Kivy 的小型纸牌游戏