存档

‘编程’ 分类的存档

NDS开发Wifi翻译:第五天:背景(2)

2006年6月21日 没有评论

背景滚动


一般滚动

滚动背景和移动精灵一样容易!只要使用一个简单的函数就行了,例子在PAlibExamples/ScrollBg :

PA_InitText(1, 0); // Init text on the top screen, background 0…

// Load Backgrounds and their palettes…

PA_LoadTiledBg(0, 3, BG3);

PA_LoadTiledBg(1, 3, BG3);

s32 scrollx = 0; // No X scroll by default…

s32 scrolly = 0; // No Y scroll by default…

// Infinite loop to keep the program running

while (1)

{

// We’ll modify scrollx and scrolly according to the keys pressed

scrollx += (Pad.Held.Left – Pad.Held.Right) * 4; // Move 4 pixels per press

scrolly += (Pad.Held.Up – Pad.Held.Down) * 4; // Move 4 pixels per press

// Scroll the background to scrollx, scrolly…

PA_BGScrollXY(0, // Screen

3, // Background number

scrollx, // X scroll

scrolly); // Y scroll

// Display the X and Y scrolls :

PA_OutputText(1, 0, 0, "x : %d \ny : %d ", scrollx, scrolly);

PA_WaitForVBL();

}

背景的装载和平常一样,在例子里面,文本也初始化了。。。我们将用文本来显示滚动的一些信息。(译:□□□□□此处删去×××字)

  • scrollx += (Pad.Held.Left – Pad.Held.Right) * 4; 这个和精灵例子里面的代码很像,数字4表示背景滚动的速度!
  • PA_BGScrollXY(Screen, Background number, X scroll, Y scroll); 这个也很容易理解:滚动屏幕到指定位置。。
  • 文本信息用来显示背景当前位置。。。

当一个背景划出屏幕的时候,发生了什么?它回滚了。这样你就不会得到一个空的背景,而始终都是你的背景。。。如果你的背景是256象素宽,那么你把部分背景移出左方,移出的部分将立刻在屏幕右边出现。。。

视差滚动

视差滚动是一向让多层背景以不同的速度滚动的技术,可以生成一种非常漂亮的3D效果。。。使用简单,效果显著,不用这个技术就太可惜了!很有游戏都用它,从射击类到平面类。比如横版纵版射击中,让远处的星星移动得比近处的星星慢一点。比如在超级玛丽中,如果超级玛丽站在滑板上,背景上的山往后移,而天上的云以另外一种速度移动,这看上去就非常棒!发挥你的想象力吧。不过我们还是先来看看我们的Demo是怎么干的。。。

PAlib提供了一些很不错的函数,我们看一下Backgrounds/Parallax 例子先。。。

// Load the 4 Backgrounds on the bottom screen…

PA_LoadTiledBg(0, 1, BG1); //screen, background number, background name

PA_LoadTiledBg(0, 2, BG2);

PA_LoadTiledBg(0, 3, BG3);

// Initialise parallax vertically (Y axis) for both backgrounds

// 256 is normal speed, 128 half speed, 512 twice as fast…

PA_InitParallaxY(0, //screen

0, //Parallax speed for Background 0. 0 is no parallax (will scroll independently with BGScroll)

256, // Normal speed for Bg1

192, // 3/4 speed

128); // Half speed

PA_InitParallaxY(1, 0, 256, 192, 128); // Same thing, but for Screen 1…

s32 scroll = 0;

// Infinite loop to keep the program running

while (1)

{

scroll += 1; // Scroll by one pixel…

// Backgrounds with a parallax speed of 256 will scroll 1 pixel, 192 will scroll 0.75, and 128 0.5

// We could also have put a negative parallax speed to have some backgrounds scroll in different directions

PA_ParallaxScrollY(0, -scroll); // Scroll the screen 0 backgrounds.

PA_WaitForVBL();

}

首先,你需要装载一些背景,至少要有2个。。。如果只有1个,是做不到以不同速度滚动的!(译:无敌的解释啊。)

