设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

html5游戏开发-零基础开发《圣诞老人送礼物》小游戏

2013-6-3 15:00| 发布者: 红黑魂| 查看: 4322| 评论: 0|来自: CSDN博客

摘要: 原文:PHP Best Practices-A short, practical guide for common and confusing PHP tasks译者:youngsterxyf最后修订日期维护者本文档最后审阅于2013年3月8日。最后修改于2013年5月8日。由我,Alex Cabal,维护该文 ...

开言:

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

你可以先测试一下游戏:

http://lufylegend.com/lufylegend_developers/yorhom_Christmas/index.html



1,如何进行游戏开发


1.1游戏开发思想

本文依然要运用OOP思想(Object Oriented Programming,面向对象编程),毕竟它很重要,很方便。

首先,为了让大家了解游戏开发的一些思想,我不妨说一下我对游戏开发的理解:

在游戏开发中,不是需要一个角色就要去立刻手动建设一个角色的。倘若是一个不断变化的游戏,用手慢慢改,那还不得累死。因此我们就需要用到循环或者时间轴事件。具体用循环还是时间轴事件,要看你是如何设计游戏。循环不要说,我们主要说说时间轴事件。

时间轴事件相当于一个循环,在它内部要执行的内容会不断地执行,也就是说是一个死循环。既然是死循环,那要改变游戏里的内容就会变得相当简单。只需要在外部更改界面上的属性,然后在时间轴事件内不断判断属性,执行变化即可。

1.2类的使用

另外还需要注意的是,游戏开发需要用到类。javascript定义类很简单,只用定义一个函数就行,属性用this来加。如下:

[javascript] view plaincopy
  1. function people(){  
  2.     this.name = "yorhom";  
  3.     this.age = "13";  
  4. }  
类的作用很大,加入有界面上有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。首先定义一些层变量:

[javascript] view plaincopy
  1. var backLayer,  
  2. loadingLayer,  
  3. logoLayer,  
  4. sceneLayer,  
  5. snowLayer,  
  6. stageLayer,  
  7. charaLayer,  
  8. overLayer,  
  9. gameoverLayer;  

另外一些闲杂变量:

[javascript] view plaincopy
  1. var point = 0,time = 1000*30;  
  2. var showTime;  
  3. var plopSound,backSound;  
  4. var playerName;  
  5. var pointText,timeText,resultText;  

还有几个散乱的家伙藏在角落里,也被我给找到贴出来:

[javascript] view plaincopy
  1. var snowingSpeed = 0;  
  2. var snowingSpeedIndex = 20;  
  3. var snowChildList = [];  
  4. var canSnowing = true;  
  5. var showChara = false;  

接下来初始化引擎

[javascript] view plaincopy
  1. init(50,"mylegend",600,400,main);  
  2. 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说明调整为全屏。

接下来是加载图片:

[javascript] view plaincopy
  1. var imglist = [];  
  2. var imgData = [  
  3.     {path:"./js/gameLogo.js",type:"js"},  
  4.     {path:"./js/Charactor.js",type:"js"},  
  5.     {path:"./js/Stage.js",type:"js"},  
  6.     {name:"player",path:"./images/airplane.png"},  
  7.     {name:"logoback",path:"./images/logoback.jpg"},  
  8.     {name:"background",path:"./images/background.png"},  
  9.     {name:"house",path:"./images/house.png"},  
  10.     {name:"costume0",path:"./images/costume0.png"},  
  11.     {name:"costume1",path:"./images/costume1.png"},  
  12.     {name:"costume2",path:"./images/costume2.png"},  
  13.     {name:"costume3",path:"./images/costume3.png"},  
  14.     {name:"costume4",path:"./images/costume4.png"},  
  15.     {name:"costume5",path:"./images/costume5.png"},  
  16.     {name:"costume6",path:"./images/costume6.png"},  
  17.     {name:"costume7",path:"./images/costume7.png"}  
  18. ];  
上面是加载图片列表,以下是加载时用的代码:

