徜徉在知识海洋的一群鲸鱼
忍者水果源码解释
忍者水果源码解释

忍者水果源码解释

collide.js撞击函数

用到了水果函数和ucren函数,里面的check函数

它定义了一个名为 check 的函数,用于检查给定的刀的切割范围是否经过果实的中心。在该函数内部,使用 forEach 函数遍历果实数组,使用 lineInEllipse 函数检查刀切割范围是否经过每个果实的中心(该函数的细节不在代码内给出)。如果刀切割范围经过某个果实的中心,则将该果实加入结果数组。最后返回结果数组。

sign 函数,用于计算给定数字 n 的符号,并返回值:-1(负数),0(零)或 1(正数)。

解二元一次方程的函数。它接受三个参数:a,b,c,对应于二元一次方程的系数。函数通过计算二元一次方程的判别式,以判断方程的根的数量。如果 delta(delta = b^2 – 4ac)等于 0,则该方程有两个相等的根;如果 delta 大于 0,则该方程有两个不相等的根;否则该方程无实根。函数返回一个数组,包含所有实根

计算一条线段与椭圆的交点的函数。 输入为两个点代表的线段 p1, p2,椭圆的圆心 c,半径 r,以及离心率 e。 首先判断半径是否小于等于 0,如果是就返回。 然后利用公式计算出椭圆的方程,并使用第二个函数(未给出代码)求出一元二次方程的解。 最后,使用求出的解来计算交点,并判断交点是否在线段上,如果不在,将对应的结果设为null。最终,返回一个包含两个交点的数组。

lineInEllipse,该函数判断线段p1和p2是否在椭圆上。椭圆的圆心为c,半径为r,离心率为e。该函数调用了lineXEllipse函数,它判断线段与椭圆是否相交,并返回两个交点的坐标。最后,lineInEllipse函数返回线段与椭圆是否相交的结果。

control.js控制函数

用到了这几个模块

var Ucren = require(“scripts/lib/ucren”);
var knife = require(“scripts/object/knife”);
var message = require(“scripts/message”);
var state = require(“scripts/state”);

初始画布的左边和上为0,初始化,

安装拖动事件的函数。它创建了一个名为dragger的Ucren.BasicDrag实例,并设置了类型为”calc”。当事件”returnValue”触发时,它会计算x和y的偏移量dx和dy,如果通过函数knife.through(x – canvasLeft, y – canvasTop)的返回值kf不为空,它就会发送一条”slice”的消息。当事件”startDrag”触发时,它会调用函数knife.newKnife()创建一个新的刀。最后,它将拖动事件绑定到文档元素上。

安装了一个点击事件监听器,在 document 元素上监听点击事件。当状态为 “click-enable” 的状态处于激活状态时,会向 message 对象发送 “click” 消息。

该代码定义了一个名为 fixCanvasPos 的函数,该函数用于修复画布的位置。

它首先获取文档元素,然后定义了一个名为 fix 的函数。该函数用于计算 canvasLeft 和 canvasTop 的值,使画布的位置居中显示。

最后,该函数调用 fix 函数并监听窗口的 resize 事件,以便在窗口大小改变时重新计算 canvasLeft 和 canvasTop 的值。

game.js板块

var timeline = require(“scripts/timeline”);
var Ucren = require(“scripts/lib/ucren”);
var sound = require(“scripts/lib/sound”);
var fruit = require(“scripts/factory/fruit”);
var score = require(“scripts/object/score”);
var message = require(“scripts/message”);
var state = require(“scripts/state”);
var lose = require(“scripts/object/lose”);
var gameOver = require(“scripts/object/game-over”);
var knife = require(“scripts/object/knife”);
var background = require(“scripts/object/background”);
var light = require(“scripts/object/light”);

递归函数,它创建一个水果并使其从 startX,startY 的位置射出,最终到达 endX 的位置。如果水果的数量小于 volleyNum,则该函数会再次被调用,生成下一个水果。同时,它还会播放一个声音。