然后,你必须初始化视差滚动:PA_InitParallaxY(screen, bg0 speed, bg1 speed, bg2 speed, bg3 speed);.。你要做的事情就是赋予不同的背景不同的速度。记住,256代表了1级速度,512则是2级速度,128则是0.5级。。。你需要做一些测试来找出在你的游戏里面多少速度比较合适,这应该不困难。如果你在视差滚动的时候,还需要一个固定的背景,比如在超级玛丽中,有一个显示金币数的背景,那么你只要把0号背景的速度设置为0就可以了。

scroll += 1; 这句话是让屏幕自动滚动,我们也可以实现通过按键滚动。

PA_ParallaxScrollY(screen, scroll); 这个函数是真正地进行视差滚动。。。。这里的scroll参数是用来控制滚动方向的。。。

现在,编译并测试吧,它甚至可以在DualiS模拟器上跑!你应该看到一个漂亮的视差滚动。如何?很漂亮,不是吗?

好了,这里背景是垂直滚动的,而超级玛丽是水平滚动的。。。要改变滚动方向很容易。你有没有注意到PA_ParallaxScrollY函数的最后一个字母Y?只要把Y换成X就可以了。甚至你还可以组合使用XY。

(译:这一部分很有趣,使用视差滚动让你的朋友们崇拜你吧。是的,作为技术派,你也许觉得实现起来不够复杂,不乍得,但是外行们都是看热闹的,让他们为你欢呼吧)

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/9247;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程, 电玩 标签: ,

庆祝自己写出了大家来找茬NDS版0.01版

2006年6月21日 没有评论
庆祝自己写出了大家来找茬NDS版0.01版
 
贴出截图两张。。。热烈庆祝。
 
不积圭步,无以致千里!
 
原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/9245;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程, 电玩 标签: ,

NDS开发Wifi翻译:第四天:精灵(2)

2006年6月17日 没有评论

使用PAGfx转化


想知道Cool一点的消息吗?如果精灵能被直接使用到DS上,而不用任何修改。。。抱歉让你失望了,停止白日梦吧。这就是我要介绍的,你将看到如何转化一个精灵到DS的格式,并不是很复杂。。。

我们将要使用的使用的是PAGfx,由Mollusk和Kleevah创建的转换工具,用起来再简单不过了。有2种方法使用它,一种给初学者通过GUI界面使用,另一种给高级用户的,只有一个PAGfx.ini文件。两种用法的结果是一样的,不用担心。

PAGfx的GUI界面


第一件事情,进入PAlib/Tools目录,可以看到PAGfx目录。里面有4个文件。

  • PAGfx.txt,一个使用说明和更新日志,既然你在看我的指南,因此你压根用不上这个。
  • PAGfx.ini,转化用的ini文件,我将在第二部分进行分析。
  • PAGfx.exe,根据ini文件转化你的精灵,你稍后将看到如何操作。
  • PAGC Frontend.exe,工具的GUI界面,请马上打开它。

如果出现了出错提示,那是因为你没有安装.net框架,请下载
现在,打开GUI工具,看到界面如下:

http://www.palib.info/wiki/lib/exe/fetch.php?w=&h=&cache=cache&media=http%3A%2F%2Fwww.palib.info%2FScreens%2FPAGC1.png

下面就是设置背景色,添加精灵文件,然后转化。(译:使用过程中可能出现异常,我换几个bmp文件试试,结果又好了)

你可以看到转化后产生如下文件:

  • SpriteName.c是包含全部精灵信息的文件,将被用于将精灵调入内存。
  • SpriteName.pal.c包含着调色板,有它你就能使用正确的颜色将精灵调入内存。
  • all_gfx.c是个很酷的文件。它实际上是链接了所有的精灵,背景,调色板。
  • all_gfx.h包含了精灵的数据,后面会提到

PAGfx.ini


对那些好奇的人们,你现在可以检查一下由GUI工具创建的PAGfx.ini。。。如果你只想用GUI工具,那么请跳过此节

(译:因为我只想用GUI工具,因此我跳过,见谅。)

PAlib精灵


我们深入浅出地学习,先试试把基本的精灵显示到屏幕上来看看。后面的教程会继续教你如何旋转和放大精灵,设置透明度和动画。保持耐心。

显示