[javascript] view plaincopy
  1. //开始加载图片  
  2. LLoadManage.load(  
  3.     imgData,  
  4.     function(progress){  
  5.         //绘制进度条  
  6.         loadingLayer.setProgress(progress);  
  7.     },  
  8.     function(result){  
  9.         imglist = result;  
  10.         removeChild(loadingLayer);  
  11.         loadingLayer = null;  
  12.         //初始化游戏  
  13.         gameInit();  
  14.         //加入开始界面  
  15.         addLogo();  
  16.     }  
  17. );  
将以上代码写到main函数中,就可以实现加载图片了。LLoadManage类是lufylegend中一个加载图片的类,用它可以方便地加载图片。用法如下:

------------------------------------------------------------------------------

load($list,$onupdate,$oncomplete)


■作用:

读取文件组

■参数:

$list:文件数组

$onupdate:读取中调用函数,一般用来显示游戏进度

$oncomplete:全部文件读取完成后调用函数

■详细说明:

这个函数可以接收一个数组,然后加载数组里的所有文件

------------------------------------------------------------------------------

这样做的好处是可以在使用图片时更方便,只用写path对应的name上去就行了。

整个main函数代码如下:

[javascript] view plaincopy
  1. function main(){  
  2.     //初始化加载层  
  3.     loadingLayer = new LoadingSample3();  
  4.     addChild(loadingLayer);  
  5.     //开始加载图片  
  6.     LLoadManage.load(  
  7.         imgData,  
  8.         function(progress){  
  9.             //绘制进度条  
  10.             loadingLayer.setProgress(progress);  
  11.         },  
  12.         function(result){  
  13.             imglist = result;  
  14.             removeChild(loadingLayer);  
  15.             loadingLayer = null;  
  16.             //初始化游戏  
  17.             gameInit();  
  18.             //加入开始界面  
  19.             addLogo();  
  20.         }  
  21.     );  
  22.     //加载声效音乐  
  23.     plopSound = new LSound();  
  24.     var plopUrl = "./sounds/plop.mp3";  
  25.     plopSound.load(plopUrl);  
  26.     //加载背景音乐  
  27.     backSound = new LSound();  
  28.     var backsoundUrl = "./sounds/back_music.mp3";  
  29.     backSound.load(backsoundUrl);  
  30. }  
在上面的代码中,我用LSound类加了背景音乐,这样一来顺便试一下新功能。看看gameInit里代码:

[javascript] view plaincopy
  1. function gameInit(){  
  2.     //初始化层  
  3.     initLayer();  
  4.     //加入时间轴事件  
  5.     backLayer.addEventListener(LEvent.ENTER_FRAME,onframe);  
  6.     //加入鼠标事件  
  7.     backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,onmousedown);  
  8. }  
initLayer和onmousedown中的代码:

[javascript] view plaincopy
  1. function onmousedown(event){  
  2.     //播放声效音乐  
  3.     plopSound.play();  
  4.     if(showChara == true && stageLayer.childList.length < 6){  
  5.         //加入障碍物  
  6.         addStage();  
  7.     }  
  8. }  
  9. function initLayer(){  
  10.     //加入底板层  
  11.     backLayer = new LSprite();  
  12.     addChild(backLayer);  
  13.     //加入图标层  
  14.     logoLayer = new LSprite();  
  15.     backLayer.addChild(logoLayer);  
  16.     //加入雪花层  
  17.     snowLayer = new LSprite();  
  18.     backLayer.addChild(snowLayer);  
  19.     //加入场景层  
  20.     sceneLayer = new LSprite();  
  21.     backLayer.addChild(sceneLayer);  
  22.     //加入礼物层  
  23.     stageLayer = new LSprite();  
  24.     backLayer.addChild(stageLayer);  
  25.     //加入人物层  
  26.     charaLayer = new LSprite();  
  27.     backLayer.addChild(charaLayer);  
  28.     //加入输出层  
  29.     overLayer = new LSprite();  
  30.     backLayer.addChild(overLayer);  
  31.     //加入游戏结束层  
  32.     gameoverLayer = new LSprite();  
  33.     backLayer.addChild(gameoverLayer);  
  34. }  


酷毙
2

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (3 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部