定义了一个名为 “start” 的函数。该函数的作用是:

  1. 创建声音对象 “snd” 和 “boomSnd”。
  2. 设置一个时间间隔,使得在 500 毫秒后将游戏状态设置为 “playing”。
  3. 设置一个游戏循环,每隔 1 秒就调用 “barbette” 函数。

“gameOver” 的函数。该函数的作用是结束游戏,它完成了以下操作:

  1. 设置游戏状态为 “over”。
  2. 停止游戏循环。
  3. 显示 “gameOver”。
  4. 重置分数,抛掷数量和水果数组的长度。

实现游戏得分系统的一部分。

其中,当得分 score 大于当前波数(volleyNum)乘上波数倍数(volleyMultipleNumber)时,波数(volleyNum)加1,波数倍数(volleyMultipleNumber)加50。

这个函数用于应用玩家得分,并在得分达到一定数值时增加游戏难度。

“sliceAt”, 它是一个模块的一部分,通过 “exports” 对象导出。该函数接受两个参数:”fruit” 和 “angle”。

该函数的作用是:如果当前游戏状态不为 “playing”,那么直接返回;如果 “fruit” 的类型不是 “boom”,则调用 “fruit.broken” 方法,从 “fruits” 数组中删除该水果,并将 “scoreNumber” 加 1,调用 “applyScore” 方法;如果 “fruit” 的类型是 “boom”,则播放 “boomSnd”,调用 “pauseAllFruit” 方法,调用 “background.wobble” 方法,调用 “light.start” 方法。

“pauseAllFruit”,该函数用于暂停游戏中所有水果的运动。

函数通过调用 “gameInterval.stop()” 停止游戏计时器,通过调用 “knife.pause()” 停止刀的运动,并通过调用 “fruits.invoke(“pause”)” 停止所有水果的运动。

为”fruit.remove”事件添加了一个事件监听器函数。在事件被触发时,该函数会执行:

  1. 检查fruits数组中是否包含当前的fruit。
  2. 如果包含,则使用splice方法从fruits数组中删除该fruit。

eventFruitFallOutOfViewer。当调用这个函数时,它会接收一个参数 fruit,如果 fruit 的类型不是 “boom”,那么它会调用 lose.showLoseAt 函数并将 fruit.originX 作为参数传入。

监听游戏状态,当游戏状态为 “playing” 时,添加 “fruit.fallOutOfViewer” 事件监听器,当游戏状态不为 “playing” 时,删除 “fruit.fallOutOfViewer” 事件监听器。

  1. 当”game.over”事件发生时,调用exports.gameOver()函数,并调用knife.switchOn()方法。
  2. 当”overWhiteLight.show”事件发生时,调用knife.endAll()方法,遍历fruits数组并调用每个元素的remove()方法,最后调用background.stop()方法。
  3. 当”click”事件发生时,调用state(“click-enable”).off()方法,调用gameOver.hide()方法,最后调用message.postMessage(“home-menu”,”sence.switchSence”)方法。

“scripts/layer.js”模块。

它实现了一个图层管理器。代码引入了两个外部模块:Raphael和Ucren。它定义了一个layers对象,用于存储图层,以及一个zindexs对象,用于存储每个图层的z-index。

  1. createImage:创建图像。它需要指定图层,图像源,图像位置(x,y),图像宽度(w),图像高度(h)。
  2. createText:创建文本。它需要指定图层,文本内容,文本位置(x,y),文本颜色(fill),文本大小(size)。

代码中使用了 Raphael 和 Ucren 库,它们可以帮助我们绘制图形和执行一些其他操作。

  1. 接收一个 name 参数,表示图层的名称。
  2. 如果 layers 对象已经存在一个名称为 name 的图层,则直接返回该图层。
  3. 如果不存在,则创建一个新的图层,并将其设置为 layers 对象的一个属性。
  4. 创建的图层是一个 div 元素,其 class 为 “layer”,并设置了 z-index 属性。
  5. 将新创建的图层添加到 “extra” 元素中。
  6. 使用 Raphael 函数创建一个 Raphael 对象,并将其赋值给 p。
  7. 返回 p。

