设为首页收藏本站

LUPA开源社区

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

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

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

摘要: 原文:PHP Best Practices-A short, practical guide for common and confusing PHP tasks译者:youngsterxyf最后修订日期维护者本文档最后审阅于2013年3月8日。最后修改于2013年5月8日。由我,Alex Cabal,维护该文 ...
以上代码都添加了注释,很容易看懂。有几个引擎中的类的用法提一下,LSprite用法:

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

LSprite()


■作用:

LSprite 类是基本显示列表构造块,一个可显示图形并且也可包含子项的显示列表节点。

■可用属性:

type:类型

x:坐标x

y:坐标y

scaleX:X坐标方向上的缩放比例

scaleY:Y坐标方向上的缩放比例

alpha:透明度

rotate:旋转角度

visible:是否可见,当设为false的时候,该LBitmap对象不可视,且内部所有处理都将停止

childList:该对象的所有子项

graphics:指定属于此 LSprite 的 LGraphics 对象,在此 LSprite 中可执行矢量绘图命令。

box2dBody:结合box2dweb后,创建的body2d

mask:遮罩

filters:光晕效果,具体可参照LDropShadowFilter类的介绍

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

addEventListener的用法:

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

addEventListener(type,listener)


■作用:

注册事件侦听器对象,以使侦听器能够接收事件通知。

■参数:

type:事件的类型。

listener:处理事件的侦听器函数。

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

在加载函数中,我调用了addLogo,它是用来显示开场界面的。由于游戏本身很简单,所以要加一个很绚丽的开场界面。

addLogo的代码如下:

[javascript] view plaincopy
  1. var logoText;  
  2. var startBtn;  
  3. function addLogo(){  
  4.     //加入背景  
  5.     var bitmapData = new LBitmapData(imglist["logoback"],0,0,1024,768);  
  6.     var bitmap = new LBitmap(bitmapData);  
  7.     bitmap.scaleX = 0.6;  
  8.     bitmap.scaleY = 0.6;  
  9.     logoLayer.addChild(bitmap);  
  10.     //加入文字  
  11.     addLogoText();  
  12. }  
在其中我给背景添上图片,用到了LBitmapData和LBitmap。用法很多,大家可以自己去API里看看。这里就先不多说了。

addLogoText里的代码:

[javascript] view plaincopy
  1. function addLogoText(){  
  2.     //大标题  
  3.     logoText = new LTextField();  
  4.     logoText.size = 50;  
  5.     logoText.color = "white";  
  6.     logoText.font = "HG行書体";  
  7.     logoText.text = "Christmas";  
  8.     logoText.stroke = true;  
  9.     logoText.lineWidth = 2;  
  10.     logoText.x = 50;  
  11.     logoText.y = 20;  
  12.     logoLayer.addChild(logoText);  
  13.     //加入滤镜效果  
  14.     var titleShadow = new LDropShadowFilter(5,45,"red");  
  15.     for(var i=0;i<2;i++){  
  16.         logoText.filters = [titleShadow];  
  17.         logoLayer.addChild(logoText);  
  18.     }  
  19.     //开始指示  
  20.     logoText = new LTextField();  
  21.     logoText.size = 30;  
  22.     logoText.color = "white";  
  23.     logoText.font = "HG行書体";  
  24.     logoText.text = "Tap to Start Game";  
  25.     logoText.x = 150;  
  26.     logoText.y = 190;  
  27.     logoLayer.addChild(logoText);  
  28.     //加入开始游戏事件  
  29.     logoLayer.addEventListener(LMouseEvent.MOUSE_UP,startGame);  
  30.     //加入滤镜效果  
  31.     var shadow = new LDropShadowFilter(5,45,"black",0);  
  32.     logoText.filters = [shadow];  
  33. }  
界面运行出来后,得到了一个静态的结果,游戏嘛就得富有动态,于是我做了一个下雪效果。它在onframe函数中,也就是我们说的时间轴事件中:

[javascript] view plaincopy
  1. if(canSnowing == true){  
  2.     //加入雪花  
  3.     addSnow();  
  4. }  
接着看addSnow函数:
[javascript] view plaincopy
  1. function addSnow(){  
  2.     snowLayer.graphics.clear();  
  3.     var snowx = Math.random()*(LStage.width-10)+10;  
  4.     var n = snowChildList.length;  
  5.     while(n--){  
  6.         var s = snowChildList[n];  
  7.         s.y += s.s;  
  8.         snowLayer.graphics.drawArc(2,"white",[s.x,s.y,2,0,2*Math.PI],true,"white");  
  9.     }  
  10.     snowChildList.push({x:snowx,y:0,s:10});  
  11. }  

