canvas及lufylegend引擎

摘要:
随着对canvas的深入了解,我发现canvas真的是一件好事,我也发现android真的很糟糕,嘿!首先,我使用了lufylegend的版本。js1.9.1.首先,初始化引擎。lufylegend.js引擎初始化通过LInit实现;发动机提供加载效果。当加载图像和js时,删除加载效果并进入启动界面。角色函数创建一个对象。通过对对象的操作,可以方便地监视每个对象的事件。性格原型side=函数{varself=obj;self.bitmap=newLBitmap;charaLayer.addChild;self.canClick=true;self.addChild,self.x=adressData[self.adressNum][0];self.y=adressData[self.andressNum][1];对于{charaLayer.childList[key],clickSpeed=1;如果{//删除成员varthat=charaLayr.childList[key];point+=1 00;arr.remove;charaLayer.removeChild;}};性格原型run=function(){varself=this;for{charaLayer.childList[key].speed-=2;if{//remove成员arr.remove;charaLayer.removeChild;}}}}当然,这是对charaLayer层上的对象进行操作,画布游戏应该特别注意层的概念。

随着对canvas的深入了解,发现canvas真是个好东西,也发现android真烂,哎!

最近在用canvas做小游戏,简单的跑酷类,打地鼠类的小游戏做了一遍,今天先写一个打地鼠的制作心得。

PS:以前用JS做过打地鼠的游戏,现在看看真心烂。

首先我使用的是lufylegend.js 1.9.1的版本(非常好用的引擎,强烈推荐)。

在制作过程中先来分析打地鼠的游戏大概需要那几个模块:1.老鼠这个对象。

                          2.游戏背景。

                          3.开始及结束。

首先来初始化引擎,lufylegend.js引擎初始化通过LInit(time,"id",x,y,main)实现;

引擎提供loading效果,当图片及js加载完毕后,删除loading效果,进入开始界面。

function main(){
if(LGlobal.canTouch){
LGlobal.stageScale = LStageScaleMode.SHOW_ALL;
LSystem.screen(LStage.FULL_SCREEN);
}
loadingLayer = new LoadingSample4();
addChild(loadingLayer);
LLoadManage.load(loadData, function(progress) {
loadingLayer.setProgress(progress);
}, imgLoadComplete);
};
function imgLoadComplete(result) {
datalist = result;
removeChild(loadingLayer);
loadingLayer = null;
var background = new Background();

开始界面先执行background函数来实现背景的创建,在background里来执行time、character函数;

function Background(){
base(this,LSprite,[]);
this.init();
};
Background.prototype.init = function(){
var self = this;
backLayer = new LSprite;
stageLayer = new LSprite;
addChild(backLayer);
self.bitmap = new LBitmap(new LBitmapData(datalist["background"],0,0,640,960));
backLayer.addChild(this.bitmap);
//console.log(this.bitmap.childList);
self.back = new LBitmap(new LBitmapData(datalist["backCove"],0,0,640,960));
self.back.x = 0;
self.back.y = 0;
backLayer.addChild(self.back);

timeLayer = new LSprite();
backLayer.addChild(timeLayer);
time = new Time();
timeLayer.addChild(time);
charaLayer = new LSprite();
backLayer.addChild(charaLayer);
};

time函数是通过时间来控制进度条的缩放,通过scroleX来改变时间进度条的长短。

character函数创建对象,通过对象的操控可以方便的对每个对象进行事件监听。

function Character(){
base(this,LSprite,[]);
this.init();
};
Character.prototype.init = function(){
var self = this;
self.x = adressData[adressNum][0];
self.y = adressData[adressNum][1];
self.adressNum = adressNum;
var charaNum = parseInt(Math.random()*4);
self.index = charaNum;
self.bitmap = new LBitmap(new LBitmapData(datalist[charaData[charaNum]]));
self.addChild(self.bitmap);
self.speed = 5;
self.canClick = false;
self.clickSpeed = 2;
};

当然要注意的是地鼠出现的位置不能重复,我通过数组的方法,每次随机出现的位置与数组内做比较,如果重复则重新随机数,不重复添加到数组中,并对对象进行赋值。当打到地鼠的时候删除数组中的这个位置。

Character.prototype.hide = function(obj){
var self = obj;
self.bitmap = new LBitmap(new LBitmapData(datalist[charaData[self.index][0]+"J"]));
charaLayer.addChild(self);
self.canClick = true;
self.addChild(self.bitmap);
self.x = adressData[self.adressNum][0];
self.y = adressData[self.adressNum][1];
for(var key in charaLayer.childList){
charaLayer.childList[key].clickSpeed -= 1;
if(self.canClick == true && charaLayer.childList[key].speed <= 0){
//移除该成员
var that = charaLayer.childList[key];
point += 100;
arr.remove(that.adressNum);
charaLayer.removeChild(charaLayer.childList[key]);
}
}
};
Character.prototype.run = function(){
var self = this;
for(var key in charaLayer.childList){
charaLayer.childList[key].speed -= 2;
if(self.canClick == false && charaLayer.childList[key].speed <= 0){
//移除该成员
arr.remove(charaLayer.childList[key].adressNum);
charaLayer.removeChild(charaLayer.childList[key]);
}
}
}

当然这是对charaLayer这个层上的对象进行操作,canvas游戏特别要注意层的这个概念。而且面向对象的思想也很重要。

在地鼠这个对象上要添加相应属性,方便后续操作的判断。首先判断这个地鼠是否被打中,我通过self.canClick属性来判断,若为false则没打中,改变速度,2秒后消失,如果打中值为true,更换图片,2秒后消失。

分数的加减在点击事件中,很简单。

gameover时,删除backLayer上所有层,增加一个层,显示游戏结束。

游戏不难,只要思路清晰,便很快能完成,理解层的概念,面向对象的思想,就OK了;

免责声明:文章转载自《canvas及lufylegend引擎》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RenderMonkey 练习 第三天 【OpenGL renderToTexture】科普:alphago是什么下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

canvas实现平铺水印

欲实现的水印平铺的效果图如下: 从图上看,应该做到以下几点: 文字在X和Y方向上进行平铺; 文字进行了一定的角度的旋转; 水印作为背景,其z-index位置应位于页面内容底部, 即不能覆盖页面主内容; 平铺的水印应能随窗口大小改变进行自适应。 思路: 首先我们先在canvas上绘制如下图所示一小块画布: var tpl = '<canvas...

canvas和svg

canvas 画布   位图   1.   不要在style中给canvas设置宽高  会有位移差   2. 给c设置一个绘图环境 得到的是一个对象     var c=document.getElementById("c1")     var can=c.getContentext("2d");   3. fillRect()   绘制一个填充的方块 默...

pdf.js 前端pdf预览 渲染文本图层支持复制 保证手机端清晰度 双指缩放 alloyfinger(手势)

预览地址: https://feiyefeihua.gitee.io/ 一、渲染pdf核心代码 首先安装 pdf.js 的 npm 版本: npm i pdfjs-dist@2.6.347 使用: import * as PDFJS from "pdfjs-dist"   其中,pdf.js 加载pdf文件依赖了 pdf.worker.js ,通过指定 p...

Canvas坐标系转换

默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸。左上角坐标为x=0,y=0的点称作原点。在默认坐标系中,每一个点的坐标都是直接映射到一个CSS像素上。 但是如果图像的每次绘制都参考一个固定点将缺少灵活性,于是在canvas中引入“当前坐标系”的概念,所谓“当前坐标系”即指图像在此时...

前端动态生成二维码后合成海报,下载分享

转载:zgh0711:https://blog.csdn.net/zgh0711/article/details/88192993 如何生成二维码 现在前端环境下,要生成二维码,可用的工具库有很多,我这里用的是 qrcode,首先安装   npm install --save qrcode 安装完之后 import 导入就能使用了   import QR...

Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形) .

1、首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw ca...