这个函数的作用是创建图层,并管理图层的生命周期,以保证图层的正确性。

计数器函数,用于生成一个不断递增的数字。它使用了计数器模式,在第一次调用时,将 num 属性设置为 2,并在每次调用时将 num 的值递增 1。该函数可能用于生成唯一的编号或标识符。

“scripts/main.js”的模块。

该模块通过使用require语句来加载其他模块,并将它们分配给各自的变量,以便在代码中使用它们。

它加载了一些游戏相关的模块,如timeline、sence、game、collide等,以及一些库,如Ucren、buzz。

最后,它还将timeline对象的setTimeout方法绑定到全局setTimeout变量,以便在代码中更方便地使用它。

“log”的函数。该函数是一个闭包,它创建了一个内部变量time和add,以及一个内部函数fn。

fn函数接收一个文本参数,并使用setTimeout函数将csl.log(text)调用延迟到一个特定的时间(即time)。每次调用fn时,time都会增加add的值。

fn还有一个名为clear的属性,该属性是一个函数,它使用setTimeout函数将csl.clear方法绑定到一个特定的时间(即time)。

最后,log函数返回fn,以便在代码中使用它。

exports.start是一个函数,它初始化了一些模块(timeline、sence、control),并使用log函数输出一系列消息,以显示游戏的加载进度。最后,它使用setTimeout函数切换到名为“home-menu”的场景,以启动游戏。

当 “slice” 事件发生时,它会被触发。事件监听器的代码块接收一个参数 “knife”,并对 “knife” 进行操作。

首先,它使用 “collide.check(knife)” 获取与 “knife” 碰撞的所有 “fruit”,并将它们存储在 “fruits” 数组中。如果 “fruits” 数组不为空,它会使用 “tools.getAngleByRadian(tools.pointToRadian(knife.slice(0, 2), knife.slice(2, 4)))” 计算 “knife” 切割的角度,并对 “fruits” 数组中的每个 “fruit” 调用 “message.postMessage(fruit, angle, ‘slice.at’)” 函数。

这个代码片段的作用是对 “knife” 和 “fruit” 进行操作,并在 “fruits” 数组不为空时发送一个 “slice.at” 事件,以便后续代码对 “fruits” 数组中的每个 “fruit” 进行处理。

监听 “slice.at” 事件。当这个事件发生时,回调函数会被调用,并传递两个参数:fruit 和 angle。

在回调函数内,首先检查 “sence-state” 的状态是否为 “ready”,如果不是,则直接返回。

然后,判断当前的 “sence-name” 是否为 “game-body”,如果是,则调用 game.sliceAt( fruit, angle ) 函数。

如果当前的 “sence-name” 是 “home-menu”,则调用 fruit.broken( angle ) 函数,并判断 fruit.isHomeMenu 是否为真。如果是,则根据 fruit.isDojoIcon、fruit.isNewGameIcon 和 fruit.isQuitIcon 的值,分别调用 sence.switchSence(“dojo-body”)、sence.switchSence(“game-body”) 和 sence.switchSence(“quit-body”)。

message模块

postMessage 函数接收多个参数,第一个参数是 message,后面的参数是 to。它使用 [].slice.call(arguments, 0) 将所有参数转换为数组,并将最后一个参数赋值给 to。然后调用 Ucren.dispatch(to, messages),将 messages 数组作为参数传递给 Ucren.dispatch 函数。

addEventListener 函数接收两个参数:from 和 fn。它调用 Ucren.dispatch(from, fn),将 from 和 fn 作为参数传递给 Ucren.dispatch 函数。

removeEventListener 函数接收两个参数:from 和 fn。它调用 Ucren.dispatch.remove(from, fn),将 from 和 fn 作为参数传递给 Ucren.dispatch.remove 函数。

sence

var Ucren = require(“scripts/lib/ucren”);
var sound = require(“scripts/lib/sound”);
var fruit = require(“scripts/factory/fruit”);
var flash = require(“scripts/object/flash”);

var state = require("scripts/state");
var message = require("scripts/message");

