QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1718|回复: 20

再问SDL编程,怎样在sdl中写字?谢谢,具体操作如何?

[复制链接]
发表于 2004-5-20 15:48:16 | 显示全部楼层 |阅读模式
如题!
发表于 2004-5-20 16:31:59 | 显示全部楼层
http://fly19.51.net/applepie/
回复

使用道具 举报

 楼主| 发表于 2004-5-20 17:01:34 | 显示全部楼层
看了!
但是不知道写字所需要的头文件在那儿?
也不知道所需要的调用函数在哪儿?
回复

使用道具 举报

发表于 2004-5-20 17:28:50 | 显示全部楼层
用点阵字库,直接描点
回复

使用道具 举报

 楼主| 发表于 2004-5-20 17:49:19 | 显示全部楼层
那岂不是很麻烦!
能够说得稍微详细一点吗?
好让我有点思路!
谢谢!
回复

使用道具 举报

发表于 2004-5-20 20:16:19 | 显示全部楼层
用SDL_ttf显示TrueType字体,我的硬盘坏了(用别人电脑上网),等将数据拷贝出来后可以给你示例看看。当然了,如果字体很小的话,点阵汉字会更清晰,你可以到我的网站http://linside.8u8.com下载到示例源码:五笔练习for Linux(SDL版)。
回复

使用道具 举报

 楼主| 发表于 2004-5-20 21:17:24 | 显示全部楼层
谢谢!
愿你能很快恢复数据!
呵呵!!
回复

使用道具 举报

发表于 2004-5-22 14:41:04 | 显示全部楼层
硬盘已经恢复!下边是显示TrueType字体的示例代码:
[code:1]

/* showhz.c writed by lanche, 2004.05.21 */
/* http://linside.8u8.com | [email protected] */

#include <SDL.h>
#include <SDL_ttf.h>

int main()
{
  SDL_Surface *screen;
  SDL_Event event;
  TTF_Font *font;
  SDL_Surface *text;
  int ptsize;
  SDL_Color white={255,255,255,0};

  // Initialize SDL
  if(SDL_Init(SDL_INIT_VIDEO)<0){
    fprintf(stderr,"Can't init SDL:%s\n",SDL_GetError());
    exit(1);
  }
  atexit(SDL_Quit);
  screen=SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);
  if(screen==NULL){
    fprintf(stderr,"Can't set mode 640x480:%s\n",SDL_GetError());
    exit(1);
  }
  SDL_ShowCursor(0);

  // Initialize the TTF library
  if(TTF_Init()<0){
    fprintf(stderr,"Couldn't initialize TTF: %s\n",SDL_GetError());
    exit(1);
  }
  atexit(TTF_Quit);

  SDL_FillRect(screen,NULL,(SDL_MapRGB(screen->format,8,40,130)));
  SDL_UpdateRect(screen,0,0,0,0);

  ptsize=64;
  font=TTF_OpenFont("/usr/fonts/truetype/simsun.ttf",ptsize);
  text=TTF_RenderUTF8_Blended(font,"TrueType字体显示",white);
  SDL_BlitSurface(text,NULL,screen,NULL);
  SDL_UpdateRect(screen,0,0,0,0);

  for(;;){
    SDL_WaitEvent(&event);
    if(event.type==SDL_KEYDOWN)break;
  }
  TTF_CloseFont(font);
  SDL_FreeSurface(text);
  SDL_Quit();
}

[/code:1]

编译:gcc -I/usr/include/SDL -lSDL -lSDL_ttf showhz.c -o showhz
运行:./showhz
注意:代码要用kwrite或其它编辑器转存成utf8格式才能正确显示中文。
回复

使用道具 举报

 楼主| 发表于 2004-5-22 16:11:23 | 显示全部楼层
你刚刚提供的关于字体的程序,
在我的机器上编译时出现如下错误!

*.c: In function `main':
*.c:11: `TTF_Font' undeclared (first use in this function)
*.c:11: (Each undeclared identifier is reported only once
*.c:11: for each function it appears in.)
*.c:11: `font' undeclared (first use in this function)
*.c:34: `TTF_Quit' undeclared (first use in this function)
*.c:41: warning: assignment makes pointer from integer without a cast
*.c:52:2: warning: no newline at end of file

我查了一下,发现SDL/ 下并没有SDL_ttf.h文件。
我已经安装了SDL_ttf2.0.6, ( freetype2也由2.1.3升级到2.1.8 )
我在/usr 下搜索了SDL_ttf.h,却没有发现它。
但是我用rpm -q SDL_ttf,得到的结果是: SDL_ttf-2.0.6-1
( 这证明SDL_ttf已经安装上了 )

这是怎么回事啊?
我有点糊涂了!
回复

使用道具 举报

发表于 2004-5-22 21:21:07 | 显示全部楼层
你还需安装SDL_ttf-devel-2.0.6-1。因为我在编译时已经指出头文件所在路径(即gcc -I/usr/include/SDL),所以它们的相对路径在在程序中就写成#include <SDL.h>和#include <SDL_ttf.h>;当然也可以相对于系统默认路径/usr/include而写成#include <SDL/SDL.h>和#include <SDL/SDL_ttf.h>,这时就无须在编译时加入-I参数了。
回复

使用道具 举报

 楼主| 发表于 2004-5-22 23:25:29 | 显示全部楼层
谢谢!
你给出的字体文件我没装!
我用这个文件,试了一下,感觉不错
/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf
回复

使用道具 举报

发表于 2004-5-23 12:32:52 | 显示全部楼层
中文TrueType字体文件太大了,一般得有10MB左右,所以在图形程序如游戏中应避免使用,尽量只用简单易懂的英文,因为英文的字体文件很小,可以跟程序一起打包发布以便他人下载使用;或者将所需显示的TrueType中文事先制作图片如游戏主界面、主菜单等,就无须使用整个字体文件了;当然也可以使用点阵字库,一般16x16的字库才200多MB。
回复

使用道具 举报

发表于 2004-5-23 12:42:14 | 显示全部楼层
200多Mb?
回复

使用道具 举报

发表于 2004-5-23 14:29:20 | 显示全部楼层
呵呵,200多KB, 动不动就写错,老了,不中用了~~~~~~以后全靠你们年轻人了~~~
回复

使用道具 举报

发表于 2004-5-23 16:06:53 | 显示全部楼层
为什么要把中文字体文件随游戏发布呢?用配置文件让用户指定一个字体不好吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 06:50 , Processed in 0.051143 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表