HGE游戏引擎之实战篇,渐变的游戏开场
#include <hge.h>
#include "menuitem.h"
//#include <hgefont.h>
#include <hgegui.h> #include <math.h> //定义全局变量
long int zhen = ;
//定义当前关卡
int SCENCE = ;
//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*)) % == && Background.v[].col != 0xFFFFFFFF)
{
for(int i=;i<;i++)
{
Background.v[i].col +=ARGB(,,,);
}
}
return false;
} //图元渲染循环
bool RenderFunc()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear();
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, );
hge->System_SetState(HGE_SCREENHEIGHT, );
hge->System_SetState(HGE_SCREENBPP, ); //载入程序资源
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 ;
}
hge->Effect_PlayEx(BG_Music,,,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=;i<;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(,,,);
}
Background.v[].x=; Background.v[].y=;
Background.v[].x=; Background.v[].y=;
Background.v[].x=; Background.v[].y=;
Background.v[].x=; Background.v[].y=;
Background.v[].tx=0.0/800.0;
Background.v[].ty=0.0/800.0;
Background.v[].tx=800.0/800.0;
Background.v[].ty=0.0/800.0;
Background.v[].tx=800.0/800.0;
Background.v[].ty=600.0/800.0;
Background.v[].tx=0.0/800.0;
Background.v[].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 ;
}
HGE实战代码
我们先看下前面的全局变量分别定义了背景音乐BG_Music和背景图片Background
主程序入口开始,先是创建HGE然后进行版本检测,接下来是初始化引擎的相关参数,然后初始化hge,里面是一系列的资源的初始化,包括音乐的载入与播放,然后最重要的是今天的主页的载入,这里我们先用
Background.tex = hge->Texture_Load("BG_pic.png");
载入背景图片,然后设置渲染模式,并设置好Z-order,下面是重要的部分了
Background.v[i].col=ARGB(,,,);
通过ARGB()函数返回一个关于颜色的十六进制,该函数模型如下int ARGB(int Alpha,int R,int G,int B);我们这里将透明度先设置为0;
然后接下来每一帧都会调用的两个函数:FrameFunc()和RenderFunc(),前者是每帧的逻辑设定,后者是每帧的渲染设定;
bool FrameFunc()
{
time = hge->Timer_GetTime();
if (((int)(time*)) % == && Background.v[].col != 0xFFFFFFFF)
{
for(int i=;i<;i++)
{
Background.v[i].col +=ARGB(,,,);
}
}
return false;
}
这里函数总是返回 false,若是返回true的话就会跳出hge->System_Start();开始执行后面的资源销毁和程序退出代码.我们可以在这里进行逻辑判断,在某个时候更改背景图片等,更换场景,若是载入不成功就return true.
这里我们看到,先是判断背景图片透明度是否是255而且从调用系统初始化到现在的时间取余(这样是为了控制逐渐的出场效果速度),假如不是就将背景图片的四个顶点的颜色中的透明度++,这样每帧都会+1那随着帧的增加,逐渐将整个图片显现出来.
bool RenderFunc()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear();
hge->Gfx_RenderQuad(&Background);
hge->Gfx_EndScene();
return false;
}
每帧的渲染函数,开始渲染,清空缓存,渲染背景,退出渲染,返回false(这里跟上面的FrameFunc()一样);
接下来就要开始学习GUI菜单的部分!
HGE游戏引擎之实战篇,渐变的游戏开场的更多相关文章
- 如何制作一款HTML5 RPG游戏引擎——第五篇,人物&人物特效
上一次,我们实现了对话类,今天就来做一个游戏中必不可少的——人物类. 当然,你完全是可以自己写一个人物类,但是为了方便起见,还是决定把人物类封装到这个引擎里. 为了使这个类更有意义,我还给人物类加了几 ...
- 如何制作一款HTML5 RPG游戏引擎——第四篇,情景对话
今天我们来实现情景对话.这是一个重要的功能,没有它,游戏将变得索然无味.所以我们不得不来完成它. 但是要知道,使用对话可不是一件简单的事,因为它内部的东西很多,比如说人物头像,人物名称,对话内容... ...
- 如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景
开言: 在RPG游戏中,如果有地图切换的地方,通常就会使用幕布效果.所谓的幕布其实就是将两个矩形合拢,直到把屏幕遮住,然后再展开直到两个矩形全部移出屏幕. 为了大家做游戏方便,于是我给这个引擎加了这么 ...
- andengine游戏引擎总结基础篇
其他的游戏引擎知道的不是很对,不过相对于学java的童鞋们来说,那是个不错的选择啦,这个发动机咋样,google去吧.基础篇包括图片,字体,音效,数据读取,会了这点,就会做简单的小游戏啦 对于游戏 ...
- 我的第一个上线小程序,案例实战篇二——LayaAir游戏开始界面开发
不知不觉我的第一个小程序已经上线一周了,uv也稳定的上升着. 很多人说我的小程序没啥用,我默默一笑,心里说:“它一直敦促我学习,敦促我进步”.我的以一个小程序初衷是经验分享,目前先把经验分享到博客园, ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)
G-3D引擎2D射击类游戏制作教程 游戏类型: 打飞机游戏属于射击类游戏中的一种,可以划分为卷轴射击类游戏. 视觉表现类型为:2D 框架简介: Genesis-3D引擎不仅为开发者提供一个3D游戏制作 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结
8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》
7.全屏炸弹 全屏炸弹概述: 为了增设游戏的趣味性,我们制作一个游戏的基本框架以外.还会增设一些其他的额外的功能.比如5秒无敌状态.冰冻效果等.下面咱们以消灭屏幕中所有炸弹为例,看除了碰撞可以触发事件 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》
6.计分 计分概述: 分值计量直接反应玩家在游戏中获得的成就感.因此,计分系统在游戏中显得尤为重要,有的反应在直接获取的分数上,有的反应在杀敌数量上等. 计分原理: 原理图,如图6-1所示. 图6-1 ...
随机推荐
- Cure---hdu5879(打表+找规律)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5879 题意:给你一个n ,求∑(1/k2), k from 1 to n; n的范围是不知道的,所以可 ...
- JSON.stringify实例应用—将对象转换成JSON类型进行AJAX异步传值
在上一篇中,对JSON.stringify()方法有了初步的认识,并且做了一些简单的例子.本篇将进一步将JSON.stringify用在复杂些的实例中,例如如下需求: 在进jQuery AJAX异步传 ...
- qt 控件 背景色 透明 除去边框
在调试ui的时候,需要将背景色变为透明,与母控件的颜色一致,并且除去边框. 参考链接: http://www.qtcentre.org/threads/12148-how-QTextEdit-tran ...
- net异步线程注意事项
某人(不是我写的)写的异步代码:(还请博友们点评哈~) AsyncEventHandler[] asy = new AsyncEventHandler[ResultCount]; IAsyncRe ...
- C#中派生类调用基类构造函数用法分析
这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...
- LeetCode Shortest Word Distance II
原题链接在这里:https://leetcode.com/problems/shortest-word-distance-ii/ 题目: This is a follow up of Shortest ...
- python笔记 - day7-1 之面向对象编程
python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...
- extern 和 static和 今天的一些代码,12-03
这是关于标识符的链接属性的,链接属性只有三种:external, internal, none 改变规则: 3.1 文件作用域的变量和函数定义,即在所有 代码块和参数列表之外的标识符,使用static ...
- [BS-02] iOS数组、字典、NSNumber 新写法—— @[]、@{}
IOS数组.字典.NSNumber 新写法—— @[].@{} //标准写法 NSNumber * number = [NSNumber numberWithInt:]; NSArray * ar ...
- 百度地图API 简单示例
百度地图API2.0需要申请AK javascript引用百度地图API 设置地图DIV样式 javascript设置地图DIV 如下图代码: <!DOCTYPE html> <ht ...