// the fixed elements
var background = require("scripts/object/background");
var fps = require("scripts/object/fps");

// the home page elements
var homeMask = require("scripts/object/home-mask");
var logo = require("scripts/object/logo");
var ninja = require("scripts/object/ninja")
var homeDesc = require("scripts/object/home-desc");

var dojo = require("scripts/object/dojo");
var newGame = require("scripts/object/new-game");
var quit = require("scripts/object/quit");
var newSign = require("scripts/object/new");
var peach, sandia, boom;

// the elements in game body
var score = require("scripts/object/score");
var lose = require("scripts/object/lose");

// the game logic
var game = require("scripts/game");

// the elements in 'developing' module
var developing = require("scripts/object/developing");
var gameOver = require("scripts/object/game-over");

// commons
var message = require("scripts/message");
var timeline = require("scripts/timeline");

这段代码将 JavaScript 的 setTimeout 和 setInterval 函数绑定到 timeline 对象。这意味着所有的 setTimeout 和 setInterval 调用都将在 timeline 对象的作用域中运行,并使用 timeline 对象作为 this 值。

变量 menuSnd 和 gameStartSnd 预定义为全局变量,但是目前没有被初始化。

在 init 函数中,menuSnd 和 gameStartSnd 被初始化为 sound 对象的 create 方法的结果,使用 “sound/menu” 和 “sound/start” 作为参数。

然后,数组中的所有元素都调用了 “set” 方法。

switchSence 函数。

该函数用于切换场景,接收一个 name 参数。

先通过 state 函数获取当前场景名称(curSence)和场景状态(senceState)。

如果当前场景已经是指定的场景,函数立即结束。

如果不是,首先通过 onHide 函数隐藏当前场景。

在 onHide 函数中,设置当前场景为指定场景,设置场景状态为 entering。

根据指定的场景名称,调用相应的 show 函数,例如 showMenu。

在 show 函数结束时,调用 onShow 函数。

在 onShow 函数中,设置场景状态为 ready。

如果新的场景是 dojo-body 或 quit-body,则再次调用 switchSence 函数切换回 home-menu 场景。

最后,在 switchSence 函数的最后,设置场景状态为 exiting,并调用相应的 hide 函数,例如 hideMenu。

exports.showMenu,该函数用于在页面上显示菜单。代码中创建了三个水果对象(peach,sandia,boom),并将其放入一个数组中,最后遍历数组,对数组中的每一项调用“show”方法,并对peach和sandia调用“rotate”方法。最后,使用setTimeout函数在2500ms后调用回调函数。

exports.hideMenu。该函数用于隐藏菜单。代码中先将newSign、dojo、newGame、quit四个对象的“hide”方法调用一次,再将homeMask、logo、ninja、homeDesc四个对象的“hide”方法调用一次,最后将peach、sandia、boom三个对象的“fallOff”方法调用一次。

exports.showNewGame,该函数用于显示新游戏。代码中先显示score和lose对象,然后调用game对象的start方法。最后播放gameStartSnd,并在1秒钟后调用回调函数。

exports.hideNewGame,该函数用于隐藏新游戏。代码中先隐藏score和lose对象,然后停止gameStartSnd的播放。最后在1秒钟后调用回调函数。

  • showMenu:显示主菜单页面,在页面中创建并显示 peach、sandia 和 boom 等元素,并调用它们的“show”方法。
  • hideMenu:隐藏主菜单页面,隐藏 dojo、newGame、quit 等元素,并调用它们的“fallOff”方法。
  • showNewGame:显示游戏页面,显示 score 和 lose,启动游戏并使用“game.start”方法。
  • hideNewGame:隐藏游戏页面,隐藏 score 和 lose。
  • showDojo:显示道馆页面,显示 developing 元素。
  • hideDojo:隐藏道馆页面,代码没有实现,需要补充。
  • showQuit:显示退出页面,显示 developing 元素。
  • hideQuit:隐藏退出页面,代码没有实现,需要补充。

“scripts/state.js”。

该模块通过 require 函数引入了两个其他模块:”scripts/lib/ucren” 和 “scripts/timeline”。

