开言:以前lufy前辈写过叫“ html5游戏开发-零基础开发RPG游戏”的系列文章,在那里面我学习了他的引擎以及了解了游戏脚本。自从看了那几篇文章,我便对游戏开发有了基本的认识。今天我也以零基础为视点,为大家讲述如何开发一款简单的游戏。希望大家看了这篇文章,能使你对理解游戏开发有帮助。 你可以先测试一下游戏: http://lufylegend.com/lufylegend_developers/yorhom_Christmas/index.html

1,如何进行游戏开发
1.1游戏开发思想本文依然要运用OOP思想(Object Oriented Programming,面向对象编程),毕竟它很重要,很方便。 首先,为了让大家了解游戏开发的一些思想,我不妨说一下我对游戏开发的理解: 在游戏开发中,不是需要一个角色就要去立刻手动建设一个角色的。倘若是一个不断变化的游戏,用手慢慢改,那还不得累死。因此我们就需要用到循环或者时间轴事件。具体用循环还是时间轴事件,要看你是如何设计游戏。循环不要说,我们主要说说时间轴事件。 时间轴事件相当于一个循环,在它内部要执行的内容会不断地执行,也就是说是一个死循环。既然是死循环,那要改变游戏里的内容就会变得相当简单。只需要在外部更改界面上的属性,然后在时间轴事件内不断判断属性,执行变化即可。 1.2类的使用另外还需要注意的是,游戏开发需要用到类。javascript定义类很简单,只用定义一个函数就行,属性用this来加。如下: - function people(){
- this.name = "yorhom";
- this.age = "13";
- }
类的作用很大,加入有界面上有3个角色,我们只用循环3次,每循环一次就用局部变量来实例化一个角色类即可。类操作里面比较重要一项的就是继承。比如说在lufylegend.js中,如果你的类继承自LSprite类,那就拥有show方法,到时候你在使用你的类时,只用更改属性,不用手动重绘就可以更新界面。除了方便以外,它还可以替你免去一些多余的代码。假如父类有个加鼠标事件的方法,而子类想要也,那就不需要在重新写一遍了,直接继承就行了。 2,开始游戏开发
2.1开发准备由于本次开发用到了lufylegend.js开源引擎,所以首先需要下载它。 下载地址:http://lufylegend.com/lufylegend API 文档:http://lufylegend.com/lufylegend/api 另外,由于是html5游戏,所以你需要一个支持html5的浏览器。当然,如果你已经有了这样的浏览器,那就直接开始吧。 2.2开始编程首先来看一下Main.js。首先定义一些层变量: - var backLayer,
- loadingLayer,
- logoLayer,
- sceneLayer,
- snowLayer,
- stageLayer,
- charaLayer,
- overLayer,
- gameoverLayer;
另外一些闲杂变量:- var point = 0,time = 1000*30;
- var showTime;
- var plopSound,backSound;
- var playerName;
- var pointText,timeText,resultText;
还有几个散乱的家伙藏在角落里,也被我给找到贴出来:- var snowingSpeed = 0;
- var snowingSpeedIndex = 20;
- var snowChildList = [];
- var canSnowing = true;
- var showChara = false;
接下来初始化引擎 - init(50,"mylegend",600,400,main);
- LSystem.screen(LStage.FULL_SCREEN);
init是引擎初始化函数,用法如下:------------------------------------------------------------------------------
init( speed, divid, width, height, completeFunc, type )
■作用: 库件初始化 ■参数: speed:游戏速度设定 divid:传入一个div的id,库件进行初始化的时候,会自动将canvas加入到此div内部 width:游戏界面宽 height:游戏界面高 completeFunc:游戏初始化后,调用此函数 type:当为null时,会先进行页面的onload操作,如果你的init函数调用是在onload之后,那么需要将此参数设为LEvent.INIT ------------------------------------------------------------------------------
LSystem.screen是一调整屏幕大小的方法。如果参数写LStage.FULL_SCREEN说明调整为全屏。 接下来是加载图片: - var imglist = [];
- var imgData = [
- {path:"./js/gameLogo.js",type:"js"},
- {path:"./js/Charactor.js",type:"js"},
- {path:"./js/Stage.js",type:"js"},
- {name:"player",path:"./images/airplane.png"},
- {name:"logoback",path:"./images/logoback.jpg"},
- {name:"background",path:"./images/background.png"},
- {name:"house",path:"./images/house.png"},
- {name:"costume0",path:"./images/costume0.png"},
- {name:"costume1",path:"./images/costume1.png"},
- {name:"costume2",path:"./images/costume2.png"},
- {name:"costume3",path:"./images/costume3.png"},
- {name:"costume4",path:"./images/costume4.png"},
- {name:"costume5",path:"./images/costume5.png"},
- {name:"costume6",path:"./images/costume6.png"},
- {name:"costume7",path:"./images/costume7.png"}
- ];
上面是加载图片列表,以下是加载时用的代码:-
- LLoadManage.load(
- imgData,
- function(progress){
-
- loadingLayer.setProgress(progress);
- },
- function(result){
- imglist = result;
- removeChild(loadingLayer);
- loadingLayer = null;
-
- gameInit();
-
- addLogo();
- }
- );
将以上代码写到main函数中,就可以实现加载图片了。LLoadManage类是lufylegend中一个加载图片的类,用它可以方便地加载图片。用法如下:------------------------------------------------------------------------------ load($list,$onupdate,$oncomplete)
■作用: 读取文件组 ■参数: $list:文件数组 $onupdate:读取中调用函数,一般用来显示游戏进度 $oncomplete:全部文件读取完成后调用函数 ■详细说明: 这个函数可以接收一个数组,然后加载数组里的所有文件 ------------------------------------------------------------------------------这样做的好处是可以在使用图片时更方便,只用写path对应的name上去就行了。 整个main函数代码如下: - function main(){
-
- loadingLayer = new LoadingSample3();
- addChild(loadingLayer);
-
- LLoadManage.load(
- imgData,
- function(progress){
-
- loadingLayer.setProgress(progress);
- },
- function(result){
- imglist = result;
- removeChild(loadingLayer);
- loadingLayer = null;
-
- gameInit();
-
- addLogo();
- }
- );
-
- plopSound = new LSound();
- var plopUrl = "./sounds/plop.mp3";
- plopSound.load(plopUrl);
-
- backSound = new LSound();
- var backsoundUrl = "./sounds/back_music.mp3";
- backSound.load(backsoundUrl);
- }
在上面的代码中,我用LSound类加了背景音乐,这样一来顺便试一下新功能。看看gameInit里代码:- function gameInit(){
-
- initLayer();
-
- backLayer.addEventListener(LEvent.ENTER_FRAME,onframe);
-
- backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,onmousedown);
- }
initLayer和onmousedown中的代码:- function onmousedown(event){
-
- plopSound.play();
- if(showChara == true && stageLayer.childList.length < 6){
-
- addStage();
- }
- }
- function initLayer(){
-
- backLayer = new LSprite();
- addChild(backLayer);
-
- logoLayer = new LSprite();
- backLayer.addChild(logoLayer);
-
- snowLayer = new LSprite();
- backLayer.addChild(snowLayer);
-
- sceneLayer = new LSprite();
- backLayer.addChild(sceneLayer);
-
- stageLayer = new LSprite();
- backLayer.addChild(stageLayer);
-
- charaLayer = new LSprite();
- backLayer.addChild(charaLayer);
-
- overLayer = new LSprite();
- backLayer.addChild(overLayer);
-
- gameoverLayer = new LSprite();
- backLayer.addChild(gameoverLayer);
- }
|