它实现的方法在上一篇文章中提到过,可以看看,这里就不多讲了:

如何制作一款HTML5 RPG游戏引擎——第二篇,烟雨+飞雪效果

http://blog.csdn.net/yorhomwang/article/details/8915020

运行代码得到一个相当酷的界面,大家可以看一下:


光有界面也不能叫游戏,接下来就是游戏主体部分。

我们先前提到过类,现在就来用类实战一下。首先来看charactor人物类:

[javascript] view plaincopy
  1. function Charactor(data){  
  2.     base(this,LSprite,[]);  
  3.     //设定x和y坐标  
  4.     this.x = 0;  
  5.     this.y = 0;  
  6.     //设定模式  
  7.     this.mode = "right";  
  8.     this.speed = 5;  
  9.     //加入图片  
  10.     this.data = data;  
  11.     var list = LGlobal.divideCoordinate(227,158,1,1);  
  12.     var bitmapdata = new LBitmapData(imglist[this.data]);  
  13.     //加入动画  
  14.     this.anima = new LAnimation(this,bitmapdata,list);  
  15.     this.anima.setAction(0,1,0,false);  
  16. }  
其中有一个LAnimation方法,它是lufylegend中播放动画的类,使用说明如下:

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

LAnimation(layer,data,list)


■作用:

实现简单动画的播放,原理是将一张大的图片,按照保存有坐标的二维数组保存的坐标来逐个显示。

■参数:

layer:LSprite显示层

data:LBitmapData对象

list:一个存有坐标的2维数组

■详细说明:

LAnimation类实现简单动画的播放,用于制作人物行走等效果非常方便

■可用属性:

layer:动画显示时,LAnimation的父级层

data:LBitmapData对象

list:坐标数组。

------------------------------------------------------------------------------
其他的就很容易懂了,Charactor类有个move方法,用于人物移动,如下:

[javascript] view plaincopy
  1. Charactor.prototype.move = function(){  
  2.     //当向右飞行时  
  3.     if(this.mode == "right" && this.x < LStage.width-149){  
  4.         this.anima.setAction(0,1,0,false);  
  5.         this.x += this.speed;  
  6.     }else{  
  7.         this.mode = "left";  
  8.     }  
  9.     //当向左飞行时  
  10.     if(this.mode == "left" && this.x > 0){  
  11.         this.anima.setAction(0,1,0,true);  
  12.         this.x -= this.speed;  
  13.     }else{  
  14.         this.mode = "right";  
  15.     }  
  16. }  

这段代码可以使人物移动,将这段代码放在onframe中就可以实现让人物来回移动了。逻辑很简单,大家可以看看。

接着就是实例化人物了。代码如下:

[javascript] view plaincopy
  1. function addChara(){  
  2.     oldMan = new Charactor("player");  
  3.     showChara = true;  
  4.     charaLayer.addChild(oldMan);  
  5. }  
接着是onframe中的代码:

[javascript] view plaincopy
  1. if(showChara == true){  
  2.     //使人物动起来  
  3.     oldMan.move();  
  4.     //改变时间显示  
  5.     timeText.text = "Time:" + showTime;  
  6.     if(time>0){  
  7.         time -= 30000/(30000/50);  
  8.     }else{  
  9.         playerName = getName();  
  10.         gameOver();  
  11.     }  
  12. }  
在这里我门判断时间是否为0,如果为0就游戏结束。当然,这是后话,这里只提一下。

接下来看Stage类,这个很重要,大家一定要认真看哦!

[javascript] view plaincopy
  1. var stageSpeed = 5;  
  2. function Stage(){  
  3.     base(this,LSprite,[]);  
  4.     //取出一个整数,使0<=index<=7成立  
  5.     var index = Math.floor(Math.random()*7);  
  6.     //将index的值取出对应的图片  
  7.     var bitmap = new LBitmap(new LBitmapData(imglist["costume"+index]));  
  8.     //定义礼物的模式  
  9.     this.mode = "";  
  10.     this.addChild(bitmap);  
  11. }  



酷毙
2

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (3 人)

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

最新评论

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

返回顶部