我们最终真正使用DS硬件的时机来啦!嘎嘎嘎!我好邪恶!下面欢迎显示精灵教程登场。。。

下面的例子是重PAlib 0.72a版本中提取,因为我在这个版本中更新了精灵。。。请在开始之前确保安装了这个或更高的版本,否则就玩不转了。

打开PAlibExamples/Sprites/Sprite目录,并看一下main.c的代码:

#include <PA9.h>
// PAGfxConverter Include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
int main(void){

        PA_Init(); //PAlib inits
        PA_InitVBL();

        PA_LoadSpritePal(0, // Screen
0, // Palette number
(void*)sprite0_Pal);        // Palette name

        PA_CreateSprite(0, // Screen
0, // Sprite number
(void*)vaisseau_Sprite, // Sprite name
                        OBJ_SIZE_32X32, // Sprite size
1, // 256 color mode
0, // Sprite palette number
50, 50); // X and Y position on the screen
while(1) // Infinite loops
{
                PA_WaitForVBL();
        }
return 0;
}

入你所见,看看注释就明白了!我也不想重新介绍第一天已经介绍的东西(请复习模板编码的部分),因此假设你已经明白了。

// PAGfxConverter Include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

这一部分include你已经转化完成的图像,没什么可说的了(你可以看看这个gfx/目录里面都有些什么)

PA_LoadSpritePal(0, // Screen
0, // Palette number
(void*)sprite0_Pal);        // Palette name

这部分很重要:它装载了精灵!它把精灵调色板加载到0号屏幕(下屏幕)的0号调色板上。。。不要管在调色板名称前的(void*)字样,它仅仅用于指定调色板的位置。。。如果你的精灵显示不出来,那么首先就要看看是不是忘了调色板!而且,请注意调色板号不要搞错了(要知道一共有16个调色板呢)

PA_CreateSprite(0, // Screen
0, // Sprite number
(void*)vaisseau_Sprite, // Sprite name
                OBJ_SIZE_32X32, // Sprite size
1, // 256 color mode
0, // Sprite palette number
50, 50); // X and Y position on the screen

这个例子真是非常简单,让我一项一项解释一下。

  • 第一个参数是0号屏幕(下屏幕)。。。如果你试图在上屏幕装载精灵,它不会被显示出来,为什么呢?因为调色板是装载在下屏幕的!
  • 第二个参数是精灵编号,就象前文所说,DS在一个屏幕上可以显示128个精灵,编号从0到127。每个你创造的精灵,你都可以制定它的编号,有了编号,我们就能找到对应的精灵从而对它进行各种处理。编号的作用不止如此,它还决定了精灵之间的前后关系(0号精灵将遮住其他所有精灵,1号精灵能遮住0号以外的其他所有精灵,依次类推),越小的编号越在前。
  • 下面是对象大小,它由长和宽组成,用起来有点复杂,因此PALib定义了一些宏来方便使用(以OBJ_SIZE开头)。。。如果不清楚有哪些尺寸可用,请翻到这个教程的开头。。。
  • 下面是颜色模式。只有2个值可选:0为16色,1为256色。实际上只用256色。
  • 下面是调色板编号。例子里面是0。。。如果你选择了错误的调色板编号,那么你会看到你的精灵的颜色是多么地漂亮(使用了其他的调色板)或者压根看不到精灵(选中了没有加载的调色板)。使用的时候请多注意。
  • 下面是X坐标,Y坐标。精灵的左上角的坐标。

基本上所有的东西都已经理解了吧!那么让我们运行build.bat,并打开DS或DS模拟器。。。。因为你的死循环 (while(1)…) 里面没有任何代码(除了VBL以外),你的精灵将会呆在那里动也不动。

在进行下一步之前,你可以试试修改一下例子,让精灵出现在上屏幕,然后出现在上下双屏幕上。。。

(译:待续。。。)

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/9235;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签: ,

NDS开发Wifi翻译:第四天:精灵(1)

2006年6月16日 没有评论

这里将介绍如何使用PALib显示精灵(译者注:精灵指把画面可以移动的物品,把画面分割成多个精灵有利于设置互动)

DS精灵说明


