PokemonRedExperiments精灵图透明处理:transparent_arrow.png制作技巧

PokemonRedExperiments精灵图透明处理:transparent_arrow.png制作技巧

【免费下载链接】PokemonRedExperiments Playing Pokemon Red with Reinforcement Learning 【免费下载链接】PokemonRedExperiments 项目地址: https://gitcode.com/gh_mirrors/po/PokemonRedExperiments

在开源项目PokemonRedExperiments中,精灵图透明处理是实现地图可视化的关键技术之一。本文将详细介绍项目中transparent_arrow.png的制作技巧,帮助开发者掌握精灵图透明化的核心方法。

透明图在项目中的应用场景

透明箭头图片主要用于强化学习(Reinforcement Learning)过程中的路径可视化。在BetterMapVis_script_version.py中,透明箭头被用于标记精灵在地图上的移动轨迹。通过透明处理,可以确保箭头与地图背景自然融合,不遮挡关键游戏场景元素。

项目地图

透明图制作核心技术点

1. 透明通道设置

PNG格式图片通过Alpha通道实现透明效果。在项目中,characters.png采用了类似的透明处理技术。以下是实现透明通道的关键代码:

alpha_v = np.array([255, 127,  39, 255], dtype=np.uint8)
sprite = img[sy:sy+16, sx:sx+16]
return np.where((sprite == alpha_v).all(axis=2).reshape(16,16,1), 
                np.array([[[0,0,0,0]]]), sprite).astype(np.uint8)

2. 精灵图提取与透明化

项目中通过get_sprite_by_coords函数实现精灵图的提取和透明化处理。该函数通过比较像素值与预设的透明色值(alpha_v),将指定颜色区域设置为完全透明:

def get_sprite_by_coords(img, x, y):
    sy = 34+17*y
    sx = 9 +17*x
    alpha_v = np.array([255, 127,  39, 255], dtype=np.uint8)
    sprite = img[sy:sy+16, sx:sx+16]
    return np.where((sprite == alpha_v).all(axis=2).reshape(16,16,1), 
                    np.array([[[0,0,0,0]]]), sprite).astype(np.uint8)

透明箭头制作步骤

1. 图像准备

  1. 创建24x24像素的PNG图像
  2. 使用红色(#FF0000)绘制箭头形状
  3. 将背景设置为特定透明色(项目中使用RGB(255,127,39))

2. 透明化处理

使用项目中的透明化算法,将预设的透明色转换为透明通道:

# 伪代码示例
arrow_img = Image.open("arrow_with_background.png")
alpha_v = np.array([255, 127,  39, 255], dtype=np.uint8)
transparent_arrow = np.where((arrow_img == alpha_v).all(axis=2), 
                             np.array([0,0,0,0]), arrow_img)
Image.fromarray(transparent_arrow).save("transparent_arrow.png")

3. 效果验证

将制作好的透明箭头整合到地图可视化系统中,通过render_video函数验证效果:

def render_video(fname, all_coords, walks, bg, inter_steps=4, add_start=True):
    # ... 代码省略 ...
    over = np.zeros_like(bg, dtype=np.uint8)
    # 添加透明箭头到地图
    add_sprite(over, arrow_sprite, interp_coord)
    # ... 代码省略 ...

常见问题解决方案

边缘锯齿问题

透明箭头边缘出现锯齿时,可通过设置半透明过渡像素解决。项目中blend_overlay函数提供了图像混合功能:

def blend_overlay(background, over):
    al = over[...,3].reshape(over.shape[0], over.shape[1], 1)
    ba = (255-al)/255
    oa = al/255
    return (background[..., :3]*ba + over[..., :3]*oa).astype(np.uint8)

透明度过渡不自然

调整箭头边缘像素的Alpha值,实现从完全不透明到完全透明的平滑过渡。可参考get_sprite_by_coords函数中的像素处理逻辑。

项目中其他透明图资源

除了透明箭头外,项目中还有多个透明精灵图资源:

通过掌握这些透明图制作技巧,开发者可以为项目创建更多自定义精灵资源,提升强化学习可视化效果。建议参考项目README.mdVisualizeProgress.ipynb了解更多可视化实现细节。

点赞收藏本文,关注项目最新进展,下期将带来"精灵图动画制作全攻略"。

【免费下载链接】PokemonRedExperiments Playing Pokemon Red with Reinforcement Learning 【免费下载链接】PokemonRedExperiments 项目地址: https://gitcode.com/gh_mirrors/po/PokemonRedExperiments

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值