09、开源游戏-“胡子”开始游戏前03-总结

穿精又带淫゛_ 提交于 2020-03-01 10:05:51

这几天我们干了很多事,我们总结一下。

首先,设计了游戏的选择界面、操作主界面,虽然很粗糙,但是只要你看了就知道他代表的意思,以后在具体实现时我们会在雕琢一下。

接着,我们做了主页index.html,罗列了很多的div,来实现界面的效果。

最后,我们写了很多的js,来实现不同的功能。

在前面我们细说了每个js的功能,但是如果你注意的话,我们唯独没说其中的game.js,是这个js不重要吗?我们看下他的代码

var game = {
	init:function(){
	},
    start:function(){        
    }
}

几乎什么也没有,但它确实最重要的一个js,如果要比的话,我想他应该是大当家(在没有nodejs时),呵呵。其他的js都被它使用,它控制着游戏的逻辑。

        开发游戏虽然复杂,但它的原理却出奇的简单,就是循环或者绘制擦除重复这2步,为什么说这个呢?因为胡子的game.js也是这样绘制擦除循环这步,来完成建筑物、车辆、人员、子弹的绘制,这个会在以后具体说明,胡子是一个即时战略游戏,我可以保证胡子不是那种简单的即时战略,起码也有红色警戒最核心的功能(呵呵,我的目标),就是说他绘制的单位会很多,我们粗略分几类起码有建筑物类、车辆类、兵(人)、资源类、其他类(树木、石头等)等,所以如果用game.js来绘制所有这些,肯定不是一个好的做法。

        我本身是是搞java的,java的面向对象,即使没弄过java的也肯定听说过,为什么说java呢?也许是java用的久了吧,影响我的想法也最大,所以很自然的就会按照java的思路去想,java解决问题的办法接口、抽象类,然后继承,接着模式,我们举个例子,像系统的日志、鉴权等他们属于系统,但又是业务逻辑之外,实现他们有很多做法,如果你看过aop,他的例子或切入点,很多都说日志,然后用aop怎么去做,其实不用aop也可以实现类似的动态织入功能,如使用装饰模式,我们写多个装饰类,然后把它们组合,类似new 装饰类A(new 装类类B(new 被装饰的类)),这样就动态的织入了a和b功能。

        说这么多,其实我想用java的思路去解决game.js的问题,即继承和重写,实现一个父类的绘制功能,然后前面说的那些分类单位继承它,并在需要时去重写成自己的绘制方法,呵呵,我觉得这是一个好的想法,当然我在群里也说过,我是游戏开发的小白,大家有好的办法请多多指教,我悉心接受,早日脱白。虽然我们还处在游戏的初始化阶段,但是我们已经到尾声了,所以上面的事情,我们必须考虑。

        我整理一下思路,我们开发了一个用户选择界面,并在用户选择大当家时,我们初始化游戏资源,这样能偷偷的读取资源,而不是一个loading条,然后玩家选择开始后,我们读取当前任务的资源,并显示当前任务的简介,虽然loading条不可避免,但是让玩家看看任务简介,时间也过的快些,一些游戏还在loading时做了小游戏。我们用本地存储保存了玩家信息,同时也把当前任务保存在了game.js中,如下代码

game.currentTask = currentTask;
game.currentMapImage = resourceloader.loadImage(currentTask.mapImage);

而且也要把当前任务保存到本地存储中,这样玩家退出后,可以随时接着玩游戏,当然了我们精度只能是当前任务(不是任务中),然后我们需要完善下singlegame.js的代码,如下

var singlegame = {
    init:function(){
		$('#loadingscene').show();
		var currentTask = task[store.get('data').task];
		$('#progresstip').html('<strong>'+currentTask.name+'</strong><br/>'+currentTask.briefing);
		game.currentTask = currentTask;
	    game.currentMapImage = resourceloader.loadImage(currentTask.mapImage);
	    
	    if (resourceloader.loaded){
	        singlegame.start();
	    } else {
	        resourceloader.onload = singlegame.start;
	    }
    },
    start:function(){
		//待续
		//$('#loadingscene').hide();
		//$('#gamescene').show();
    },    
    exit:function(){
        
    }
};

1是现在当前的任务信息太少,2是start里或init里,还需要增加其他内容的初始化,如主界面、地图、建筑物(红色警戒默认是基地的,咱们也是如此),还有鼠标事件的绑定,如鼠标左键绑定为选择单位事件,右键绑定为移动命令事件,还有拖拽鼠标时的选择多个车辆等的事件,细想其实我们有很多的东西,都需要初始化的,但是我想我是一次想不全的,所以我们只做1、2个的初始化,如地图和建筑物,然后我们再添加其他的如鼠标事件等。

        地图的制作,不知道大家是怎么做的,那种动态生成可以实现吗?(类似红色警戒的地图生成)我现在想法是用tiled自己去画,之前找了很多资源,哎,想在群里问问网友,哪有好的资源网站,结果被告知,百度,结果真找到不少,呵呵。我想用tiled画好后,保存成图片,然后在代码中使用,就像这样

game.currentMapImage = resourceloader.loadImage(currentTask.mapImage);

大家说的60帧速,我没有太大的概念,大家有好的办法告诉我下,还有我看BrowserQuest的地图,就不是图片,而且那地图很大,说可以无限大,这个只看有网友说是地图拼接,有知道的也告诉我下,好羡慕那种啊。

        建筑和车辆等的绘制,也比较棘手,我对图片的处理,只能说略懂,所以这些图片,我想得耗费不少时间。还有更棘手的寻路、碰撞,这个留到以后把。

        下一步我们做的就是完善好init和start方法,然后弄好地图,并绘制出来,再把建筑物(默认的)绘制出来,并把用户的选择的大当家信息初始化到主界面中,然后就是设计主界面的内容,包括建筑物、车辆、小地图、金钱、选择单位后的显示信息等。最后完成造四梁八柱、崽子(兵),建设建筑物,生成坦克、轻型装甲车等,并可以命令他们一些行为,如红色警戒中的移动、跟随、巡逻。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!