在开始使用精灵之前,让我们看看DS适合做什么事情。。。他能在一屏上显示128个不同的精灵,上下屏加一起就是256个!每个精灵可以被水平或垂直翻转,能够被到处移动,能动画化(通过更换精灵的图片来做到),能半透明,甚至能够变成mosaic(译:不懂)!在以上的基础上,精灵们还可以被旋转或缩放!但是,有点小小的限制。。。。你不能对每个精灵单独指定旋转和缩放参数,在同一屏幕上只允许定义32种旋转和缩放(以下简称旋缩)参数。那么每个精灵可以旋转、缩放、或者边旋转边缩放,但是同时只能有32种不同的方式。几个精灵可以分享有个旋缩方式,这不是问题,他们将以同样的方式进行选择和缩放。

DS屏幕尺寸


这里有一个bennnyboo做的不错的小图,蛮有用的。。。不管是对精灵而言,对背景和其他一切都有用。

http://www.palib.info/wiki/lib/exe/fetch.php?w=&h=&cache=cache&media=http%3A%2F%2Fwww.palib.info%2FScreens%2FDS%2Fds_screen.jpg

既然要讲精灵,就需要知道屏幕的尺寸。。。256象素快,192象素高。注意第一个点的编号不是1而是0,屏幕实际为1-255和0-191。。。就像图上显示的那样。

提一句,精灵的位置被限制在一定的值以内。X坐标范围为0-511,而Y坐标范围为0-255。这意味着如果精灵的X坐标为512,那么等同于把把这精灵放到X坐标为0的地方。这就是所谓的卷屏。当坐标到到最大值时,它就跑到另一边了,反之亦然。

颜色模式


现在,关注一下颜色问题。。。精灵能够有3种不同的颜色模式

  • 16色调色板,每屏幕可显示16种调色板。(译:实际可显示的颜色为16×16=256色)
  • 256色(不错,但需要使用双倍的内存),每屏幕可显示16种调色板。(译:实际可显示的颜色为256×16色),这是最常用的模式。。。。
  • 16位色的精灵,没有调色板!而且这些精灵不能使用太多,因为它们占用了太多的内存了。

总结一下,最好的方式就是256色,虽然看起来有点少,实际上效果还不赖。

精灵的尺寸


DS能处理不同尺寸的精灵,但是实际支持的精灵尺寸是并不能随心所欲。尺寸允许的宽度和高度为8,16,32,64。某些特定的尺寸还不支持,具体看下面的表格。(横里面是宽度,竖里面是高度)

8 16 32 64
8 8×8 16×8 32×8
16 8×16 16×16 32×16
32 8×32 16×32 32×32 64×32
64 32×64 64×64

那么,如果用了不允许的尺寸会发生什么呢?你会看到丑到不能看的精灵。。。有个简单的方法可以规避这些限制。加入你希望使用48×48的精灵,那你就把它的尺寸设为64×64好了。

透明色


我想你不会希望精灵的背景色也被显示出来。。。如果你有一个圆圆的精灵,好像飞盘,你肯定不会希望把方方的边框一起显示出来。为了把背景去掉,就要用到背景色了。最好的背景色是洋红色(红: 255, 绿 : 0,蓝 : 255),因为你很少会用到这种颜色,有人喜欢用黑色,但是我经常在做一些黑色的精灵,我还没有找到比洋红色更好的选择呢。。。

(译:待续。。。。)

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/9234;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签: ,

NDS开发资源

2006年6月16日 1 条评论

这个世界上永远充满了惊喜:看,早上刚刚发现的NDS的开发指南。

http://www.ndsbbs.com/read.php?tid=24026

以前买了GBASP的时候也曾经试着开发可以在上面跑的程序。因为对C不熟练,所以最后放弃了。

估计这次也是一样。不过研究一下也好。

刚刚把开发环境自带的例子编译了出来。

实际上NDS开发比GBASP门槛要高,没有成熟的模拟器,经验缺少。估计也就只能玩玩。

如果真的想做的话,估计至少要专心学习1个月,然后用1个月练手,唉。太困难了。

还是J2ME好,从上手到做出俄罗斯方块好像也就花了几天时间吧。

不过反过来说,越是简单的东西越不值钱。好希望去做硬件单板啊。

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/9233;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签: