世嘉MD游戏开发【八】:淡入和淡出

淡入淡出,很好理解,淡入就是画面由黑过渡到彩色,淡出就是画面由彩色过渡到黑色,其实也不一定必须是黑色,看你自己需求了。

注:淡入淡出的功能可以完成非常多的游戏玩法设计哦~打开脑洞就有惊喜~

效果图如下:

刚好SGDK内置了淡入淡出函数,几句代码就可以搞定这个特效。

这一期需要解释的东西不多,直接上代码吧,就不凑字了,图片准备什么的不再赘述,前面都讲的很详细。

#include <genesis.h>
#include <vdp.h>
#include "picture.h"

int main()
{
    //用来存放图片的色表,这个案例我们只用到了16个颜色,所以16就够了,
    //要是颜色表有64种颜色那就是pal[64]
    u16 pal[16];

    //VRAM中的tile位置,前面有讲过
    u16 index = TILE_USERINDEX;

    //把前16个色表弄成黑色的,这样游戏运行的时候屏幕就是黑色的
    //palette_black是系统内置变量,是个const u16*类型
    VDP_setPaletteColors(0, palette_black, 16);

    //绘制图片函数,前面已经讲过就不再赘述了
    VDP_drawImageEx(PLAN_A, &pic, TILE_ATTR_FULL(PAL0, 0, 0, 0, index), 0, 0, FALSE, CPU);

    //前面也讲过了
    index += pic.tileset->numTile;

    //拷贝内存数据,函数原型是:void memcpy(void *to, const void *from, u16 len);
    //就是从一个数组向另一个数组的某个位置拷贝数据,长度单位是字节(byte)
    //这里的意思是把pic这个图片的颜色表数据拷贝到pal数组,从第0个索引开始拷贝,要拷贝16个颜色过去,因为一个图片最多就是16色,多了也都是垃圾值,
    //为何要x2呢,因为data是个u16类型的数组,一个u16(unsigned short)是2bytes,我们有16个u16,长度单位是bytes,所以16要x2
    memcpy(&pal[0], pic.palette->data, 16 * 2);

    //淡入函数,void PAL_fadeIn(u16 fromCol, u16 toCol, const u16* pal, u16 numFrame, bool async);
    //fromCol到tocol表示的是一个颜色范围,最小0,最大63,这个范围内的颜色都会做淡入效果,
    //pal是一个颜色表,这里其实可以直接写pic.palette->data,因为这个案例只有一张图,这样写就够了,但是图片多颜色表不止一个的话就不行了,就要另外声明一个颜色表数组pal了
    //numFframe很好理解了,就是淡入多少帧,这里写的淡入60帧
    //async意思是异步,如果写FALSE,那么淡入过程不会被打断,要是TRUE,淡入过程就可以随时被打断
    //也可以用VDP_fadeIn这个函数,都能达到淡入的效果
    PAL_fadeIn(0, 15, pal, 60, FALSE);

    //绘制文字,这行代码不能写在绘制图片前面,代码的执行顺序也是图形的绘制顺序,后绘制的会覆盖前面绘制的
    VDP_drawText("Fade In & Fade Out", 1, 0);

    while (1)
    {
        //获取键值,前面有讲过
        u16 input = JOY_readJoypad(JOY_1);

        //按下A键
        if (input & BUTTON_A)
        {
            //异步淡入,这里是TRUE,运行游戏的时候狂按A键就会不停的淡入
            //自己亲自试一下就知道异步淡入是什么效果了
            PAL_fadeIn(0, 15, pal, 60, TRUE);
        }

        //按下B键
        if (input & BUTTON_B)
        {
            //异步淡出
            PAL_fadeOut(0, 15, 60, TRUE);
        }

        VDP_waitVSync();
    }
    return 0;
}

未完待续。。。

复古游戏开发群:879063892

发布了17 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq272508839/article/details/103335270