该模块定义了三个变量:

  • stack:一个空对象,用于存储某些键值对。
  • cache:一个空对象,用于存储已经请求过的键值对。
  • callbacks:一个空对象,用于存储回调函数。

该模块导出的是一个函数,该函数接收一个参数 key,并返回一个对象。该对象提供了一系列的操作:

  • is:判断 stack[key] 的值是否与参数 value 相等。
  • isnot:判断 stack[key] 的值是否与参数 value 不相等。
  • ison:判断 stack[key] 的值是否为 true
  • isoff:判断 stack[key] 的值是否不为 true
  • isunset:判断 stack[key] 的值是否为 undefined
  • set:设置 stack[key] 的值为参数 value
  • get:返回 stack[key] 的值。
  • on:设置 stack[key] 的值为 true
  • off:设置 stack[key] 的值为 false
  • hook:在某个键的值发生变化时,将回调函数加入到 callbacks[key] 数组中。
  • unhook:TODO

ClassTimer,通过setInterval函数实现了定时调用指定函数,每隔指定时间调用一次该函数。 ClassTimer类包含了一系列方法,比如初始化定时器、创建任务、设置超时、设置间隔、获取帧数等。该类通过setInterval()和clearInterval()方法启动和停止定时器。

在代码中,用到了两个自定义函数:now()和createTask(),但是在代码中没有给出它们的实现。

此代码是基于Ucren框架的,需要导入Ucren模块。

tools模块

  1. unsetObject:清空对象中的所有函数。
  2. getAngleByRadian:根据弧度计算角度。
  3. pointToRadian:根据两个点的坐标计算从第一个点到第二个点的弧度。

displacement

概括性总结:该模块为位移类模块,主要功能是以动画的形式将图像从初始坐标移动到目标坐标,并可隐藏图像。使用了layer、timeline和tween三个模块。

函数详细分析:

  • create: 创建一个位移模块对象,并设置图像的初始坐标。
  • show: 从初始坐标移动到目标坐标,并通过调用timeline模块的createTask方法创建动画任务。
  • hide: 清空当前的动画任务,并从目标坐标移动到初始坐标,并通过调用timeline模块的createTask方法创建动画任务。
  • onTimeUpdate: 在动画任务的更新阶段,更新图像的坐标。
  • onTimeStart: 在动画任务的开始阶段,不做任何操作。
  • onTimeEnd: 在动画任务的结束阶段,如果是隐藏动画,则隐藏图像。

水果

这段代码定义了一个JavaScript模块,主要包含了果实(fruit)的模型和一个名为ClassFruit的类。该类定义了一个果实的形状和动画。代码在导入多个模块,如layer,Ucren,tween,timeline,message,flame,flash和juice,并在代码中使用了它们的一些方法。代码也定义了几个变量,如zoomAnim,rotateAnim,linearAnim,dropAnim,fallOffAnim,dropTime,dropXScope,shadowPos,infos,types,rotateSpeed,fruitCache等。

ClassFruit类的构造函数初始化了果实的相关属性,如位置、类型、半径等。该类也定义了一个set()方法,用于创建果实的图像、阴影等。

总的来说,这段代码是一个果实模块的实现,用于创建并显示果实,并定义了相关的动画效果。

水果汁

  • 定义模块的文件名为”scripts/factory/juice.js”
  • 加载Ucren库
  • 加载名为”juice”的图层
  • 加载名为”juice”的时间轴
  • 加载tween动画库
  • 加载工具库
  • 创建随机数生成器
  • 动画持续时间dur为1500毫秒
  • 动画方式为指数渐变
  • 掉落动画方式为二次渐变
  • 创建sin函数
  • 创建cos函数
  • 创建num,代表实例数,初始值为10
  • 创建radius,代表半径,初始值为10
  • 创建类ClassJuice,构造函数接受三个参数x, y, color
  • 该类的渲染方法render()
  • 该类的弹溅方法sputter()
  • 该类的动画更新方法onTimeUpdate()
  • 该类的动画结束方法onTimeEnd()
  • 导出create方法,参数为x, y, color
  • 导出createOne方法,参数为x, y, color

