hge指南2翻译-尊龙官方平台

hge指南2翻译

el/2024/3/25 15:41:04

 tutorial 02 - using input, sound and rendering
使用输入,声音和表现

to render something we will need a hgequad structure. quad is the basic primitive in hge used for rendering graphics. quad contains 4 vertices,  numbered 0 to 3 clockwise. 为了表现某些事情我们需要一个hgequad结构。quad在hge中是最基础而又最原始的表 现图像的方法。quad包含4个顶点,顺时针的纪录0到3个数字。(潇潇注释:quad就象我们windows中的rect类似,代表屏幕,其中按顺时针 方向分布0到3,总共四个坐标点)

also we'll need a handle for the sound effect.
我们也需要一个声音效果的句柄。
hgequad quad;

heffect snd;
here go some "gameplay" variables and constants that we will use for our show.
这里有一些游戏变量和常量,我们将用来显示。

float x=100.0f, y=100.0f;
float dx=0.0f, dy=0.0f;
const float speed=90;
const float friction=0.98f;

now we create the function that will play collision sound with parameters based on sprite position and speed.  现在我们创建函数,基于精灵的位置和速度的参数用来播放碰撞声音
void boom() {
int pan=int((x-400)/4);
float pitch=(dx*dx dy*dy)*0.0005f 0.2f;
hge->effect_playex(snd,100,pan,pitch);
}

now to the frame function. first,  we need to know the time elapsed since last call of frame function to adjust our animation speeds to the current frame rate. we obtain it by calling the timer_getdelta function.  现在到帧函数里面。首先,我们需要去知道从最后一次调用帧函数到现在过去的时间,来调整我们的动画速度到正确的帧速度。我们通过调用 timer_getdelta函数获得它。
bool framefunc()
{
float dt=hge->timer_getdelta();
//now we process the key presses. we use here input_getkeystate function to monitor the keys state. to catch the key clicks you may use input_getkey function.  
//现在我们处理按键按下。我们在这里使用input_getkeystate函数去监听键盘状态。你可以用input_getkey函数去捕捉键单击。
if (hge->input_getkeystate(hgek_escape)) return true;
if (hge->input_getkeystate(hgek_left)) dx-=speed*dt;
if (hge->input_getkeystate(hgek_right)) dx =speed*dt;
if (hge->input_getkeystate(hgek_up)) dy-=speed*dt;
if (hge->input_getkeystate(hgek_down)) dy =speed*dt;
//now we do some movement calculations and collision detection specific to our example: 
//现在我们将在我们的例子中进行一些移动计算和冲撞捕捉的细节 
dx*=friction; dy*=friction; x =dx; y =dy;
if(x>784) {x=784-(x-784);dx=-dx;boom();}
if(x<16) {x=16 16-x;dx=-dx;boom();}
if(y>584) {y=584-(y-584);dy=-dy;boom();}
if(y<16) {y=16 16-y;dy=-dy;boom();}
//now we have updated the screen coordinates for our sprite and we should update the quad's vertices to reflect the changes.  
//现在我们已经为我们的精灵更新屏幕,下面我们将在quad的顶点中更新这种变化
quad.v[0].x=x-16; quad.v[0].y=y-16;
quad.v[1].x=x 16; quad.v[1].y=y-16;
quad.v[2].x=x 16; quad.v[2].y=y 16;
quad.v[3].x=x-16; quad.v[3].y=y 16;
//we've done with updating and should return false to continue execution. 
//我们已经更新了,然后要返回false去继续执行
return false;
}

now to the rendering part. we are going to set up a separate function which will be called by hge when the application window should be redrawn.  现在到表现部分。我们将设置一个独立的函数,当应用程序窗口将要重画的时候hge将调用它
bool renderfunc()
{
//to start rendering we call the gfx_beginscene function. then we clear the screen with a call to gfx_clear and render the sprite with gfx_renderquad. finally we finish rendering and update the screen,  calling the gfx_endscene function. 
//为了开始描述我们将调用gfx_beginscene函数。然后我们清除屏幕通过调用gfx_clear并且通过gfx_renderquad函数描述精灵。最后我们通过调用gfx_endscene函数完成描绘和更新屏幕。
hge->gfx_beginscene();
hge->gfx_clear(0);
hge->gfx_renderquad(&quad);
hge->gfx_endscene();
return false;
}

the rendering function should always return false. 描述函数将总是返回false.

now let's see the changes in winmain function. in this tutorial we set some more system states before hge initiating. first,  we should specify our rendering function. we also turn on the log file support and specify the desired video mode more explicitly:  现在让我们看看在winmain函数的变化。在这个指南中我们将在hge初始化之前设置一些更多的系统状态。首先,我们将指定我们的描述函数。我们也开 启log文件支持,并且明确的指定更多的想要得视频模式。
 
  hge->system_setstate(hge_logfile, "hge_tut02.log");
hge->system_setstate(hge_framefunc, framefunc);
hge->system_setstate(hge_renderfunc, renderfunc);
hge->system_setstate(hge_title,  "hge tutorial 02 - using input, sound and rendering");
hge->system_setstate(hge_fps, 100);
hge->system_setstate(hge_windowed, true);
hge->system_setstate(hge_screenwidth, 800);
hge->system_setstate(hge_screenheight, 600);
hge->system_setstate(hge_screenbpp, 32);

when hge is initiated we need to load a texture that holds graphics and a sound effect: 
    snd=hge->effect_load("menu.wav");
quad.tex=hge->texture_load("particles.png");

now we should set up the hgequad structure that we will use for rendering. the quad's texture is already set up,  now we set the blending mode and fill in the vertices array with the desired values.  现在我们设置为描绘所使用的hgequad结构。quad的结构已经设置,现在我们在定点数组中使用想要得值来设置混合和填充模式

we don't use z -buffer in this example, so the z- order of vertices is ignored here, and we set it to an arbitrary value in range from 0.0 to 1.0,  just to be sure. the format of a vertex color dword is 0xaarrggbb. 在这个例 子中我们不是用z缓冲,所以z轴顶点在这里是可以忽视的。并且我们设置他为从0.0到1.0范围中的任意值。一个顶点颜色的格式为dwore是 0xaarrggbb.

the texture coordinates tx and ty for each vertex define the part of the texture to be rendered with this quad. the values are in range 0.0 to 1.0. 0,0 means top left corner and 1,1  - bottom right corner of the texture. here we have a 128x128 texture and we want to use a 32x32 square part of it starting at 96,64.  这个结构相配的tx和ty为每一个顶点定义用quad去描述的结构的一部分。这个值是在范围0.0到1.0。0.0表示左顶点区域,1,1结构表示右下区 域。这里我们有一个128*128结构并且我们想要用一个32*32平方部分他开始在96,64。
 
   quad.blend=blend_alphaadd | blend_colormul | blend_zwrite;
for(int i=0;i<4;i  )
{
quad.v[i].z=0.5f;
quad.v[i].col=0xffffa000;
}
quad.v[0].tx=96.0/128.0; quad.v[0].ty=64.0/128.0; 
quad.v[1].tx=128.0/128.0; quad.v[1].ty=64.0/128.0; 
quad.v[2].tx=128.0/128.0; quad.v[2].ty=96.0/128.0; 
quad.v[3].tx=96.0/128.0; quad.v[3].ty=96.0/128.0; 

now we're ready to start the game loop with the system_start function. when the frame function returns true and the game loop is finished we should free the loaded texture and the sound effect:  现在我们已经开始这个游戏循环用system_start函数。当帧函数返回true并且游戏循环完成,我们将释放载入的结构和声音效果:
    hge->system_start();
hge->texture_free(quad.tex);
hge->effect_free(snd);

the rest of shutdown process is identical to the one demonstrated in tutorial 01. 停止函数的其余处理方法是和前一个指南里的实例一同样的

the complete source code with detailed comments for this tutorial you may find in the folder tutorials /tutorial02. the required media files you'll find in the folder tutorials /precompiled.
完整的带详细注释的该指南的源代码,你可以在文件夹tutorials/tutorial02中找到。必需的媒体文件你可以 在文件夹tutorials/precompiled 中找到。

http://www.ngui.cc/el/5126781.html

相关文章

hge指南1翻译

tutorial 01 - minimal hge application 最小的he程序 first, we include hge.h header and declare a variable to store the hge interface pointer to: 首先,我们包含hge.h头文件并且定一个变量去存储hge接口指针: #include hge *hge 0; then we …

ping程序的源代码

内容简介: 编写自己的一个ping程序,可以说是许多人迈出网络编程的第一步吧!!这个ping程序的源代码经过我的修改和调试,基本上可以取代windows中自带的ping程序. 各个模块后都有我的详细注释和修改日志,希望能够对大家的学习有所帮助!! /* 本程序的主要源代码来自msdn网站, 笔者…

win32控制台程序中,使用mfc的方法

1.在项目属性->配置属性->常规->mfc的使用,选择"在共享dll中使用mfc" 2.note:用于隐藏掉console框 #pragma comment(linker, "/subsystem:/"windows/" /entry:/"maincrtstartup/"" ) // 设置入口地址 3.添加include文件a…

解决忘记用户登录密码的问题

今天修改了一下系统密码,结果用正确的密码也进入不了系统,郁闷死我了!! 而同样的密码,用优化大师设置为自动登录,就可以登录,而我输入硬是进不了!我用的是深度xp sp3操作系统,肯定是系统的问题。后来叫同事…

windows xp 运行命令全集

windows xp 运行命令全集 运行命令全集! 运行命令全集! 开始——运行。。。。。。大家一定很熟悉了吧,但出了ping,regedit,mmc之外还还记得什么吗?那就来这儿看看吧! w qlh~&k0winver---------检查windows版本数字…

通过注册表更改桌面路径

首先要在“开始”——“运行”内输入“regedit”打开注册表编辑器,然后要在“文件”下拉菜单中的“导出”功能备份好注册表,以防万一,接着在左侧窗口依次打开: hkey_current_user/software/microsoft/windows/currentversion/exp…

getmemory的几个经典的关于内存的笔试题

面试c程序员时用得着的几道题: ----------------------------------------------------- getmemory的几个经典的关于内存的笔试题 void getmemory1(char *p) { p (char *)malloc(100); } void test1(void) { char *str null; getmemory1(str); …

《反恐精英》[教程]菜单的制作(amxmod)

在cs中创建一个菜单系统,我们把它分解成两步.  首先必须建立并在屏幕上显示一个菜单  其次要注册菜单,这样才能让插件(amxmod)知道该怎么做!  当一个菜单的内容被设计好时 ::…

c语言辅导:不定参数在c语言中的应用实例

2009年下半年全国计算机等级考试你准备好了没?考计算机等级二级考试的朋友,2009年下半年全国计算机等级考试时间是2009年9月19日至23日。   不定参数在c语言中的应用实例:不定参数当年做为c/c语言一个特长被很多人推崇,但是实际上这种技术并没有应用…

修改vista盘符 不用任何工具也可以搞定

很多人安装了双系统来体验windows vista,可是当安装完vista时,系统盘符在windows xp中没有变化,但是相对应的windows vista盘符全变了,windows系统的计算机管理功能可以轻松针对windows盘符进行修改。打开“我的电脑”-“控制面板…
网站地图