• HGE游戏引擎之实战篇,渐变的游戏开场


    #include <hge.h>
    #include "menuitem.h"
    //#include <hgefont.h>
    #include <hgegui.h>
    
    #include <math.h>
    
    //定义全局变量
    long int zhen = 0;
    //定义当前关卡
    int SCENCE = 0;
    //HGE句柄
    HGE * hge = NULL;
    //背景音乐,图片
    HEFFECT BG_Music;
    HTEXTURE BG_Texture;
    hgeSprite *BG_pic;
    hgeQuad        Background;
    //游戏时间
    float time;
    //hgeBackground test;
    
    hgeGUI                *gui;
    hgeFont                *fnt;
    hgeSprite            *spr;
    
    
    //逻辑框架循环
    bool FrameFunc()
    {    
        time = hge->Timer_GetTime();
        if (((int)(time*1000)) % 10 == 0 && Background.v[0].col != 0xFFFFFFFF)
        {
            for(int i=0;i<4;i++)
            {
                Background.v[i].col +=ARGB(1,1,1,1);
            }
        }
        return false;
    }
    
    //图元渲染循环
    bool RenderFunc()
    {
        hge->Gfx_BeginScene();
        hge->Gfx_Clear(0);
        hge->Gfx_RenderQuad(&Background);
        hge->Gfx_EndScene();
        return false;
    }
    
    //主程序入口
    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
        hge = hgeCreate(HGE_VERSION);
    
        //初始化设置
        hge->System_SetState(HGE_SHOWSPLASH,true);
        hge->System_SetState(HGE_LOGFILE, "TEST.log");
        hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
        hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
        hge->System_SetState(HGE_TITLE, "<life designer>");
        hge->System_SetState(HGE_WINDOWED, true);
        hge->System_SetState(HGE_SCREENWIDTH, 800);
        hge->System_SetState(HGE_SCREENHEIGHT, 600);
        hge->System_SetState(HGE_SCREENBPP, 32);
    
        //载入程序资源
        if(hge->System_Initiate())
        {
            BG_Music = hge->Effect_Load("BG_Music.mp3");
            if (!BG_Music)
            {
                MessageBox(NULL,"有资源未载入","警告",MB_OK);
                hge->System_Shutdown();
                hge->Release();
                return 0;
            }
            hge->Effect_PlayEx(BG_Music,100,0,1.0f,true);
            //Background的载入与初始化
            Background.tex = hge->Texture_Load("BG_pic.png");
            if (!Background.tex)
            {
                MessageBox(NULL,"资源载入失败!!","警告",MB_OK);
            }
            Background.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_NOZWRITE ;
            for(int i=0;i<4;i++)
            {
                // Set up z-coordinate of vertices
                Background.v[i].z=0.5f;
                // Set up color. The format of DWORD col is 0xAARRGGBB
                Background.v[i].col=ARGB(0,0,0,0);
            }
            Background.v[0].x=0; Background.v[0].y=0; 
            Background.v[1].x=800; Background.v[1].y=0; 
            Background.v[2].x=800; Background.v[2].y=600; 
            Background.v[3].x=0; Background.v[3].y=600; 
            Background.v[0].tx=0.0/800.0; 
            Background.v[0].ty=0.0/800.0;   
            Background.v[1].tx=800.0/800.0; 
            Background.v[1].ty=0.0/800.0; 
            Background.v[2].tx=800.0/800.0; 
            Background.v[2].ty=600.0/800.0; 
            Background.v[3].tx=0.0/800.0; 
            Background.v[3].ty=600.0/800.0;
            
    
            //程序开始
             hge->System_Start();
    
            //释放资源
            hge->Effect_Free(BG_Music);
            //hge->Effect_Free(BG_Texture);
            hge->Texture_Free(Background.tex);
        }
    
        //关闭程序资源
        hge->System_Shutdown();
        hge->Release();
        return 0;
    }
    HGE实战代码

    我们先看下前面的全局变量分别定义了背景音乐BG_Music和背景图片Background

    主程序入口开始,先是创建HGE然后进行版本检测,接下来是初始化引擎的相关参数,然后初始化hge,里面是一系列的资源的初始化,包括音乐的载入与播放,然后最重要的是今天的主页的载入,这里我们先用

    Background.tex = hge->Texture_Load("BG_pic.png");

    载入背景图片,然后设置渲染模式,并设置好Z-order,下面是重要的部分了

    Background.v[i].col=ARGB(0,255,255,255);

    通过ARGB()函数返回一个关于颜色的十六进制,该函数模型如下int ARGB(int Alpha,int R,int G,int B);我们这里将透明度先设置为0;

    然后接下来每一帧都会调用的两个函数:FrameFunc()和RenderFunc(),前者是每帧的逻辑设定,后者是每帧的渲染设定;

    bool FrameFunc()
    {    
        time = hge->Timer_GetTime();
        if (((int)(time*1000)) % 10 == 0 && Background.v[0].col != 0xFFFFFFFF)
        {
            for(int i=0;i<4;i++)
            {
                Background.v[i].col +=ARGB(1,1,1,1);
            }
        }
        return false;
    }

    这里函数总是返回 false,若是返回true的话就会跳出hge->System_Start();开始执行后面的资源销毁和程序退出代码.我们可以在这里进行逻辑判断,在某个时候更改背景图片等,更换场景,若是载入不成功就return true.

    这里我们看到,先是判断背景图片透明度是否是255而且从调用系统初始化到现在的时间取余(这样是为了控制逐渐的出场效果速度),假如不是就将背景图片的四个顶点的颜色中的透明度++,这样每帧都会+1那随着帧的增加,逐渐将整个图片显现出来.

    bool RenderFunc()
    {
        hge->Gfx_BeginScene();
        hge->Gfx_Clear(0);
        hge->Gfx_RenderQuad(&Background);
        hge->Gfx_EndScene();
        return false;
    }

    每帧的渲染函数,开始渲染,清空缓存,渲染背景,退出渲染,返回false(这里跟上面的FrameFunc()一样);

    接下来就要开始学习GUI菜单的部分!

  • 相关阅读:
    [转]2013豆瓣校园招聘研发类笔试题
    【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
    [转]2013百度校园招聘-机器学习和数据挖掘工程师-笔试题
    [转]一个应届计算机毕业生的2012求职之路
    图片镜像
    家有学霸的CEO
    盯盯拍Android App 3.0指导
    淘宝领取金币
    儿童散光眼的分类
    女孩被宠坏叫爷爷滚开
  • 原文地址:https://www.cnblogs.com/color-my-life/p/3216223.html
Copyright © 2020-2023  润新知