旋转类

实现了一个旋转类,该类创建一个图像,然后以动画形式显示和隐藏。

  • 引入三个必要的模块:layer,timeline 和 Ucren。
  • 通过 exports.create 函数创建并初始化旋转模块。
  • set 方法创建一个图像并初始化一些图像的属性,如位置,大小和角度。
  • show 方法开始图像的显示动画。
  • hide 方法开始图像的隐藏动画。
  • onShowEnd 和 onZooming 两个方法用于控制显示和隐藏动画的变换。
  • onRotating 方法控制图像的旋转动画。

此代码定义了一个脚本库”scripts/lib/sound.js”。引入了buzz库,并判断是否支持音频格式。 配置了音频的格式、是否预加载、是否自动加载以及是否循环播放。 定义了 ClassBuzz 类,构造函数创建了一个buzz.sound对象。 ClassBuzz 类包含 play 和 stop 两个方法,分别实现音频的播放和停止。 暴露出 create 函数,根据是否支持音频格式返回 ClassBuzz 实例或 unSupported 函数。 unSupported 函数为音频不支持的情况的占位符,未实现。

该代码是一个 JavaScript 模块,定义了背景操作相关的功能。

  • 导入了 Ucren、layer、timeline 等模块。
  • 定义了 set() 函数,创建图像并设置图像的位置。
  • 定义了 wobble() 函数,设置定时器让图像抖动。
  • 定义了 stop() 函数,停止抖动并设置图像的位置。
  • 定义了 wobble() 函数,让图像抖动的具体实现。

console

  1. 引入”scripts/layer”模块
  2. 声明全局变量x和y分别为16和0,texts数组用于存储打印的文本
  3. exports.set方法暂无实现,留空
  4. exports.clear方法删除texts数组中所有文本,并将texts数组清空,y值重置为0
  5. exports.log方法将参数text添加到texts数组,并将y值加20,表示新打印的文本位于上一行文本下方20像素处。
  6. 返回exports对象。

火焰

注释1: 引入图层模块,时间轴模块,Ucren模块 注释2: 定义数学库的缩写,包括cos,sin,trunc,random,PI常量 注释3: 设置guid的值为0 注释4: appendFlame函数,接受中心点,角度,长度,生命值,火焰组,并在火焰组中新增一个火焰,并返回该火焰 注释5: 设置半径的值为15 注释6: updateFlame函数,更新火焰组中的火焰,如果不存在,则返回 注释7: 计算该火焰的年龄,如果生命结束,则删除火焰,否则更新火焰的位置 注释8: removeFlame函数,删除火焰组中的火焰 注释9: exports.create函数,创建一个烟雾对象,该对象包含pos函数和remove函数,分别用于更新位置和删除烟雾 注释10: nx和ny的值为初始坐标 注释11: 创建一个图片,并设置初始坐标 注释12: 定义timer1和timer2,并调用setInterval函数 注释13: 计算随机坐标并调用appendFlame函数,新增一个火焰 注释14: 调用updateFlame函数,更新火焰

闪光

  • 引入依赖:layer、timeline、tween、sound
  • 声明变量:image、snd、xDiff、yDiff、anim、anims、dur
  • 导出函数set:创建图像flash,隐藏
  • 导出函数showAt:显示图像flash,并进行旋转、缩放、定位、播放声音等操作
  • 导出函数onTimeUpdate:随着时间变化,动态更新图像flash的缩放大小

gameover

这段代码定义了一个名为”game-over.js”的对象,用于实现游戏结束的动画效果。

  • 加载了layer、tween、timeline、message、state模块。
  • 定义了指数变量exponential。
  • 定义了anims数组。
  • 定义了set()方法,用于创建游戏结束图片并隐藏。
  • 定义了show()方法,用于显示游戏结束动画。
  • 定义了hide()方法,用于隐藏游戏结束动画。
  • 定义了onZoomStart()方法,用于在动画开始时显示游戏结束图片。
  • 定义了onZooming()方法,用于在动画过程中缩放图片。
  • 定义了onZoomEnd()方法,用于在动画结束时隐藏图片或启用点击事件。

代码中使用了timeline模块实现了游戏结束动画的显示和隐藏效果,并通过state模块启用了点击事件。

  1. 导入timeline、layer、Ucren模块
  2. 声明刀光模块
  3. 定义上次绘制的x、y坐标,绝对值函数abs
  4. 定义生命周期、线宽、颜色、动画列表、刀光是否开启状态、刀光数组
  5. 定义ClassKnifePart类,存储每一刀的起始点坐标与终点坐标
  6. 实现set方法,绘制刀光的路径
  7. 实现update方法,随着时间推移更新线宽
  8. 实现end方法,删除该刀光,从刀光数组中移除
  9. 导出newKnife方法,重置最后的x、y坐标
  10. 导出through方法,绘制刀光
  11. 导出pause方法,暂停动画
  12. 导出switchOff方法,关闭刀光
  13. 导出switchOn方法,开启刀光
  14. 导出endAll方法,结束所有刀光。

灯光

  1. 导入模块:layer,Ucren,timeline,message
  2. 定义变量lights,indexs,lightsNum
  3. 通过循环,为indexs赋值
  4. exports.start:通过timeline.setTimeout定时调用build函数创建灯光,调用overWhiteLight函数
  5. exports.overWhiteLight:显示白色灯光,移除其他灯光,使用timeline创建任务并设置onTimeUpdate和onTimeEnd事件
  6. exports.removeLights:移除所有灯光
  7. build函数:创建单个灯光,并将其存储在lights数组中

logo

  1. 引入 displacement 模块,并将其存储在变量 displacement 中。
  2. 引入 tween 模块,并将其存储在变量 tween 中。
  3. 导出一个 displacement 对象,该对象的图像路径为 “images/logo.png”,宽度为 288,高度为 135,x 轴位置为 17,y 轴位置为 -182,放大倍数为 1,缓动函数为 tween.exponential.co,动画时长为 1000 毫秒。
  4. 将导出的对象作为函数的返回值。

lose

  1. 引入必要的模块,包括layer、tween、timeline、Ucren和message。
  2. 定义缓动函数anim和back。
  3. 定义o1, o2, o3图像,以及动画持续时间animLength。
  4. 定义三张图片的配置conf1, conf2, conf3。
  5. 定义变量number,用于记录游戏失败的次数。
  6. 导出anims数组。
  7. 定义set函数,创建三张图片,并隐藏。
  8. 定义reset函数,重置number和图片的状态。
  9. 定义show函数,用timeline模块创建一个任务,控制三张图片的显示动画。
  10. 定义hide函数,用timeline模块创建一个任务,控制三张图片的隐藏动画。
  11. 定义showLoseAt函数,在游戏失败时,显示游戏失败图片。
  12. 定义scaleImage函数,控制图片的缩放动画。

这段代码实现了一个名为“new.js”的对象,主要通过导出函数对外暴露接口,功能包括:

  • 设置图像:使用layer模块创建图像对象,图像名为”default”,图片地址为”images/new.png”,初始位置和大小由常量sx、sy、sw、sh确定
  • 清除图像:暂无具体实现
  • 显示图像:通过timeline模块创建一个任务,执行500ms的动画,动画过程中通过调用onShowing函数,动画的目标属性由常量ex、ey、ew、eh确定
  • 隐藏图像:通过timeline模块创建一个任务,执行500ms的动画,动画过程中通过调用onShowing函数,动画的目标属性与显示图像相反
  • 跳跃图像:通过timeline模块创建一个任务,执行周期性跳跃动画,动画过程中通过调用onJumping函数,动画周期由常量cycleTime确定

注:引用的模块包括layer、tween、timeline、Ucren,showAnim、jumpAnim为运动曲线函数。

ninja

  1. 导入了displacement模块
  2. 导入了tween模块
  3. 导出displacement模块中创建的对象,参数为图片路径、宽、高、原点位置,显示和隐藏动画方式
  4. 返回导出对象