eebbk163 eebbk163
关注数: 34 粉丝数: 111 发帖数: 4,561 关注贴吧数: 3
向大家推荐一款游戏源码 怎么说呢,我要推荐的这款游戏源码是十多年前别人写的。虽然画面掉渣,但是我还是非常喜欢,因为它具备了RPG需要的基本元素。作者还写了一篇文章叫如何制作自己的RPG。我几年前就知道这个游戏了,这个游戏叫圣剑英雄传2,最重要的是代码是开源的。不过我已经忘记了我开始是怎么知道这款游戏的。以前可能自己自己用的VC++6.0有问题,或者是那个DX SDK没装对,导致编译一直出错。但是自己开始用codea编程后,始终对这游戏恋恋不舍,因为自己确实比较想做个RPG玩玩,吧友们也向我推荐过RPG Maker这样的制作软件,但是我更想知道它是怎么的运行的。前两天看到一个windows下如何安装VC++6.0,又无意搜索到如何解决圣剑英雄传2源代码在VC++6.0下的运行问题。自己昨晚抱着试试的态度,因为我已经失败过很多次了,这次是侥幸心理。看到编译时下面出现0 error 0 warning的时候,心理莫名其妙的激动。刚刚又试了下程序捆绑的地图编辑器,蛮好的,这正是我想要的。突然对做RPG游戏又有了激情。哈哈! 不过这也意味着我需要好好学习C++和其相关的东西。因为大部分代码我都看不懂。虽然以前写过一些程序,但是从来没在VC++6.0上写过可以运行图像的程序。程序中也有存在足的,比如不能斜方向走的,不过我还是很满足啦!非常崇拜这游戏的作者,虽然他们当时是业余团队。 如果想学习,想了解RPG的制作的话,可以参考下这个程序,或许会有惊喜哦! 当然你需要以下几点 1、圣剑英雄传2的源代码和相关资源 2、需要VC++6.0 3、需要解决编译问题 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fblog.csdn.net%2Fgaofei880219%2Farticle%2Fdetails%2F4244669&urlrefer=bdc3daf839140ce8422b6ca6a6da8b7d
实力程序中噪音程序相关疑问 首先我对noise的解释就不大清楚,再者就是应用。在程序写了自己不明白的地方,求好心吧友解答下。 supportedOrientations(LANDSCAPE_ANY) function setup() -- Expose some parameters to control our noise parameter.number("noiseScale", 1/30, 1, 1/5) parameter.number("noiseSpeed", 0.05, 1, 0.2) -- How big each grid square is tileSize = WIDTH/24 -- "Position" in the noise field noisePos = vec2(0,0) -- This initializes our 2D array of noise values tiles = {} for x = 1, WIDTH/tileSize do tiles[x] = {} for y = 1, HEIGHT/tileSize do tiles[x][y] = noise(x * noiseScale, y * noiseScale) --noise的介绍是在指定的x,y,z处,生成-1.0到1.0的值。那上面这行代码是代表啥意思?我看不太懂。在x*noise,y*noise的地方生成-1.0,-1.0的值么?好像没有道理啊! end end end -- This function updates our 2D array of noise values function moveNoise() for x,column in pairs(tiles) do for y,value in pairs(column) do tiles[x][y] = noise(x * noiseScale + noisePos.x, y * noiseScale + noisePos.y) --这一行一定后生成新的值,但是意思我还是没看懂。对noise的介绍不清楚 end end end function draw() background(0, 0, 0, 255) -- Disable stroke and smooth noStroke() noSmooth() -- Iterate through our noise values and -- render a rect() for each value for x,column in pairs(tiles) do for y,value in pairs(column) do fill((value+1)*0.5*255) rect((x-1)*tileSize, (y-1)*tileSize, tileSize, tileSize) end end -- Update the noise position noisePos = noisePos + vec2(0.5,0.3) * noiseSpeed -- Update all the noise values moveNoise() if tiles[2][3]> 0.65 or tiles[2][3]<-0.65 then print(tiles[2][3]) end --这个判断是我加的,但是我发现最大也没超过0.8,最小也没小于-0.75 end
自动寻路程序 下午花了好几个小时在搞这个自动寻路程序。之前我在我的小制作里面的发过一个寻路的演示程序。不过那里面有些BUG,比如在换向过程中会出现角色位置突然变化和角色会跑到地图外的情况。下午我就是主要就是解决这两个问题,修改过程还是挺郁闷的。比如A*算法,对于行列的定义我觉得是比较纠结的问题。然后我把A*里面的行列改成符合我编程习惯的样子。以前A*算法就是从左到右,从上到下。而我们的屏幕像素的位置是,从左到右,从下到上。还有程序中,math.floor和math.ceil的选择。我也纠结了些时间。不过在实际应用中,感觉math.ceil效果会好些。还有就是表中起始位置的问题,我因为选择了起始位置是1又用了math.ceil,在程序里就看到很多+32和-32的操作。在云编程里搞了下,以前的中文注释全部编程乱码,我只想说,真坑爹啊!还碰到用or来判断不起作用,但是用and却起到作用的情况。以我的理解两个判断应该都会起作用才对。搞的浪费我不少时间。 在CRole类中,有几个parameter.watch是用来监控些关键变量,看看哪里出错。不过有点比较坑爹的是我写成"self.State.xx"居然说这样有问题。搞得我还得把变量换成别的形式。 在CRole类中的move函数,我觉得写的好像太过麻烦了,有哪位帮忙看看哪里可以优化的。程序中的自动寻路A*算法,如果你没了解过的话,要理解起来需要花些时间,几个月过去了,A*算法的一些具体步骤我都不大记得了,看些那程序我都有些搞不懂了。 后面的话准备做一个可以移动的地图,跟bk也讨论过。比如,一个地图是屏幕的几倍大,角色通过移动看到全部的地图。自己有了些初步的想法。后面在搞。具体就是把简单的题图搞在一张图片中。比如map = image(2*WIDTH,2*HEIGHT),然后根据角色的位置来确定要显示那些图。用image:copy的方式获取要显示的图。 个人感觉这样应该是可以实现的。 程序比较乱,而且感觉在移动的那块程序应该是可以简化的,我写感觉很繁琐的样子。希望各位有意见可以指出。地图中白块是可以移动的,黑块代表障碍物。你点击某个点时,你会看到那个小人物会自动寻找一个最佳路径走到你点的地方。(他走的时候会避开那些障碍物,还有走路的动作,还是有点意思的)。不过在连续点的时候,会出现小小的卡顿情况。我不知道是怎么回事。 好了就这样了,有兴趣的自己先看看吧。
3D光照翻译篇,不定期更新 在翻译教程前,聊聊闲话。觉得咱们这个吧人数还是偏少的,参与讨论的人不多。不过这也是有原因的。首先你要有ipad,我没买ipad之前可从来没关注过这个吧,也不知道有codea。另外就是你会买codea。当时我看到这款软件的时候,看介绍还不错,挺想买的。一看价格68元。让我拖了一阵子才买的,其实我是犹豫要不要学,贵只是小因素。当然现在有免费版本的,这也算是福利了吧。再者就是你会去研究codea。现在编程软件比较多,不一定就要执着于codea,可选的很多。我是买了ipad之后比较懒用电脑了。看codea可以编程,就直接在上面写写。 在codea上写代码之前,我已经很久没写过代码了。后来看到贴吧里AK写的扫雷的时候,感觉不错,我还问他是不是计算机的。后来才知道只是高三的学生。我想高三的学生通过不断的学习都能达到这样的水平,说明只要你想学是肯定没有问题的。学习是一个慢慢的过程吧。 刚开始接触的时候真的是挺郁闷的。以前学过C,C++,但都不怎么记得了。另外就是lua与C,C++有些不同之处,还有就是没有用过codea。这些让我刚在codea上编程的时候麻烦不断。在我的小制作中,最开始有个碰撞球的程序是AK帮我改的。后来在HexBlues分享Ignatz后,经过细细的研究生。让我更了解如何在codea上编程。 如果Ignatz教程的阅读顺序,我们依次需要了解的东西有 1、lua的基础 你需要了解变量、关键字、条件语句、循环语句、表、类的用法。在这里表的用法真的很灵活。而类是大型程序中都需要的。所以表和类的使用会是基础中的难点 2.codea入门 Codea有哪些?你可以在使用帮助中看到。 你可以看到绘图、mesh、向量、动画、物理、网络、存储等。这些可以慢慢来学,培养兴趣。可以参考相关的教程。一般教程帖子可以在指定的帖子找到相关的链接或者在精品贴中找到。 3.Codea中的3D 想学习3D,需要你有一定的编程基础懂一些mesh。在贴吧里有相应的教程。大家可以琢磨。 4.Codea中的shader Shader这个东西我现在还没怎么研究,大概看了下。这个HexBlue翻译过,翻译的很详细。Shader是放在3D之后看的。Shader会用到一些C语言,而且Shader中一出错的话,屏幕就会一片空白,而且没有语法错误提示(教程上是这么说的)。 所以的话要研究Shader的话就先提高下自己的编程能力,熟悉codea。不然会很痛苦。但是Shader可以做一些很有趣的事情,有时候很有帮助。 5.3D中的光照 这个是放在最后看的。难度貌似是最大。需要了解3D和shader。这个暂时没有看,所以不发表评论。但是呢,我会尽力找这个教程翻译完,不定期翻译。这算是codea中比较高级的内容了。我也会分享Ignatz的教程给大家。是英文的噢。 大家也可以看看,提高自己的英语能力。
3D教程翻译篇 作者Ignatz 我刚接触codea的时候很不了解,不怎么会用。画个图,写个程序的也老出错。后来HexBules给我分享了下Ignatz的教程。我感觉挺有用的。虽然有时候花很多篇幅来解释简单的事情,但我想这也是为读者考虑。今天有兴趣重温下Ignatz写的3D教程。顺便翻译下,大家也作为参考。 虽然有人写过3D教程,但感觉说的不怎么全。 现在还没翻译完。我会尽量翻译完。不过里面提到一个Gimbal lock的概念,说实话没看懂。所以到时候这部分我也不翻译了。 3D教程篇 1、介绍 3D是非常有意思但同时又非常有挑战性。你在codea上做什么有明确的限制,一部分是因为平板电脑处理器,一部分是因为3D种类,你所看到的现在游戏要求工作人员忙于不同种类的软件包。 但是只要我们让事情保持相当简单,我们就可以用codea来学习很多的3D编程。 在我们开始之前,你需要知道哪些? 3D不是针对初学者。 通常,你需要让用lua编程对你来说是比较舒适的事情,它会让你了解一些关于meshes的知识。 如果你擅长数学,那事情会变得更简单,但这不是必须的。我不会让这种事情让你退缩。如果你喜欢学习3D而且你有一些编程经验,那让我们开始吧。 2D和3D的不同 当我们在2D中编程,它就像是在一张纸上画图。不管你怎么拿着这张纸,不管你用什么角度去看它,图像看想起相当一致。因此,我们在(x,y)上画一些东西,它总会在屏幕的相同位置画出来。 现在看着窗外。它可能看起来像一幅画。但是当你移动你的脑袋,外面一棵树似乎正朝着小汽车移动。而且如果你向侧边移动,外面的景观也会发生变化。因此我们看到的不同景象取决于我们站在哪里。 而且在3D图形中,屏幕就像在另一个世界上的窗户。你告诉codea(实际上是OpenGL) 东西在你世界的哪个位置 如何去画他们(在2D或者3D) 你在哪里并且你所看的方向(摄像头) 然后OpenGL计算出你将看到什么并且在屏幕上把它画出来。可以想象,这并不容易。 物体在3D空间的位置 注意:尽管这不是很困难,但解释相当长。但最后,你会看到代码相当简单,所以你不要气馁。 在2D,你总是坐着屏幕的前面。实际上你坐哪里不重要,因为图像看起来一样。就像你无论从哪个角度来看ipad的屏幕,看起来都一样。因此Codea不需要知道你在哪里,不需要知道观察者。 在3D,我们能看到什么取决于我们站在哪里。就像我上面解释的。因此我们需要告诉Codea我们切确的位置。这意味着给它x,y,z值。 但是x和y值可能不是你期待的。 在Codea的2D世界。X,y都为0的时候是在左下角。把他们增加到最大值就是屏幕的右上角。但是这在3D世界是不管用的。因为屏幕像是在我们前面的一个窗口。而且我们转动我们的相机,画面也会随之改变,左下角的位置在发生变化。 我们需要让x和y总之代表一样的事情,而且不会因为我们移动而受到影响。而且我们也需要包含z(深度)在3D中。 OpenGL(codea和ipad的画图引擎)要做的是在空间定义一个点,像0,0,0(给x,y,z)。 这个点在哪里不重要,这仅仅是我们3D世界的中心点。 重要的是,如果我们在x=300,y=20,z=200的位置放置一个物品,OpenGL要知道相对于0,0,0来说它在哪里。 假设我们现在正站在0,0,0的位置,任何方向的空间都没有物体。我们想画一些物体在我们的世界里。那我们该怎么去放置呢? 你可以把它放在任何你想放置的地方,这看你怎么去做。 在x坐标(左/右),你可能定义你的世界的中心为0,例如一些物体将会在0的两侧。 在y坐标(高度),0是地面等级(如果你有地面),因此位置y就是相对于地面的高度。这相当符合逻辑。 在z坐标(深度),在z的正半轴画上你的物体(物体越远,z值就越大)。 因此我们在画一系列物体,总共占的空间为200像素宽,100像素高和400像素深,可能我会把他们画在x=-100到x=+100,y=0到y=+100,和z=0到z=+400.
1 下一页