如何在pygame中从一种颜色淡入另一种颜色?

2024-02-08

我如何在 pygame 中从一种颜色淡入另一种颜色?我想慢慢地改变一个圆圈的颜色,从绿色到蓝色到紫色到粉色到红色到橙色到黄色到绿色。我该怎么做呢?目前,我正在使用

def colour():
    switcher = {
        0: 0x2FD596,
        1: 0x2FC3D5,
        2: 0x2F6BD5,
        3: 0x432FD5,
        4: 0x702FD5,
        5: 0xBC2FD5,
        6: 0xD52F91,
        7: 0xD52F43,
        8: 0xD57F2F,
        9: 0xD5D52F,
        10: 0x64D52F,
        11: 0x2FD557,
    }
    return switcher.get(round((datetime.datetime.now() - starting_time).total_seconds()%11))

但颜色之间的差距确实很大,而且看起来很笨重。


关键是简单地计算每一步需要改变每个通道(a、r、g 和 b)的量。 Pygame 的Color类非常方便,因为它允许在每个通道上进行迭代,并且它的输入很灵活,因此您可以更改例如'blue' to 0x2FD596在下面的示例中,它仍然会运行。

这是一个简单的运行示例:

import pygame
import itertools

pygame.init()

screen = pygame.display.set_mode((800, 600))

colors = itertools.cycle(['green', 'blue', 'purple', 'pink', 'red', 'orange'])

clock = pygame.time.Clock()

base_color = next(colors)
next_color = next(colors)
current_color = base_color

FPS = 60
change_every_x_seconds = 3.
number_of_steps = change_every_x_seconds * FPS
step = 1

font = pygame.font.SysFont('Arial', 50)

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    text = font.render('fading {a} to {b}'.format(a=base_color, b=next_color), True, pygame.color.Color('black'))

    step += 1
    if step < number_of_steps:
        # (y-x)/number_of_steps calculates the amount of change per step required to 
        # fade one channel of the old color to the new color
        # We multiply it with the current step counter
        current_color = [x + (((y-x)/number_of_steps)*step) for x, y in zip(pygame.color.Color(base_color), pygame.color.Color(next_color))]
    else:
        step = 1
        base_color = next_color
        next_color = next(colors)

    screen.fill(pygame.color.Color('white'))
    pygame.draw.circle(screen, current_color, screen.get_rect().center, 100)
    screen.blit(text, (230, 100))
    pygame.display.update()
    clock.tick(FPS)

如果您不想依赖帧速率而是使用基于时间的方法,您可以将代码更改为:

...
change_every_x_milliseconds = 3000.
step = 0

