You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame实现DVD弹跳Logo时修改图片颜色失效如何解决?

问题原因

  • 操作对象不匹配:你在对图片做缩放处理之前,就为加载得到的原始图片创建了PixelArray对象var。pygame.transform.scale会生成全新的Surface对象赋值给dvdLogo变量,你后续修改var实际改动的是已经不再使用的原始图片,真正用来渲染的缩放后图片没有受到任何影响,颜色修改自然不会生效。
  • Surface被锁定:PixelArray对象会锁定关联的Surface,修改完成后需要手动删除PixelArray对象解除锁定,否则后续无法对Surface执行渲染、变换等操作。
  • 无效代码:dvdlogoRect = dvdLogoRect.move_ip(200,6)属于错误写法,move_ip是原地修改Rect的方法,返回值为None,同时你写错了变量名大小写,这行代码没有实际作用。

修正后的参考代码

import pygame
import time
import random

pygame.init()
width, height = 400, 400
dvdLogoSpeed = [2, 1]
backgroundColor = (255, 0, 0)
screen = pygame.display.set_mode((width, height))

# 先加载、缩放图片,得到实际渲染用的Surface
dvdLogo = pygame.image.load("dvdimage.png").convert_alpha()
dvdLogo = pygame.transform.scale(dvdLogo, (50, 50))
dvdLogoRect = dvdLogo.get_rect()
dvdLogoRect.move_ip(200, 6)

# 准备换色用的颜色列表
color_list = [(0,0,255), (0,255,0), (255,255,0), (255,0,255), (0,255,255)]
current_color_idx = 0
old_color = (0,0,0) # 你要替换的原始Logo底色

while True:
    # 处理退出事件,避免程序卡死无法关闭
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    
    screen.fill(backgroundColor)
    screen.blit(dvdLogo, dvdLogoRect)
    dvdLogoRect = dvdLogoRect.move(dvdLogoSpeed)

    touch_boundary = False
    if dvdLogoRect.left < 0 or dvdLogoRect.right > width:
        dvdLogoSpeed[0] = -dvdLogoSpeed[0]
        print("left or right")
        touch_boundary = True

    if dvdLogoRect.top < 0 or dvdLogoRect.bottom > height:
        dvdLogoSpeed[1] = -dvdLogoSpeed[1]
        print("top or bottom")
        touch_boundary = True
    
    # 碰到边界时更换Logo颜色
    if touch_boundary:
        # 为当前正在使用的dvdLogo创建PixelArray
        var = pygame.PixelArray(dvdLogo)
        new_color = color_list[current_color_idx % len(color_list)]
        var.replace(old_color, new_color)
        # 删除PixelArray解除Surface锁定
        del var
        old_color = new_color
        current_color_idx += 1

    pygame.display.flip()
    time.sleep(10 / 1000)

内容的提问来源于stack exchange,提问作者ImBadAtMath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:06:03