如何在 Pygame 中制作边框

2024-04-29

我试图让游戏的某个区域周围有边框,并使用一种尺寸来不断更改我的代码,以便它适用于一种尺寸:

这是代码:

# screen, xpos, ypos, height, width, border width, color
def draw_borders(s, x, y, h, w, bw, c):
    draw(s, color, x, y, w, bw)
    draw(s, color, x, y, bw, h)
    draw(s, color, x, h+bw, w, bw)
    draw(s, color, w, y+bw, bw, h)
# draw is just a function that calls pygame.draw.rect with all the values given


def draw(s, color, x, y, w, h):
    pygame.draw.rect(s, color, (x,y,w,h))

其使用的数据是:

# sw = screen width
# I have my default sw at 500x500 but it works for any window size
draw_borders(10, 10, sw-20 sh-20)

问题是这些框没有对齐,因此当值有任何不同时,构成边框的 4 个框不匹配以构成实际边框,因此我无法获得未定义为窗口大小的框。

所以我想我的问题是:

1-有没有更简单的方法来制作边框?

2-如果不是,我该如何制作,以便无论传入的数据是什么,边框都对齐?


如果你想画边框,那么可以直接使用pygame.draw.rect() https://www.pygame.org/docs/ref/draw.html#pygame.draw.rect通过设置width争论。

def draw_borders(s, x, y, w, h, bw, c):
    pygame.draw.rect(s, c, (x, y, w, h), bw)

或者绘制一个封闭的多边形

def draw_borders(s, x, y, w, h, bw, c):
    pygame.draw.lines(s, c, True, [(x, y), (x+w, y), (x+w, y+h), (x, y+h)], bw)

如果你想消除角落的缺失,那么你必须将边框缝合4个矩形:

def draw_borders(s, x, y, w, h, bw, c):
    pygame.draw.rect(s, c, (x, y, w, bw))
    pygame.draw.rect(s, c, (x, y+h-bw, w, bw))
    pygame.draw.rect(s, c, (x, y, bw, h))
    pygame.draw.rect(s, c, (x+w-bw, y, bw, h))

或由 4 条单独的行组成:

def draw_borders(s, x, y, w, h, bw, c):
    pygame.draw.line(s, c, (x-bw//2+1, y), (x+w+bw//2, y), bw)
    pygame.draw.line(s, c, (x-bw//2+1, y+h), (x+w+bw//2, y+h), bw)
    pygame.draw.line(s, c, (x, y-bw//2+1), (x, y+h+bw//2), bw)
    pygame.draw.line(s, c, (x+w, y-bw//2+1), (x+w, y+h+bw//2), bw)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Pygame 中制作边框 的相关文章

  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 创建一个类似于 Tkinter 的表

    我希望创建类似于 Tkinter 中的表格的东西 但它不一定是这样的 例如 我想创建标题 Name1 Name2 Value 并在每个标题下面有几个空白行 然后 我希望稍后用我计算的值或名称的字符串值填充这些行 因此是标签 对于 Name2
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • 如何有效地从 loadmat 函数生成的嵌套 numpy 数组中提取值?

    python中是否有更有效的方法从嵌套的python列表中提取数据 例如A array array 12000000 dtype object 我一直在使用A 0 0 0 0 当你有很多像 A 这样的数据时 这似乎不是一个有效的方法 我也用
  • Python - 如何查询定义方法的类?

    我的问题有点类似于this one https stackoverflow com questions 5520580 how do you get all classes defined in a module but not impor
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • 检查字符串是否只有字母和空格 - Python

    试图让 python 返回一个字符串仅包含字母和空格 string input Enter a string if all x isalpha and x isspace for x in string print Only alphabe
  • 来自 django 教程 was_published_recently.admin_order_field = 'pub_date'

    From Django 教程 https www jetbrains com help pycharm 2017 1 creating and running your first django project html d28041e21
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t
  • Pygame 中的倒计时器

    我开始使用 pygame 我想做简单的游戏 我需要的元素之一是倒计时器 如何在 PyGame 中实现倒计时 例如 10 秒 另一种简单的方法是简单地使用 pygame 的事件系统 这是一个简单的例子 import pygame pygame
  • Python Folium 图标列表

    是否有可用的图标列表 我可以在像我使用的表达式中使用它们home在这个 folium Marker location 0 20 icon folium Icon color lightgray icon home prefix fa add
  • 内存转储格式类似于 gdb 中的 xxd

    我正在尝试检查一个缓冲区 其中包含二进制格式的消息 但也包含字符串数据 作为示例 我正在使用以下 C 代码 int main void char buf 100 x01 x02 x03 x04String Data xAA xBB xCC

随机推荐