running = True
while running:

    ...

    if step < change_every_x_milliseconds:
        current_color = [x + (((y-x)/change_every_x_milliseconds)*step) for x, y in zip(pygame.color.Color(base_color), pygame.color.Color(next_color))]
    else:
        ...
    ...

    pygame.display.update()
    step += clock.tick(60)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在pygame中从一种颜色淡入另一种颜色? 的相关文章

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐

  • Android Room Dao:按案例排序不起作用

    我有一个 Room 数据库 使用 Dao 来处理查询等 我使用静态 非实时数据 函数通过查询检索结果 当我手动硬编码 Order By 值和列时 一切正常 如下所示 但是在传递参数时到 Dao 进行排序时 Order By 恢复为默认值 按
  • Android,如果内容已经下载到ListView中,如何停止再次读取getView()函数

    我是一个 Android 新手 我有一个 ListView 在 ListView 的每个元素上显示图像 它工作正常 但是当我开始滚动时 我意识到如果我的图像显示在我的手机设备的屏幕上 我会再次下载它 我怎样才能停止重新加载 ListView
  • 如何查看HashMap中键的分布?

    使用哈希映射时 将键均匀分布在存储桶上非常重要 如果所有键最终都在同一个存储桶中 那么您最终会得到一个列表 有没有一种方法可以 审核 Java 中的 HashMap 以查看键的分布情况 我尝试对其进行子类型化并迭代Entry
  • 如何编译Boost.Process库?

    所以有Boost Process 2006 http www netbsd org jmmv process 和最近的通过查看来源 Boost Process 看起来像是 2009 年 http www highscore de boost
  • WPF 几何(路径)部分填充的形状

    这个想法是获得评级控制 其值可以是 0 3 并将其绘制为部分填充的形状 CodeProject 文章中描述了我使用的方法 有Path 添加蒙版 矩形 添加轮廓 使用的原始代码Margin对于掩码和固定宽度路径 问题是使用矩形作为蒙版会重新绘
  • WPF ListBox 将 ItemsSource 与 MVVM-light 绑定

    XAML
  • 我的应用程序可以收到有关 Google 云端硬盘文件夹中的文件更新的通知吗?

    我希望每当在我的 Google Drive 目录 或子目录 上添加 删除或修改文件时 我的应用程序都会收到通知 Google Drive 是否支持网络钩子或类似的第三方集成机制 我在 API 文档中找不到类似的内容 提前致谢 我们现在支持针
  • 使用实体框架,代码优先,无自动增量

    public class Movie public int Id get set Required StringLength 255 public string Name get set public virtual IList
  • 将 Neo4j 子图加载到 Networkx 中

    我一直通过 python 的 Bulbflow 处理 Neo4j 现在需要一种保存 导出子图的方法 我见过 Java 甚至 Ruby 方法来做到这一点 但是简单的 Python 方法似乎对我隐藏着 到目前为止 我已经找到了两条可能的路径 访
  • 简单 Karma + Typescript 配置 - 参考错误:x 未定义

    我想使用 Karma 设置一个基本的测试运行程序来测试 Typescript 类 当我运行测试时karma start 我收到错误ReferenceError Calculator is not defined 据推测 karma 运行程序
  • 禁用检查复选框 (Jquery)

    目的是 如果复选框被禁用 则不执行任何操作 如果启用并选中复选框 请设置按钮的样式 这是我到目前为止所得到的 document ready function e checkbox live click function if this ha
  • 在 GitHub 上查看文件的 GitHub 字符限制或行长度是多少?

    我只是想知道在任何 GitHub 源代码视图页面上可以查看多少个字符而不会溢出 水平滚动 On OS X v10 9 http en wikipedia org wiki OS X Mavericks 小牛队 谷歌浏览器 125 火狐 12
  • 如果我从 .NET 4.0 升级到 4.5 会遇到任何问题吗?

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Spring REST 文档记录分层 JSON 负载

    我开始使用Spring REST 文档 http projects spring io spring restdocs 记录一个简单的 REST API 我有一个具有某种层次结构的有效负载 例如这样 有员工的公司 companyName F
  • ruby 中字符串占位符的换行符

    我怎样才能让占位符换行 解决方案只是添加空格 以便下一行换行 placeholder Comment on your track or share your favorite lyrics gt 相当丑陋但最不复杂 换行符 n应该包含在双精
  • FLP:设置应用程序启动的自定义初始焦点失败

    我试图将初始焦点设置到应用程序每个页面中的第一个输入字段 我已经在下面的帖子中实现了代码 并且效果很好 如何在视图中设置初始焦点 https stackoverflow com questions 36376599 how to set i
  • Mercurial 提交图表/图表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Virtualbox限制网络带宽[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用的是虚拟机VirtualBox 现在 我需要限制带宽 我有 2 个虚拟机正在运行 一种只是为了好玩 一是用于重要的数据库访问 如果
  • 测试它是 JSONObject 还是 JSONArray

    我有一个 json 流 可以是这样的 intervention id 3 subject dddd details dddd beginDate 2012 03 08T00 00 00 01 00 endDate 2012 03 18T00
  • 如何在pygame中从一种颜色淡入另一种颜色?

    我如何在 pygame 中从一种颜色淡入另一种颜色 我想慢慢地改变一个圆圈的颜色 从绿色到蓝色到紫色到粉色到红色到橙色到黄色到绿色 我该怎么做呢 目前 我正在使用 def colour switcher 0 0x2FD596 1 0x2FC