nds自制软件教程2 nds自制软件教程2 这一部分包括如何利用nds.docVIP

nds自制软件教程2 nds自制软件教程2 这一部分包括如何利用nds.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
nds自制软件教程2 nds自制软件教程2 这一部分包括如何利用nds

NDS自制软件教程2 NDS自制软件教程2 这一部分包括如何利用NDS的“帧缓冲”(framebuffer)模式在NDS的一个显示屏上绘图。NDS的每一个显示屏都可以被设置成很多种模式。每一种模式有其优缺点,但我们这里只使用“帧缓冲”模式来实现一个最简单的绘图功能。 “帧缓冲”(framebuffer): “帧缓冲”是一种显示屏映射到一部分内存的模式。向内存中写数据会导致数据显示在显示屏上。在这个模式中,显示屏上的一个象素由2字节数据表示。这相当于C语言中的16位无符号整型数据类型(16 bit unsigned integer)。我们写入这部分内存的数据是以555格式显现的象素颜色。 所以我们不需要人为转换555格式,这有一个方便的宏RGB15让我们确定每一个象素的红、绿、蓝色的数量。每一个红、绿、蓝元素是一个从0-31的值。0表示无颜色,31表示最大色。(通过不同组合来显现不同颜色)。这是一个例子: RGB15 ? ? ? Color RGB15(31,0,0) ? Red RGB15(0,31,0) ? Green RGB15(0,0,31) ? Blue RGB15(0,0,0) ? Black RGB15(31,31,31) White 下面的代码片是示范如何通过给定一个指向“帧缓冲”区内存开始部分的指针来用蓝色填充屏幕的: ? uint16* framebuffer = ...; for(int i = 0; i SCREEN_WIDTH * SCREEN_HEIGHT; ++i) ? *framebuffer++ = RGB15(0,0,31); 向“帧缓冲”写的数据会立刻被画在相应象素上。“帧缓冲”模式的好处是你可以在屏幕任意地方画任何你想画的东西,它直接使用NDS的2D硬件加速。 “帧缓冲”的缺点是你必须自己做所有事。没有“精灵”(sprites)、贴图、卷动等等,除非你自己写代码实现。NDS的其他模式也许会适合做这些事,它们会在以后的教程中介绍。同时,“帧缓冲”模式有很多灵活性,并让我们更加接近硬件。 屏幕: 从硬件角度来看NDS上有两个屏幕。一个在上一个在下。下屏是唯一的触摸屏。 从编程角度来看这也有两个屏。一个主屏和一个副屏。每一个程序设计中的屏是和硬件对应的。在这个例子中我们只使用一个屏,主屏,它所对应的是硬件的上屏幕。 我们用一个叫videoSetMode的函数来设置屏的模式。有很多“帧缓冲”内存可以被映射到一个屏幕。这就允许我们实现双缓冲、特殊页之类的功能。我们现在只使用一个“帧缓冲”,所以我们使用“MODE_FB0”; videoSetMode(MODE_FB0); “帧缓冲”的内存区域是一部分带有一个字母“A”的名叫VRAM的内存。对每一部分,我们需要告诉显示系统那一部分VRAM 内存我们用来做 “帧缓冲”。我们可以像这样使用第一个,VRAM_A: vramSetBankA(VRAM_A_LCD); 画一个图形: 我们要在显示屏上画的是一个单色矩形。我们写了一个函数来实现它,函数参数包括矩形在屏幕上的位置的X、Y坐标、颜色、以及一个指向“帧缓冲”区的指针: void draw_shape(int x, int y, uint16* buffer, uint16 color) { buffer += y * SCREEN_WIDTH + x; for(int i = 0; i shape_height; ++i) { ? uint16* line = buffer + (SCREEN_WIDTH * i); ? for(int j = 0; j shape_width; ++j) { ? ? *line++ = color; ? } } } “帧缓冲”在内存中以行排列,所以如果屏幕有200象素宽,那麽“帧缓冲”开始的200个uint16(一个象素由一个uint16数据表示)数据单元就代表显示屏的第一行。第二个200个uint16数据单元就表示第二行,等等。 “draw_shape”函数首先通过对X、Y坐标的计算来确定第一个象素在“帧缓冲”中的位置。注意SCREEN_WIDTH 和 SCREEN_HEIGHT 是“LIBNDS”提供的返回屏幕宽、高的宏。 函数接下来通过向“帧缓冲”中的正确位置写入颜色数据来绘制图形的每一行。 shape_height 和 shape_width 是静态变量,做测试时可改变其值: static int shape_width = 10; static int shape_height = 10; 移动图形: 让图形能在屏幕上移动我们需要擦除现在位置的图形并在新位置重画。这可以通过保存运动前后X、Y坐标的轨迹

文档评论(0)

bodkd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档