Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论

 找回密码
 加入口袋中心
搜索
查看: 146|回复: 4
打印 上一主题 下一主题

透明对话框

[复制链接]

23

帖子

121

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
65
跳转到指定楼层
1#
发表于 2022-7-10 10:49:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上的透明对话框代码有一个缺陷,就是开启透明对话框后,yesno box也会变透明。而且源码参数含义不名。
我通过查阅gba硬件参数,重新做了一份透明对话框源码。

原理:gba窗口可以至多分为两个窗口win0和win1,可以通过io参数设定它俩的大小,是否开启混合模式,以及混合颜色的参数等。
win0的优先级高于win1。这里,我们将win1设置为屏幕的上半部分(y坐标0到112),win0设置为屏幕的下半部分(y坐标112-160),
同时开启win0的混合颜色模式。即可达到仅显示对话框部分透明,其余部分不透明的目的。

评分

参与人数 1积分 +10 现金 +20 收起 理由
jiangzhengwenjz + 10 + 20

查看全部评分

回复

使用道具 举报

23

帖子

121

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
65
2#
 楼主| 发表于 2022-7-10 10:49:51 | 只看该作者
C语言源代码:
    SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240));//left, right
    SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(112, 160));//top bottom
    SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0, 240));//left, right
    SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0, 112));//top bottom
    SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_CLR);//开启win0混合模式
    SetGpuRegBits(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0);//混合bg0
    SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x5));//混合参数
回复 支持 反对

使用道具 举报

23

帖子

121

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
65
3#
 楼主| 发表于 2022-7-10 10:50:57 | 只看该作者
汇编版本源码:
        movs        r1, #240
        movs        r0, #64
        bl        SetGpuReg
        ldr        r1, =28832
        movs        r0, #68
        bl        SetGpuReg
        movs        r1, #240
        movs        r0, #66
        bl        SetGpuReg
        movs        r1, #112
        movs        r0, #70
        bl        SetGpuReg
        movs        r1, #32
        movs        r0, #72
        bl        SetGpuRegBits
        movs        r1, #1
        movs        r0, #80
        bl        SetGpuRegBits
        movs        r1, #162
        movs        r0, #82
        lsls        r1, r1, #3
        bl        SetGpuReg
回复 支持 反对

使用道具 举报

23

帖子

121

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
65
4#
 楼主| 发表于 2022-7-10 11:16:53 | 只看该作者
回复 支持 反对

使用道具 举报

3928

帖子

246

现金

390

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
19972
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

5#
发表于 2022-7-11 10:58:14 | 只看该作者
我觉得把YES/NO也完全透明化才对、而不是用window把alpha blending的范围隔离开。如果没记错,那段原始代码会导致YES/NO外面一圈边框显示不正确(没变黑),但是也不难解决
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入口袋中心

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-4-28 19:12 , Processed in 0.074531 second(s), 36 queries , Eaccelerator On.

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表