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

标题: 透明对话框 [打印本页]

作者: MASTERPOPY    时间: 2022-7-10 10:49
标题: 透明对话框
网上的透明对话框代码有一个缺陷,就是开启透明对话框后,yesno box也会变透明。而且源码参数含义不名。
我通过查阅gba硬件参数,重新做了一份透明对话框源码。

原理:gba窗口可以至多分为两个窗口win0和win1,可以通过io参数设定它俩的大小,是否开启混合模式,以及混合颜色的参数等。
win0的优先级高于win1。这里,我们将win1设置为屏幕的上半部分(y坐标0到112),win0设置为屏幕的下半部分(y坐标112-160),
同时开启win0的混合颜色模式。即可达到仅显示对话框部分透明,其余部分不透明的目的。
作者: MASTERPOPY    时间: 2022-7-10 10:49
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));//混合参数
作者: MASTERPOPY    时间: 2022-7-10 10:50
汇编版本源码:
        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
作者: MASTERPOPY    时间: 2022-7-10 11:16
参数参考网址:
https://www.cs.rit.edu/~tjh8300/CowBite/CowBiteSpec.htm#Windowing
作者: jiangzhengwenjz    时间: 2022-7-11 10:58
我觉得把YES/NO也完全透明化才对、而不是用window把alpha blending的范围隔离开。如果没记错,那段原始代码会导致YES/NO外面一圈边框显示不正确(没变黑),但是也不难解决




欢迎光临 Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论 (http://162.218.49.243/) Powered by Discuz! X3