⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tutorial_21.htm

📁 如果你相信它就好好学学吧,同样这里也只是个入门
💻 HTM
📖 第 1 页 / 共 5 页
字号:
	return Status;							
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">下面的代码建立了显示列表。对于字体的显示,我已经写过教程。在这里我把字体图象分成16×16个单元共256个字符。如果你有什么不明白,请参阅前面的教程</td>
    <td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3">GLvoid BuildFont(GLvoid)							
{
	base=glGenLists(256);							
	glBindTexture(GL_TEXTURE_2D, texture[0]);				
	for (loop1=0; loop1&lt;256; loop1++)					
	{
		float cx=float(loop1%16)/16.0f;					
		float cy=float(loop1/16)/16.0f;					

		glNewList(base+loop1,GL_COMPILE);				
			glBegin(GL_QUADS);					
				glTexCoord2f(cx,1.0f-cy-0.0625f);		
				glVertex2d(0,16);				
				glTexCoord2f(cx+0.0625f,1.0f-cy-0.0625f);	
				glVertex2i(16,16);				
				glTexCoord2f(cx+0.0625f,1.0f-cy);		
				glVertex2i(16,0);				
				glTexCoord2f(cx,1.0f-cy);			
				glVertex2i(0,0);				
			glEnd();						
			glTranslated(15,0,0);					
		glEndList();							
	}									
}
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">当我们不再需要显示列表的时候,销毁它是一个好主意。在这里我仍然把代码加上了,虽然没有什么新东西。</td>
    <td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>GLvoid KillFont(GLvoid)		
{
	glDeleteLists(base,256);						
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">函数没有做太多改变。唯一的改动是它可以打印变量了。我把代码列出这样你可以容易看到改动的地方。<br>
      请注意,在这里我激活了纹理并且重置了视图矩阵。如果set被置1的话,字体将被放大。我这样做是希望可以在屏幕上显示大一点的字符。在一切结束后,我会禁用纹理。</td>
    <td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
</font><pre><font color="#aaffaa" size="3">GLvoid glPrint(GLint x, GLint y, int set, const char *fmt, ...)
{
	char		text[256];						
	va_list		ap;							

	if (fmt == NULL)		
		return;								

	va_start(ap, fmt);							
	    vsprintf(text, fmt, ap);						
	va_end(ap);								

	if (set&gt;1)								
	{
		set=1;							
	}
	glEnable(GL_TEXTURE_2D);						
	glLoadIdentity();							
	glTranslated(x,y,0);							
	glListBase(base-32+(128*set));						

	if (set==0)								
	{
		glScalef(1.5f,2.0f,1.0f);					
	}

	glCallLists(strlen(text),GL_UNSIGNED_BYTE, text);			
	glDisable(GL_TEXTURE_2D);						
}
</font></pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">下面的代码基本没有变化,只是把透视投影变为了正投影</td>
    <td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>GLvoid ReSizeGLScene(GLsizei width, GLsizei height)				 
{
	if (height==0)							
	{
		height=1;							
	}

	glViewport(0,0,width,height);						

	glMatrixMode(GL_PROJECTION);						
	glLoadIdentity();							

	glOrtho(0.0f,width,height,0.0f,-1.0f,1.0f);

	glMatrixMode(GL_MODELVIEW);						
	glLoadIdentity();							
}
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">初始化的代码和前面的代码相比没有什么改变</td>
    <td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3"><pre>int InitGL(GLvoid)
{
	if (!LoadGLTextures())							
	{
		return FALSE;							
	}

	BuildFont();								

	glShadeModel(GL_SMOOTH);						
	glClearColor(0.0f, 0.0f, 0.0f, 0.5f);					
	glClearDepth(1.0f);							
	glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);					
	glEnable(GL_BLEND);							
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	return TRUE;								
}
</pre></font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">下面是我们的绘制代码。
      <p>首先我们清空缓存,接着绑定字体的纹理,绘制游戏的提示字符串</p></td><td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>int DrawGLScene(GLvoid)								
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);			
	glBindTexture(GL_TEXTURE_2D, texture[0]);				<font color="#ffffaa">// 选择字符纹理</font>
	glColor3f(1.0f,0.5f,1.0f);						
	glPrint(207,24,0,"GRID CRAZY");						<font color="#ffffaa">// 绘制游戏名称"GRID CRAZY"</font>
	glColor3f(1.0f,1.0f,0.0f);						
	glPrint(20,20,1,"Level:%2i",level2);					<font color="#ffffaa">// 绘制当前的级别</font>
	glPrint(20,40,1,"Stage:%2i",stage);					<font color="#ffffaa">// 绘制当前级别的关卡</font>
</pre>
</font><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">现在我们检测游戏是否结束,如果游戏结束绘制"Gmae over"并提示玩家按空格键重新开始</td>
    <td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table>
<font color="#aaffaa" size="3"> 
<pre>	if (gameover)								<font color="#ffffaa">// 游戏是否结束?</font>
	{
		glColor3ub(rand()%255,rand()%255,rand()%255);			<font color="#ffffaa">// 随机选择一种颜色</font>
		glPrint(472,20,1,"GAME OVER");					<font color="#ffffaa">// 绘制 GAME OVER 字符串到屏幕</font>
		glPrint(456,40,1,"PRESS SPACE");				<font color="#ffffaa">// 提示玩家按空格键重新开始</font>
	}
</pre>
</font>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/tl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/tc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/tr.png" height="28" width="28"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td background="Tutorial_21_files/l.png"><img src="Tutorial_21_files/l.png"></td>
    <td valign="top" width="100%">在屏幕的右上角绘制玩家的剩余生命</td>
    <td background="Tutorial_21_files/r.png"><img src="Tutorial_21_files/r.png"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="Tutorial_21_files/bl.png" height="28" width="28"></td><td width="100%"><img src="Tutorial_21_files/bc.png" height="28" width="100%"></td><td><img src="Tutorial_21_files/br.png" height="28" width="28"></td></tr></tbody></table><font color="#aaffaa" size="3">
<pre>	for (loop1=0; loop1&lt;lives-1; loop1++)					<font color="#ffffaa">//循环绘制玩家的剩余生命</font>
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -