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” 的函数。该函数的作用是:
- 创建声音对象 “snd” 和 “boomSnd”。
- 设置一个时间间隔,使得在 500 毫秒后将游戏状态设置为 “playing”。
- 设置一个游戏循环,每隔 1 秒就调用 “barbette” 函数。
“gameOver” 的函数。该函数的作用是结束游戏,它完成了以下操作:
- 设置游戏状态为 “over”。
- 停止游戏循环。
- 显示 “gameOver”。
- 重置分数,抛掷数量和水果数组的长度。
实现游戏得分系统的一部分。
其中,当得分 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”事件添加了一个事件监听器函数。在事件被触发时,该函数会执行:
- 检查fruits数组中是否包含当前的fruit。
- 如果包含,则使用splice方法从fruits数组中删除该fruit。
eventFruitFallOutOfViewer。当调用这个函数时,它会接收一个参数 fruit,如果 fruit 的类型不是 “boom”,那么它会调用 lose.showLoseAt 函数并将 fruit.originX 作为参数传入。
监听游戏状态,当游戏状态为 “playing” 时,添加 “fruit.fallOutOfViewer” 事件监听器,当游戏状态不为 “playing” 时,删除 “fruit.fallOutOfViewer” 事件监听器。
- 当”game.over”事件发生时,调用exports.gameOver()函数,并调用knife.switchOn()方法。
- 当”overWhiteLight.show”事件发生时,调用knife.endAll()方法,遍历fruits数组并调用每个元素的remove()方法,最后调用background.stop()方法。
- 当”click”事件发生时,调用state(“click-enable”).off()方法,调用gameOver.hide()方法,最后调用message.postMessage(“home-menu”,”sence.switchSence”)方法。
“scripts/layer.js”模块。
它实现了一个图层管理器。代码引入了两个外部模块:Raphael和Ucren。它定义了一个layers对象,用于存储图层,以及一个zindexs对象,用于存储每个图层的z-index。
- createImage:创建图像。它需要指定图层,图像源,图像位置(x,y),图像宽度(w),图像高度(h)。
- createText:创建文本。它需要指定图层,文本内容,文本位置(x,y),文本颜色(fill),文本大小(size)。
代码中使用了 Raphael 和 Ucren 库,它们可以帮助我们绘制图形和执行一些其他操作。
- 接收一个 name 参数,表示图层的名称。
- 如果 layers 对象已经存在一个名称为 name 的图层,则直接返回该图层。
- 如果不存在,则创建一个新的图层,并将其设置为 layers 对象的一个属性。
- 创建的图层是一个 div 元素,其 class 为 “layer”,并设置了 z-index 属性。
- 将新创建的图层添加到 “extra” 元素中。
- 使用 Raphael 函数创建一个 Raphael 对象,并将其赋值给 p。
- 返回 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模块
unsetObject
:清空对象中的所有函数。getAngleByRadian
:根据弧度计算角度。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
- 引入”scripts/layer”模块
- 声明全局变量x和y分别为16和0,texts数组用于存储打印的文本
- exports.set方法暂无实现,留空
- exports.clear方法删除texts数组中所有文本,并将texts数组清空,y值重置为0
- exports.log方法将参数text添加到texts数组,并将y值加20,表示新打印的文本位于上一行文本下方20像素处。
- 返回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模块启用了点击事件。
刀
- 导入timeline、layer、Ucren模块
- 声明刀光模块
- 定义上次绘制的x、y坐标,绝对值函数abs
- 定义生命周期、线宽、颜色、动画列表、刀光是否开启状态、刀光数组
- 定义ClassKnifePart类,存储每一刀的起始点坐标与终点坐标
- 实现set方法,绘制刀光的路径
- 实现update方法,随着时间推移更新线宽
- 实现end方法,删除该刀光,从刀光数组中移除
- 导出newKnife方法,重置最后的x、y坐标
- 导出through方法,绘制刀光
- 导出pause方法,暂停动画
- 导出switchOff方法,关闭刀光
- 导出switchOn方法,开启刀光
- 导出endAll方法,结束所有刀光。
灯光
- 导入模块:layer,Ucren,timeline,message
- 定义变量lights,indexs,lightsNum
- 通过循环,为indexs赋值
- exports.start:通过timeline.setTimeout定时调用build函数创建灯光,调用overWhiteLight函数
- exports.overWhiteLight:显示白色灯光,移除其他灯光,使用timeline创建任务并设置onTimeUpdate和onTimeEnd事件
- exports.removeLights:移除所有灯光
- build函数:创建单个灯光,并将其存储在lights数组中
logo
- 引入 displacement 模块,并将其存储在变量 displacement 中。
- 引入 tween 模块,并将其存储在变量 tween 中。
- 导出一个 displacement 对象,该对象的图像路径为 “images/logo.png”,宽度为 288,高度为 135,x 轴位置为 17,y 轴位置为 -182,放大倍数为 1,缓动函数为 tween.exponential.co,动画时长为 1000 毫秒。
- 将导出的对象作为函数的返回值。
lose
- 引入必要的模块,包括layer、tween、timeline、Ucren和message。
- 定义缓动函数anim和back。
- 定义o1, o2, o3图像,以及动画持续时间animLength。
- 定义三张图片的配置conf1, conf2, conf3。
- 定义变量number,用于记录游戏失败的次数。
- 导出anims数组。
- 定义set函数,创建三张图片,并隐藏。
- 定义reset函数,重置number和图片的状态。
- 定义show函数,用timeline模块创建一个任务,控制三张图片的显示动画。
- 定义hide函数,用timeline模块创建一个任务,控制三张图片的隐藏动画。
- 定义showLoseAt函数,在游戏失败时,显示游戏失败图片。
- 定义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
- 导入了displacement模块
- 导入了tween模块
- 导出displacement模块中创建的对象,参数为图片路径、宽、高、原点位置,显示和隐藏动画方式
- 返回导出对象