手機pos機網(wǎng)站源碼,超炫HTML5游戲 附游戲源碼

 新聞資訊  |   2023-05-18 09:26  |  投稿人:pos機之家

網(wǎng)上有很多關(guān)于手機pos機網(wǎng)站源碼,超炫HTML5游戲 附游戲源碼的知識,也有很多人為大家解答關(guān)于手機pos機網(wǎng)站源碼的問題,今天pos機之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、手機pos機網(wǎng)站源碼

手機pos機網(wǎng)站源碼

HTML5版切水果游戲 HTML5游戲極品

這是一款由百度JS小組提供的HTML5版切水果游戲,記得切水果游戲當(dāng)年非?;穑裉煳艺业搅艘豢罨贖TML5實現(xiàn)的網(wǎng)頁版切水果游戲。雖然和原版的切水果游戲相比功能不怎么完善,但是該HTML5切水果游戲也算有聲有色,畫面也十分華麗。

javascript文件

/**

* this file was compiled by jsbuild 0.9.6

* @date Fri, 20 Jul 2012 16:21:18 UTC

* @author dron

* @site http://ucren.com

*/

void function(global){

var mapping = {}, cache = {};

global.startModule = function(m){

require(m).start();

};

global.define = function(id, func){

mapping[id] = func;

};

global.require = function(id){

if(!/\\.js$/.test(id))

id += \'.js\';

if(cache[id])

return cache[id];

else

return cache[id] = mapping[id]({});

};

}(this);

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\collide.js

*/

define("scripts/collide.js", function(exports){

var fruit = require("scripts/factory/fruit");

var Ucren = require("scripts/lib/ucren");

var fruits = fruit.getFruitInView();

/**

* 碰撞檢測

*/

exports.check = function( knife ){

var ret = [], index = 0;

fruits.forEach(function( fruit ){

var ck = lineInEllipse(

knife.slice( 0, 2 ),

knife.slice( 2, 4 ),

[ fruit.originX, fruit.originY ],

fruit.radius

);

if( ck )

ret[ index ++ ] = fruit;

});

return ret;

};

function sqr(x){

return x * x;

}

function sign(n){

return n < 0 ? -1 : ( n > 0 ? 1 : 0 );

}

function equation12( a, b, c ){

if(a == 0)return;

var delta = b * b - 4 * a * c;

if(delta == 0)

return [ -1 * b / (2 * a), -1 * b / (2 * a) ];

else if(delta > 0)

return [ (-1 * b + Math.sqrt(delta)) / (2 * a), (-1 * b - Math.sqrt(delta)) / (2 * a) ];

}

// 返回線段和橢圓的兩個交點,如果不相交,返回 null

function lineXEllipse( p1, p2, c, r, e ){

// 線段:p1, p2 圓心:c 半徑:r 離心率:e

if (r <= 0) return;

e = e === undefined ? 1 : e;

var t1 = r, t2 = r * e, k;

a = sqr( t2) * sqr(p1[0] - p2[0]) + sqr(t1) * sqr(p1[1] - p2[1]);

if (a <= 0) return;

b = 2 * sqr(t2) * (p2[0] - p1[0]) * (p1[0] - c[0]) + 2 * sqr(t1) * (p2[1] - p1[1]) * (p1[1] - c[1]);

c = sqr(t2) * sqr(p1[0] - c[0]) + sqr(t1) * sqr(p1[1] - c[1]) - sqr(t1) * sqr(t2);

if (!( k = equation12(a, b, c, t1, t2) )) return;

var result = [

[ p1[0] + k[0] * (p2[0] - p1[0]), p1[1] + k[0] * (p2[1] - p1[1]) ],

[ p1[0] + k[1] * (p2[0] - p1[0]), p1[1] + k[1] * (p2[1] - p1[1]) ]

];

if ( !( ( sign( result[0][0] - p1[0] ) * sign( result[0][0] - p2[0] ) <= 0 ) &&

( sign( result[0][1] - p1[1] ) * sign( result[0][1] - p2[1] ) <= 0 ) ) )

result[0] = null;

if ( !( ( sign( result[1][0] - p1[0] ) * sign( result[1][0] - p2[0] ) <= 0 ) &&

( sign( result[1][1] - p1[1] ) * sign( result[1][1] - p2[1] ) <= 0 ) ) )

result[1] = null;

return result;

}

// 判斷計算線段和橢圓是否相交

function lineInEllipse( p1, p2, c, r, e ){

var t = lineXEllipse( p1, p2, c, r, e );

return t && ( t[0] || t[1] );

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\control.js

*/

define("scripts/control.js", function(exports){

var Ucren = require("scripts/lib/ucren");

var knife = require("scripts/object/knife");

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

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

var canvasLeft, canvasTop;

canvasLeft = canvasTop = 0;

exports.init = function(){

this.fixCanvasPos();

this.installDragger();

this.installClicker();

};

exports.installDragger = function(){

var dragger = new Ucren.BasicDrag({ type: "calc" });

dragger.on( "returnValue", function( dx, dy, x, y, kf ){

if( kf = knife.through( x - canvasLeft, y - canvasTop ) )

message.postMessage( kf, "slice" );

});

dragger.on( "startDrag", function(){

knife.newKnife();

});

dragger.bind( document.documentElement );

};

exports.installClicker = function(){

Ucren.addEvent( document, "click", function(){

if( state( "click-enable" ).ison() )

message.postMessage( "click" );

});

};

exports.fixCanvasPos = function(){

var de = document.documentElement;

var fix = function( e ){

canvasLeft = ( de.clientwidth="360px",height="auto" />

canvasTop = ( de.clientHeight - 480 ) / 2 - 40;

};

fix();

Ucren.addEvent( window, "resize", fix );

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\game.js

*/

define("scripts/game.js", function(exports){

/**

* game logic

*/

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 sence = require("scripts/sence");

var background = require("scripts/object/background");

var light = require("scripts/object/light");

var scoreNumber = 0;

var random = Ucren.randomNumber;

var volleyNum = 2, volleyMultipleNumber = 5;

var fruits = [];

var gameInterval;

var snd;

var boomSnd;

// fruit barbette

var barbette = function(){

if( fruits.length >= volleyNum )

return ;

var startX = random( 640 ), endX = random( 640 ), startY = 600;

var f = fruit.create( startX, startY ).shotOut( 0, endX );

fruits.push( f );

snd.play();

barbette();

};

// start game

exports.start = function(){

snd = sound.create( "sound/throw" );

boomSnd = sound.create( "sound/boom" );

timeline.setTimeout(function(){

state( "game-state" ).set( "playing" );

gameInterval = timeline.setInterval( barbette, 1e3 );

}, 500);

};

exports.gameOver = function(){

state( "game-state" ).set( "over" );

gameInterval.stop();

gameOver.show();

// timeline.setTimeout(function(){

// // sence.switchSence( "home-menu" );

// // TODO: require 出現(xiàn)互相引用時,造成死循環(huán),這個問題需要跟進,這里暫時用 postMessage 代替

// message.postMessage( "home-menu", "sence.switchSence" );

// }, 2000);

scoreNumber = 0;

volleyNum = 2;

fruits.length = 0;

};

exports.applyScore = function( score ){

if( score > volleyNum * volleyMultipleNumber )

volleyNum ++,

volleyMultipleNumber += 50;

};

exports.sliceAt = function( fruit, angle ){

var index;

if( state( "game-state" ).isnot( "playing" ) )

return;

if( fruit.type != "boom" ){

fruit.broken( angle );

if( index = fruits.indexOf( fruit ) )

fruits.splice( index, 1 );

score.number( ++ scoreNumber );

this.applyScore( scoreNumber );

}else{

boomSnd.play();

this.pauseAllFruit();

background.wobble();

light.start( fruit );

}

};

exports.pauseAllFruit = function(){

gameInterval.stop();

knife.pause();

fruits.invoke( "pause" );

};

// message.addEventListener("fruit.fallOff", function( fruit ){

// var index;

// if( ( index = fruits.indexOf( fruit ) ) > -1 )

// fruits.splice( index, 1 );

// });

message.addEventListener("fruit.remove", function( fruit ){

var index;

if( ( index = fruits.indexOf( fruit ) ) > -1 )

fruits.splice( index, 1 );

});

var eventFruitFallOutOfViewer = function( fruit ){

if( fruit.type != "boom" )

lose.showLoseAt( fruit.originX );

};

state( "game-state" ).hook( function( value ){

if( value == "playing" )

message.addEventListener( "fruit.fallOutOfViewer", eventFruitFallOutOfViewer );

else

message.removeEventListener( "fruit.fallOutOfViewer", eventFruitFallOutOfViewer );

} );

message.addEventListener("game.over", function(){

exports.gameOver();

knife.switchOn();

});

message.addEventListener("overWhiteLight.show", function(){

knife.endAll();

for(var i = fruits.length - 1; i >= 0; i --)

fruits[i].remove();

background.stop();

});

message.addEventListener("click", function(){

state( "click-enable" ).off();

gameOver.hide();

message.postMessage( "home-menu", "sence.switchSence" );

});;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\layer.js

*/

define("scripts/layer.js", function(exports){

/**

* layer manager

*/

var Raphael = require("scripts/lib/raphael");

var Ucren = require("scripts/lib/ucren");

var layers = {};

var zindexs = {

"default": zi(),

"light": zi(),

"knife": zi(),

"fruit": zi(),

"juice": zi(),

"flash": zi(),

"mask": zi()

};

exports.createImage = function( layer, src, x, y, w, h ){

layer = this.getLayer( layer );

return layer.image( src, x, y, w, h );

};

exports.createText = function( layer, text, x, y, fill, size ){

layer = this.getLayer( layer );

if( Ucren.isIe )

y += 2;

return layer.text(x, y, text).attr({

fill: fill || "#fff",

"font-size": size || "14px",

"font-family": "黑體",

"text-anchor": "start"

});

};

exports.getLayer = function( name ){

var p, layer;

name = name || "default";

if( p = layers[name] ){

return p;

}else{

layer = Ucren.makeElement( "div", { "class": "layer", "style": "z-index: " + ( zindexs[name] || 0 ) + ";" } );

Ucren.Element( "extra" ).add( layer );

p = layers[name] = Raphael( layer, 640, 480 );

// if( Ucren.isSafari )

// p.safari();

return p;

}

};

function zi(){

return zi.num = ++ zi.num || 2;

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\main.js

*/

define("scripts/main.js", function(exports){

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

var tools = require("scripts/tools");

var sence = require("scripts/sence");

var Ucren = require("scripts/lib/ucren");

var buzz = require("scripts/lib/buzz");

var control = require("scripts/control");

var csl = require("scripts/object/console");

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

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

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

var collide = require("scripts/collide");

var setTimeout = timeline.setTimeout.bind( timeline );

var log = function(){

var time = 1e3, add = 300, fn;

fn = function( text ){

setTimeout( function(){ csl.log( text ); }, time );

time += add;

};

fn.clear = function(){

setTimeout( csl.clear.bind( csl ), time );

time += add;

};

return fn;

}();

exports.start = function(){

[ timeline, sence, control ].invoke( "init" );

log( "正在加載鼠標控制腳本" );

log( "正在加載圖像資源" );

log( "正在加載游戲腳本" );

log( "正在加載劇情" );

log( "正在初始化" );

log( "正在啟動游戲..." );

log.clear();

setTimeout( sence.switchSence.saturate( sence, "home-menu" ), 3000 );

};

message.addEventListener("slice", function( knife ){

var fruits = collide.check( knife ), angle;

if( fruits.length )

angle = tools.getAngleByRadian( tools.pointToRadian( knife.slice(0, 2), knife.slice(2, 4) ) ),

fruits.forEach(function( fruit ){

message.postMessage( fruit, angle, "slice.at" );

});

});

message.addEventListener("slice.at", function( fruit, angle ){

if( state( "sence-state" ).isnot( "ready" ) )

return ;

if( state( "sence-name" ).is( "game-body" ) ){

game.sliceAt( fruit, angle );

return ;

}

if( state( "sence-name" ).is( "home-menu" ) ){

fruit.broken( angle );

if( fruit.isHomeMenu )

switch( 1 ){

case fruit.isDojoIcon:

sence.switchSence( "dojo-body" ); break;

case fruit.isNewGameIcon:

sence.switchSence( "game-body" ); break;

case fruit.isQuitIcon:

sence.switchSence( "quit-body" ); break;

}

return ;

}

});

var tip = "";

if( !Ucren.isChrome )

tip = "$為了獲得最佳流暢度,推薦您使用 <span class=\'b\'>Google Chrome</span> 體驗本游戲";

if( !buzz.isSupported() )

tip = tip.replace( "$", "您的瀏覽器不支持 &lt;audio&gt 播放聲效,且" );

tip = tip.replace( "$", "" );

Ucren.Element( "browser" ).html( tip );;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\message.js

*/

define("scripts/message.js", function(exports){

/**

* a simple message manager

* @author dron

* @date 2012-06-27

*/

var Ucren = require("scripts/lib/ucren");

/**

* send a message

* @param {Any} message,message...message contents

* @param {String} to message address

*/

exports.postMessage = function( message/*, message, message... */, to ){

var messages = [].slice.call( arguments, 0 ),

splitIndex = messages.length - 1;

to = messages[ splitIndex ];

messages.slice( 0, splitIndex );

Ucren.dispatch( to, messages );

};

/**

* bind an message handler

* @param {String} from message address

* @param {Function} fn message handler

*/

exports.addEventListener = function( from, fn ){

Ucren.dispatch( from, fn );

};

/**

* remove an message handler

* @param {String} from message address

* @param {Function} fn message handler

*/

exports.removeEventListener = function( from, fn ){

Ucren.dispatch.remove( from, fn );

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\sence.js

*/

define("scripts/sence.js", function(exports){

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");

var setTimeout = timeline.setTimeout.bind( timeline );

var setInterval = timeline.setInterval.bind( timeline );

var menuSnd;

var gameStartSnd;

// initialize sence

exports.init = function(){

menuSnd = sound.create( "sound/menu" );

gameStartSnd = sound.create( "sound/start" );

[ background, homeMask, logo, ninja, homeDesc, dojo, newSign, newGame, quit, score, lose, developing, gameOver, flash /*, fps */ ].invoke( "set" );

// setInterval( fps.update.bind( fps ), 500 );

};

// switch sence

exports.switchSence = function( name ){

var curSence = state( "sence-name" );

var senceState = state( "sence-state" );

if( curSence.is( name ) )

return ;

var onHide = function(){

curSence.set( name );

senceState.set( "entering" );

switch( name ){

case "home-menu": this.showMenu( onShow ); break;

case "dojo-body": this.showDojo( onShow ); break;

case "game-body": this.showNewGame( onShow ); break;

case "quit-body": this.showQuit( onShow ); break;

}

}.bind( this );

var onShow = function(){

senceState.set( "ready" );

if( name == "dojo-body" || name == "quit-body" ){

exports.switchSence( "home-menu" );

}

};

senceState.set( "exiting" );

if( curSence.isunset() ) onHide();

else if( curSence.is( "home-menu" ) ) this.hideMenu( onHide );

else if( curSence.is( "dojo-body" ) ) this.hideDojo( onHide );

else if( curSence.is( "game-body" ) ) this.hideNewGame( onHide );

else if( curSence.is( "quit-body" ) ) this.hideQuit( onHide );

};

// to enter home page menu

exports.showMenu = function( callback ){

var callee = arguments.callee;

var times = callee.times = ++ callee.times || 1;

peach = fruit.create( "peach", 137, 333, true );

sandia = fruit.create( "sandia", 330, 322, true );

boom = fruit.create( "boom", 552, 367, true, 2500 );

[ peach, sandia, boom ].forEach(function( f ){ f.isHomeMenu = 1; });

peach.isDojoIcon = sandia.isNewGameIcon = boom.isQuitIcon = 1;

var group = [

[ homeMask, 0 ],

[ logo, 0 ],

[ ninja, 500 ],

[ homeDesc, 1500 ],

[ dojo, 2000 ],

[ newGame, 2000 ],

[ quit, 2000 ],

[ newSign, 2000 ],

[ peach, 2000 ],

[ sandia, 2000 ],

[ boom, 2000 ]

];

group.invoke( "show" );

[ peach, sandia ].invoke( "rotate", 2500 );

menuSnd.play();

setTimeout( callback, 2500 );

};

// to exit home page menu

exports.hideMenu = function( callback ){

[ newSign, dojo, newGame, quit ].invoke( "hide" );

[ homeMask, logo, ninja, homeDesc ].invoke( "hide" );

[ peach, sandia, boom ].invoke( "fallOff", 150 );

menuSnd.stop();

setTimeout( callback, fruit.getDropTimeSetting() );

};

// to enter game body

exports.showNewGame = function( callback ){

score.show();

lose.show();

game.start();

gameStartSnd.play();

setTimeout( callback, 1000 );

};

// to exit game body

exports.hideNewGame = function( callback ){

score.hide();

lose.hide();

gameStartSnd.stop();

setTimeout( callback, 1000 );

};

// to enter dojo mode

exports.showDojo = function( callback ){

developing.show( 250 );

setTimeout( callback, 1500 );

};

// to exit dojo mode

exports.hideDojo = function( callback ){

// TODO:

setTimeout( callback, 1000 );

};

// to enter quit page

exports.showQuit = function( callback ){

developing.show( 250 );

setTimeout( callback, 1500 );

};

// to exit quit page

exports.hideQuit = function( callback ){

// TODO:

setTimeout( callback, 1000 );

};

message.addEventListener("sence.switchSence", function( name ){

exports.switchSence( name );

});;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\state.js

*/

define("scripts/state.js", function(exports){

/**

* a simple state manager

* @author dron

* @date 2012-06-28

*/

var Ucren = require("scripts/lib/ucren");

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

/**

* usage:

* state( key ).is( value )->determine if the value of key is the given value

* state( key ).isnot( value )->determine if the value of key is not given value

* state( key ).ison()->determine if the value of key is the boolean value \'true\'

* state( key ).isoff()->determine if the value of key is the boolean value \'false\'

* state( key ).isunset()->determine if the value of key is undefined

* state( key ).set( value )->set the value of key to a given value

* state( key ).get()->get the value of key

* state( key ).on()->set the value of key to boolean value \'true\'

* state( key ).off()->set the value of key to boolean value \'false\'

*/

var stack = {};

var cache = {};

var callbacks = {};

exports = function( key ){

if( cache[ key ] )

return cache[ key ];

return cache[ key ] = {

is: function( value ){

return stack[key] === value;

},

isnot: function( value ){

return stack[key] !== value;

},

ison: function(){

return this.is( true );

},

isoff: function(){

return this.isnot( true );

},

isunset: function(){

return this.is( undefined );

},

set: function(){

var lastValue = NaN;

return function( value ){

var c;

stack[key] = value;

if( lastValue !== value && ( c = callbacks[ key ] ) )

for(var i = 0, l = c.length; i < l; i ++)

c[i].call( this, value );

lastValue = value;

}

}(),

get: function(){

return stack[key];

},

on: function(){

var me = this;

me.set( true );

return {

keep: function( time ){

timeline.setTimeout( me.set.saturate( me, false ), time );

}

}

},

off: function(){

var me = this;

me.set( false );

return {

keep: function( time ){

timeline.setTimeout( me.set.saturate( me, true ), time );

}

}

},

hook: function( fn ){

var c;

if( !( c = callbacks[ key ] ) )

callbacks[ key ] = [ fn ];

else

c.push( fn );

},

unhook: function(){

// TODO:

}

}

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\imeline.js

*/

define("scripts/timeline.js", function(exports){

/**

* a easy timeline manager

* @version 1.0

* @author dron

*/

var Ucren = require("scripts/lib/ucren");

var timerCache = {};

var timeline = {};

// var timer = timeline;

// <or>

// var timer = timeline.use( name ).init( 10 ); // to use a new timeline instance

//

// var t = timer.createTask(...);

// t.stop();

//

// timer.setTimeout(...);

// timer.setInterval(...);

// timer.getFPS();

function ClassTimer(){

this.tasks = [];

this.addingTasks = [];

this.adding = 0;

}

/**

* initialize timeline

*/

ClassTimer.prototype.init = function( ms ){

var me = this;

if( me.inited )

return ;

else

me.inited = 1;

me.startTime = now();

me.intervalTime = ms || 5;

me.count = 0;

me.intervalFn = function(){

me.count ++;

me.update( now() );

};

me.start();

return me;

};

/**

* create a task

* @param {Object} conf the config

* @return {Task} a task instance

*/

ClassTimer.prototype.createTask = function( conf ){

/* e.g. timer.createTask({

start: 500, duration: 2000, data: [a, b, c,..], object: module,

onTimeUpdate: fn(time, a, b, c,..), onTimeStart: fn(a, b, c,..), onTimeEnd: fn(a, b, c,..),

recycle: []

}); */

var task = createTask( conf );

this.addingTasks.unshift( task );

this.adding = 1;

if( conf.recycle )

this.taskList( conf.recycle, task );

this.start();

return task;

};

/**

* use a array to recycle the task

* @param {Array} queuebe use for recycling task

* @param {Task} task a task instance

* @return {Array}this queue

*/

ClassTimer.prototype.taskList = function( queue, task ){

if( !queue.clear )

queue.clear = function(){

var i = this.length;

while( i -- )

task = this[i],

task.stop(),

this.splice( i, 1 );

return this;

};

if( task )

queue.unshift( task );

return queue;

};

/**

* create a timer for once callback

* @param {Function} fn callback function

* @param {Number} time time, unit: ms

*/

ClassTimer.prototype.setTimeout = function( fn, time ){

// e.g. setTimeout(fn, time);

return this.createTask({ start: time, duration: 0, onTimeStart: fn });

};

/**

* create a timer for ongoing callback

* @param {Function} fn callback function

* @param {Number} time time, unit: ms

*/

ClassTimer.prototype.setInterval = function( fn, time ){

// e.g. setInterval(fn, time);

var timer = setInterval( fn, time );

return {

stop: function(){

clearInterval( timer );

}

};

};

/**

* get the current fps

* @return {Number} fps number

*/

ClassTimer.prototype.getFPS = function(){

var t = now(), c = this.count, fps = c / ( t - this.startTime ) * 1e3;

if( c > 1e3 )

this.count = 0,

this.startTime = t;

return fps;

};

// privates

ClassTimer.prototype.start = function(){

clearInterval( this.interval );

this.interval = setInterval( this.intervalFn, this.intervalTime );

};

ClassTimer.prototype.stop = function(){

clearInterval( this.interval );

};

ClassTimer.prototype.update = function( time ){

var tasks = this.tasks, addingTasks = this.addingTasks, adding = this.adding;

var i = tasks.length, t, task, start, duration, data;

while( i -- ){

task = tasks[i];

start = task.start;

duration = task.duration;

if( time >= start ){

if( task.stopped ){

tasks.splice( i, 1 );

continue;

}

checkStartTask( task );

if( ( t = time - start ) < duration )

updateTask( task, t );

else

updateTask( task, duration ),

task.onTimeEnd.apply( task.object, task.data.slice(1) ),

tasks.splice( i, 1 );

}

}

if( adding )

tasks.unshift.apply( tasks, addingTasks ),

addingTasks.length = adding = 0;

if( !tasks.length )

this.stop();

};

timeline.use = function( name ){

var module;

if( module = timerCache[ name ] )

return module;

else

module = timerCache[ name ] = new ClassTimer;

return module;

};

/**

* @functions

*/

var now = function(){

return new Date().getTime();

};

var createTask = function( conf ){

var object = conf.object || {};

conf.start = conf.start || 0;

return {

start: conf.start + now(),

duration: conf.duration == -1 ? 86400000 : conf.duration,

data: conf.data ? [ 0 ].concat( conf.data ) : [ 0 ],

started: 0,

object: object,

onTimeStart: conf.onTimeStart || object.onTimeStart || Ucren.nul,

onTimeUpdate: conf.onTimeUpdate || object.onTimeUpdate || Ucren.nul,

onTimeEnd: conf.onTimeEnd || object.onTimeEnd || Ucren.nul,

stop: function(){

this.stopped = 1;

}

}

};

var updateTask = function( task, time ){

var data = task.data;

data[0] = time;

task.onTimeUpdate.apply( task.object, data );

};

var checkStartTask = function( task ){

if( !task.started )

task.started = 1,

task.onTimeStart.apply( task.object, task.data.slice(1) ),

updateTask( task, 0 );

};

/**

* for compatible the old version

*/

exports = timeline.use( "default" ).init( 10 );

exports.use = function( name ){

if( Ucren.isIe )

exports;

return timeline.use( name );

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\ools.js

*/

define("scripts/tools.js", function(exports){

exports.unsetObject = function( object ){

for(var i in object)

if(object.hasOwnProperty(i) && typeof object[i] == "function")

object[i] = function(){};

};

exports.getAngleByRadian = function( radian ){

return radian * 180 / Math.PI;

}

exports.pointToRadian =function( origin, point ){

var PI = Math.PI;

if( point[0] === origin[0] ){

if ( point[1] > origin[1] )

return PI * 0.5;

return PI * 1.5

}else if( point[1] === origin[1] ){

if ( point[0] > origin[0] )

return 0;

return PI;

}

var t = Math.atan( ( origin[1] - point[1] ) / ( origin[0] - point[0] ) );

if( point[0] > origin[0] && point[1] < origin[1] )

return t + 2 * PI;

if( point[0] > origin[0] && point[1] > origin[1] )

return t;

return t + PI;

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\factory\\displacement.js

*/

define("scripts/factory/displacement.js", function(exports){

var layer = require("scripts/layer");

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

var tween = require("scripts/lib/tween");

/**

* 位移類模塊模型

*/

exports.create = function( imageSrc, width="360px",height="auto" />

var module = {};

var image;

var anim = {};

if( typeof animMap === "function" )

anim.show = anim.hide = animMap;

else

anim = animMap;

var createTask = function( start, duration, sx, sy, ex, ey, anim, mode ){

timeline.createTask({

start: start,

duration: duration,

object: module, data: [ sx, sy, ex, ey, anim, mode ],

onTimeUpdate: module.onTimeUpdate, onTimeStart: module.onTimeStart, onTimeEnd: module.onTimeEnd,

recycle: module.anims

});

};

module.anims = [];

module.set = function(){

image = layer.createImage( "default", imageSrc, origX, origY, width="360px",height="auto" />

};

module.show = function( start ){

createTask( start, animDur, origX, origY, targetX, targetY, anim.show, "show" );

};

module.hide = function(){

this.anims.clear();

createTask( 0, animDur, targetX, targetY, origX, origY, anim.hide, "hide" );

};

module.onTimeUpdate = function( time, sx, sy, ex, ey, anim ){

image.attr( {

x: anim( time, sx, ex - sx, animDur ),

y: anim( time, sy, ey - sy, animDur )

} );

};

module.onTimeStart = function(){

};

module.onTimeEnd = function( sx, sy, ex, ey, anim ){

if( anim === "hide" )

image.hide();

};

return module;

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\factory\\fruit.js

*/

define("scripts/factory/fruit.js", function(exports){

var layer = require("scripts/layer");

var Ucren = require("scripts/lib/ucren");

var timeline = require("scripts/timeline").use( "fruit" ).init( 1 );

var timeline2 = require("scripts/timeline").use( "fruit-apart" ).init( 1 );

var tween = require("scripts/lib/tween");

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

var flame = require("scripts/object/flame");

var flash = require("scripts/object/flash");

var juice = require("scripts/factory/juice");

var ie = Ucren.isIe;

var safari = Ucren.isSafari;

/**

* 水果模塊模型

*/

var zoomAnim = tween.exponential.co;

var rotateAnim = tween.circular;

var linearAnim = tween.linear;

var dropAnim = tween.quadratic.ci;

var fallOffAnim = tween.quadratic.co;

var random = Ucren.randomNumber;

var min = Math.min;

var average = function( a, b ){ return ( ( a + b ) / 2 ) >> 0; };

var dropTime = 1200, dropXScope = 200, shadowPos = 50;

var infos = {

// type: [ imageSrc, width="360px",height="auto" />

boom: [ "images/fruit/boom.png", 66, 68, 26, 0, 0, null ],

peach: [ "images/fruit/peach.png", 62, 59, 37, -50, 0, "#e6c731" ],

sandia: [ "images/fruit/sandia.png", 98, 85, 38, -100, 0, "#c00" ],

apple: [ "images/fruit/apple.png", 66, 66, 31, -54, 0, "#c8e925" ],

banana: [ "images/fruit/banana.png", 126, 50, 43, 90, 0, null ],

basaha: [ "images/fruit/basaha.png", 68, 72, 32, -135, 0, "#c00" ]

};

// TODO: 是否水果全開?

var types = [ "peach", "sandia", "apple", "banana", "basaha" ];

// var types = [ "sandia", "boom" ];

var rotateSpeed = [ 60, 50, 40, -40, -50, -60 ];

var fruitCache = [];

function ClassFruit(conf){

var info = infos[ conf.type ], radius = info[3];

this.type = conf.type;

this.originX = conf.originX;

this.originY = conf.originY;

this.radius = radius;

this.startX = conf.originX;

this.startY = conf.originY;

this.radius = radius;

this.anims = [];

if( this.type === "boom" )

this.flame = flame.create( this.startX - radius + 4, this.startY - radius + 5, conf.flameStart || 0 );

}

ClassFruit.prototype.set = function( hide ){

var inf = infos[ this.type ], radius = this.radius;

this.shadow = layer.createImage( "fruit", "images/shadow.png", this.startX - radius, this.startY - radius + shadowPos, 106, 77 );

this.image = layer.createImage( "fruit", inf[0], this.startX - radius, this.startY - radius, inf[1], inf[2] );

if( hide )

this.image.hide(),

this.shadow.hide();

return this;

};

ClassFruit.prototype.pos = function( x, y ){

if( x == this.originX && y == this.originY )

return ;

var r = this.radius;

this.originX = x;

this.originY = y;

this.image.attr({ x: x -= r, y: y -= r });

this.shadow.attr({ x: x, y: y + shadowPos });

if( this.type === "boom" )

this.flame.pos( x + 4, y + 5 );

};

ClassFruit.prototype.show = function( start ){

timeline.createTask({

start: start, duration: 500, data: [ 1e-5, 1, "show" ],

object: this, onTimeUpdate: this.onScaling, onTimeStart: this.onShowStart,

recycle: this.anims

});

};

ClassFruit.prototype.hide = function( start ){

if( this.type !== "boom" ) // if it is not a boom, it can\'t to be hide.

return ;

this.anims.clear();

this.flame.remove();

timeline.createTask({

start: start, duration: 500, data: [ 1, 1e-5, "hide" ],

object: this, onTimeUpdate: this.onScaling, onTimeEnd: this.onHideEnd,

recycle: this.anims

});

};

ClassFruit.prototype.rotate = function( start, speed ){

this.rotateSpeed = speed || rotateSpeed[ random( 6 ) ];

this.rotateAnim = timeline.createTask({

start: start, duration: -1,

object: this, onTimeUpdate: this.onRotating,

recycle: this.anims

});

};

ClassFruit.prototype.broken = function( angle ){

if( this.brokend )return;

this.brokend = true;

var index;

if( ( index = fruitCache.indexOf( this ) ) > -1 )

fruitCache.splice( index, 1 );

if( this.type !== "boom" )

flash.showAt( this.originX, this.originY, angle ),

juice.create( this.originX, this.originY, infos[ this.type ][6] ),

this.apart( angle );

else

this.hide();

};

ClassFruit.prototype.pause = function(){

if( this.brokend )

return;

this.anims.clear();

if( this.type == "boom" )

this.flame.remove();

};

// 分開

ClassFruit.prototype.apart = function( angle ){

this.anims.clear();

this.image.hide();

this.shadow.hide();

this.aparted = true;

var inf = infos[ this.type ], preSrc = inf[0].replace( ".png", "" ), radius = this.radius;

var create = layer.createImage.saturate( layer, this.startX - radius, this.startY - radius, inf[1], inf[2] );

angle = ( ( angle % 180 ) + 360 + inf[4] ) % 360;

this.bImage1 = create( "fruit", preSrc + "-1.png" );

this.bImage2 = create( "fruit", preSrc + "-2.png" );

[ this.bImage1, this.bImage2 ].invoke( "rotate", angle );

this.apartAngle = angle;

timeline2.createTask({

start: 0, duration: dropTime, object: this,

onTimeUpdate: this.onBrokenDropUpdate, onTimeStart: this.onBrokenDropStart, onTimeEnd: this.onBrokenDropEnd,

recycle: this.anims

});

};

// 拋出

ClassFruit.prototype.shotOut = function(){

var sign = [ -1, 1 ];

return function( start, endX ){

this.shotOutStartX = this.originX;

this.shotOutStartY = this.originY;

this.shotOutEndX = average( this.originX, endX );

this.shotOutEndY = min( this.startY - random( this.startY - 100 ), 200 );

this.fallOffToX = endX;

timeline.createTask({

start: start, duration: dropTime, object: this,

onTimeUpdate: this.onShotOuting, onTimeStart: this.onShotOutStart, onTimeEnd: this.onShotOutEnd,

recycle: this.anims

});

if( this.type != "boom" )

this.rotate( 0, ( random( 180 ) + 90 ) * sign[ random( 2 ) ] );

return this;

};

}();

// 掉落

ClassFruit.prototype.fallOff = function(){

var sign = [ -1, 1 ];

var signIndex = 0;

return function( start, x ){

if( this.aparted || this.brokend )

return ;

var y = 600;

if( typeof x !== "number" )

x = this.originX + random( dropXScope ) * sign[ ( signIndex ++ ) % 2 ];

this.fallTargetX = x;

this.fallTargetY = y;

timeline.createTask({

start: start, duration: dropTime, object: this,

onTimeUpdate: this.onFalling, onTimeStart: this.onFallStart, onTimeEnd: this.onFallEnd,

recycle: this.anims

});

}

}();

ClassFruit.prototype.remove = function(){

var index;

this.anims.clear();

if( this.image )

this.image.remove(),

this.shadow.remove();

if( this.bImage1 )

this.bImage1.remove(),

this.bImage2.remove();

if( this.type === "boom" )

this.flame.remove();

if( ( index = fruitCache.indexOf( this ) ) > -1 )

fruitCache.splice( index, 1 );

for(var name in this)

if( typeof this[name] === "function" )

this[name] = function( name ){

return function(){

throw new Error( "method " + name + " has been removed" );

};

}( name );

else delete this[name];

message.postMessage( this, "fruit.remove" );

};

// 顯示/隱藏 相關(guān)

ClassFruit.prototype.onShowStart = function(){

this.image.show();

// this.shadow.show();

};

ClassFruit.prototype.onScaling = function( time, a, b, z ){

this.image.scale( z = zoomAnim( time, a, b - a, 500 ), z );

this.shadow.scale( z, z );

};

ClassFruit.prototype.onHideEnd = function(){

this.remove();

};

// 旋轉(zhuǎn)相關(guān)

ClassFruit.prototype.onRotateStart = function(){

};

ClassFruit.prototype.onRotating = function( time ){

this.image.rotate( ( this.rotateSpeed * time / 1e3 ) % 360, true );

};

// 裂開相關(guān)

ClassFruit.prototype.onBrokenDropUpdate = function( time ){

var radius = this.radius;

this.bImage1.attr({

x: linearAnim( time, this.brokenPosX - radius, this.brokenTargetX1, dropTime ),

y: dropAnim( time, this.brokenPosY - radius, this.brokenTargetY1 - this.brokenPosY + radius, dropTime )

}).rotate( linearAnim( time, this.apartAngle, this.bImage1RotateAngle, dropTime ), true );

this.bImage2.attr({

x: linearAnim( time, this.brokenPosX - radius, this.brokenTargetX2, dropTime ),

y: dropAnim( time, this.brokenPosY - radius, this.brokenTargetY2 - this.brokenPosY + radius, dropTime )

}).rotate( linearAnim( time, this.apartAngle, this.bImage2RotateAngle, dropTime ), true );

};

ClassFruit.prototype.onBrokenDropStart = function(){

this.brokenTargetX1 = -( random( dropXScope ) + 75 );

this.brokenTargetX2 = random( dropXScope + 75 );

this.brokenTargetY1 = 600;

this.brokenTargetY2 = 600;

this.brokenPosX = this.originX;

this.brokenPosY = this.originY;

this.bImage1RotateAngle = - random( 150 ) - 50;

this.bImage2RotateAngle = random( 150 ) + 50;

for(var f, i = fruitCache.length - 1; i >= 0; i --)

if( fruitCache[i] === this )

fruitCache.splice( i, 1 );

};

ClassFruit.prototype.onBrokenDropEnd = function(){

this.remove();

};

// 拋出相關(guān)

ClassFruit.prototype.onShotOuting = function( time ){

this.pos(

linearAnim( time, this.shotOutStartX, this.shotOutEndX - this.shotOutStartX, dropTime ),

fallOffAnim( time, this.shotOutStartY, this.shotOutEndY - this.shotOutStartY, dropTime )

);

};

ClassFruit.prototype.onShotOutStart = function(){

// body...

};

ClassFruit.prototype.onShotOutEnd = function(){

this.fallOff( 0, this.fallOffToX );

};

// 掉落相關(guān)

ClassFruit.prototype.onFalling = function( time ){

var y;

this.pos(

linearAnim( time, this.brokenPosX, this.fallTargetX - this.brokenPosX, dropTime ),

y = dropAnim( time, this.brokenPosY, this.fallTargetY - this.brokenPosY, dropTime )

);

this.checkForFallOutOfViewer( y );

};

ClassFruit.prototype.onFallStart = function(){

this.brokenPosX = this.originX;

this.brokenPosY = this.originY;

};

ClassFruit.prototype.onFallEnd = function(){

message.postMessage( this, "fruit.fallOff" );

this.remove();

};

// privates

ClassFruit.prototype.checkForFallOutOfViewer = function( y ){

if( y > 480 + this.radius )

this.checkForFallOutOfViewer = Ucren.nul,

this.rotateAnim && this.rotateAnim.stop(),

message.postMessage( this, "fruit.fallOutOfViewer" );

};

exports.create = function( type, originX, originY, isHide, flameStart ){

if( typeof type == "number" ) // 缺省 type

isHide = originY,

originY = originX,

originX = type,

type = getType();

var fruit = new ClassFruit({ type: type, originX: originX, originY: originY, flameStart: flameStart }).set( isHide );

fruitCache.unshift( fruit );

return fruit;

};

exports.getFruitInView = function(){

return fruitCache;

};

exports.getDropTimeSetting = function(){

return dropTime;

};

function getType(){

if( random( 8 ) == 4 )

return "boom";

else

return types[ random( 5 ) ];

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\factory\\juice.js

*/

define("scripts/factory/juice.js", function(exports){

/**

* 果汁

*/

var Ucren = require("scripts/lib/ucren");

var layer = require("scripts/layer").getLayer("juice");

var timeline = require("scripts/timeline").use( "juice" ).init( 10 );

var tween = require("scripts/lib/tween");

var tools = require("scripts/tools");

var random = Ucren.randomNumber;

var dur = 1500;

var anim = tween.exponential.co;

var dropAnim = tween.quadratic.co;

var sin = Math.sin;

var cos = Math.cos;

var num = 10;

var radius = 10;

// if( Ucren.isIe6 || Ucren.isSafari )

// switchOn = false;

// if( Ucren.isIe || Ucren.isSafari )

// num = 6;

function ClassJuice( x, y, color ){

this.originX = x;

this.originY = y;

this.color = color;

this.distance = random( 200 ) + 100;

this.radius = radius;

this.dir = random( 360 ) * Math.PI / 180;

}

ClassJuice.prototype.render = function(){

this.circle = layer.circle( this.originX, this.originY, this.radius ).attr({

fill: this.color,

stroke: "none"

});

};

ClassJuice.prototype.sputter = function(){

timeline.createTask({

start: 0, duration: dur,

object: this, onTimeUpdate: this.onTimeUpdate, onTimeEnd: this.onTimeEnd

});

};

ClassJuice.prototype.onTimeUpdate = function( time ){

var distance, x, y, z;

distance = anim( time, 0, this.distance, dur );

x = this.originX + distance * cos( this.dir );

y = this.originY + distance * sin( this.dir ) + dropAnim( time, 0, 200, dur );

z = anim( time, 1, -1, dur );

this.circle.attr({ cx: x, cy: y }).scale( z, z );

};

ClassJuice.prototype.onTimeEnd = function(){

this.circle.remove();

tools.unsetObject( this );

};

exports.create = function( x, y, color ){

for(var i = 0; i < num; i ++)

this.createOne( x, y, color );

};

exports.createOne = function( x, y, color ){

if( !color )

return;

var juice = new ClassJuice( x, y, color );

juice.render();

juice.sputter();

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\factory\otate.js

*/

define("scripts/factory/rotate.js", function(exports){

var layer = require("scripts/layer");

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

var Ucren = require("scripts/lib/ucren");

/**

* 旋轉(zhuǎn)類模塊模型

*/

exports.create = function( imageSrc, x, y, w, h, z, anim, animDur ){

var module = {}, image;

var rotateDire = [12, -12][Ucren.randomNumber(2)];

var defaultAngle = Ucren.randomNumber(360);

module.anims = [];

module.set = function(){

image = layer.createImage( "default", imageSrc, x, y, w, h ).scale( z, z ).rotate( defaultAngle, true );

};

module.show = function(start){

timeline.createTask({

start: start,

duration: animDur,

object: this,

data: [z, 1],

onTimeUpdate: this.onZooming,

onTimeEnd: this.onShowEnd,

recycle: this.anims

});

};

module.hide = function(start){

this.anims.clear();

timeline.createTask({

start: start,

duration: animDur,

object: this,

data: [ 1, z ],

onTimeUpdate: this.onZooming,

recycle: this.anims

});

};

module.onShowEnd = function(name){

this.anims.clear();

timeline.createTask({

start: 0,

duration: -1,

object: this,

onTimeUpdate: module.onRotating,

recycle: this.anims

});

};

module.onZooming = function(){

var z;

return function( time, a, b ){

image.scale( z = anim( time, a, b - a, animDur ), z );

}

}();

module.onRotating = function(){

var lastTime = 0, an = defaultAngle;

return function( time, name, a, b ){

an = ( an + ( time - lastTime ) / 1e3 * rotateDire ) % 360;

image.rotate( an, true );

lastTime = time;

}

}();

return module;

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\lib\\buzz.js

*/

define("scripts/lib/buzz.js", function(exports){

// ----------------------------------------------------------------------------

// Buzz, a Javascript HTML5 Audio library

// v 1.0.x beta

// Licensed under the MIT license.

// http://buzz.jaysalvat.com/

// ----------------------------------------------------------------------------

// Copyright (C) 2011 Jay Salvat

// http://jaysalvat.com/

// ----------------------------------------------------------------------------

// Permission is hereby granted, free of charge, to any person obtaining a copy

// of this software and associated documentation files ( the "Software" ), to deal

// in the Software without restriction, including without limitation the rights

// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

// copies of the Software, and to permit persons to whom the Software is

// furnished to do so, subject to the following conditions:

//

// The above copyright notice and this permission notice shall be included in

// all copies or substantial portions of the Software.

//

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN

// THE SOFTWARE.

// ----------------------------------------------------------------------------

var buzz = {

defaults: {

autoplay: false,

duration: 5000,

formats: [],

loop: false,

placeholder: \'--\',

preload: \'metadata\',

volume: 80

},

types: {

\'mp3\': \'audio/mpeg\',

\'ogg\': \'audio/ogg\',

\'wav\': \'audio/wav\',

\'aac\': \'audio/aac\',

\'m4a\': \'audio/x-m4a\'

},

sounds: [],

el: document.createElement( \'audio\' ),

sound: function( src, options ) {

options = options || {};

var pid = 0,

events = [],

eventsOnce = {},

supported = buzz.isSupported();

// publics

this.load = function() {

if ( !supported ) {

return this;

}

this.sound.load();

return this;

};

this.play = function() {

if ( !supported ) {

return this;

}

this.sound.play();

return this;

};

this.togglePlay = function() {

if ( !supported ) {

return this;

}

if ( this.sound.paused ) {

this.sound.play();

} else {

this.sound.pause();

}

return this;

};

this.pause = function() {

if ( !supported ) {

return this;

}

this.sound.pause();

return this;

};

this.isPaused = function() {

if ( !supported ) {

return null;

}

return this.sound.paused;

};

this.stop = function() {

if ( !supported ) {

return this;

}

this.setTime( this.getDuration() );

this.sound.pause();

return this;

};

this.isEnded = function() {

if ( !supported ) {

return null;

}

return this.sound.ended;

};

this.loop = function() {

if ( !supported ) {

return this;

}

this.sound.loop = \'loop\';

this.bind( \'ended.buzzloop\', function() {

this.currentTime = 0;

this.play();

});

return this;

};

this.unloop = function() {

if ( !supported ) {

return this;

}

this.sound.removeAttribute( \'loop\' );

this.unbind( \'ended.buzzloop\' );

return this;

};

this.mute = function() {

if ( !supported ) {

return this;

}

this.sound.muted = true;

return this;

};

this.unmute = function() {

if ( !supported ) {

return this;

}

this.sound.muted = false;

return this;

};

this.toggleMute = function() {

if ( !supported ) {

return this;

}

this.sound.muted = !this.sound.muted;

return this;

};

this.isMuted = function() {

if ( !supported ) {

return null;

}

return this.sound.muted;

};

this.setVolume = function( volume ) {

if ( !supported ) {

return this;

}

if ( volume < 0 ) {

volume = 0;

}

if ( volume > 100 ) {

volume = 100;

}

this.volume = volume;

this.sound.volume = volume / 100;

return this;

};

this.getVolume = function() {

if ( !supported ) {

return this;

}

return this.volume;

};

this.increaseVolume = function( value ) {

return this.setVolume( this.volume + ( value || 1 ) );

};

this.decreaseVolume = function( value ) {

return this.setVolume( this.volume - ( value || 1 ) );

};

this.setTime = function( time ) {

if ( !supported ) {

return this;

}

this.whenReady( function() {

this.sound.currentTime = time;

});

return this;

};

this.getTime = function() {

if ( !supported ) {

return null;

}

var time = Math.round( this.sound.currentTime * 100 ) / 100;

return isNaN( time ) ? buzz.defaults.placeholder : time;

};

this.setPercent = function( percent ) {

if ( !supported ) {

return this;

}

return this.setTime( buzz.fromPercent( percent, this.sound.duration ) );

};

this.getPercent = function() {

if ( !supported ) {

return null;

}

var percent = Math.round( buzz.toPercent( this.sound.currentTime, this.sound.duration ) );

return isNaN( percent ) ? buzz.defaults.placeholder : percent;

};

this.setSpeed = function( duration ) {

if ( !supported ) {

return this;

}

this.sound.playbackRate = duration;

};

this.getSpeed = function() {

if ( !supported ) {

return null;

}

return this.sound.playbackRate;

};

this.getDuration = function() {

if ( !supported ) {

return null;

}

var duration = Math.round( this.sound.duration * 100 ) / 100;

return isNaN( duration ) ? buzz.defaults.placeholder : duration;

};

this.getPlayed = function() {

if ( !supported ) {

return null;

}

return timerangeToArray( this.sound.played );

};

this.getBuffered = function() {

if ( !supported ) {

return null;

}

return timerangeToArray( this.sound.buffered );

};

this.getSeekable = function() {

if ( !supported ) {

return null;

}

return timerangeToArray( this.sound.seekable );

};

this.getErrorCode = function() {

if ( supported && this.sound.error ) {

return this.sound.error.code;

}

return 0;

};

this.getErrorMessage = function() {

if ( !supported ) {

return null;

}

switch( this.getErrorCode() ) {

case 1:

return \'MEDIA_ERR_ABORTED\';

case 2:

return \'MEDIA_ERR_NETWORK\';

case 3:

return \'MEDIA_ERR_DECODE\';

case 4:

return \'MEDIA_ERR_SRC_NOT_SUPPORTED\';

default:

return null;

}

};

this.getStateCode = function() {

if ( !supported ) {

return null;

}

return this.sound.readyState;

};

this.getStateMessage = function() {

if ( !supported ) {

return null;

}

switch( this.getStateCode() ) {

case 0:

return \'HAVE_NOTHING\';

case 1:

return \'HAVE_METADATA\';

case 2:

return \'HAVE_CURRENT_DATA\';

case 3:

return \'HAVE_FUTURE_DATA\';

case 4:

return \'HAVE_ENOUGH_DATA\';

default:

return null;

}

};

this.getNetworkStateCode = function() {

if ( !supported ) {

return null;

}

return this.sound.networkState;

};

this.getNetworkStateMessage = function() {

if ( !supported ) {

return null;

}

switch( this.getNetworkStateCode() ) {

case 0:

return \'NETWORK_EMPTY\';

case 1:

return \'NETWORK_IDLE\';

case 2:

return \'NETWORK_LOADING\';

case 3:

return \'NETWORK_NO_SOURCE\';

default:

return null;

}

};

this.set = function( key, value ) {

if ( !supported ) {

return this;

}

this.sound[ key ] = value;

return this;

};

this.get = function( key ) {

if ( !supported ) {

return null;

}

return key ? this.sound[ key ] : this.sound;

};

this.bind = function( types, func ) {

if ( !supported ) {

return this;

}

types = types.split( \' \' );

var that = this,

efunc = function( e ) { func.call( that, e ); };

for( var t = 0; t < types.length; t++ ) {

var type = types[ t ],

idx = type;

type = idx.split( \'.\' )[ 0 ];

events.push( { idx: idx, func: efunc } );

this.sound.addEventListener( type, efunc, true );

}

return this;

};

this.unbind = function( types ) {

if ( !supported ) {

return this;

}

types = types.split( \' \' );

for( var t = 0; t < types.length; t++ ) {

var idx = types[ t ],

type = idx.split( \'.\' )[ 0 ];

for( var i = 0; i < events.length; i++ ) {

var namespace = events[ i ].idx.split( \'.\' );

if ( events[ i ].idx == idx || ( namespace[ 1 ] && namespace[ 1 ] == idx.replace( \'.\', \'\' ) ) ) {

this.sound.removeEventListener( type, events[ i ].func, true );

// remove event

events.splice(i, 1);

}

}

}

return this;

};

this.bindOnce = function( type, func ) {

if ( !supported ) {

return this;

}

var that = this;

eventsOnce[ pid++ ] = false;

this.bind( pid + type, function() {

if ( !eventsOnce[ pid ] ) {

eventsOnce[ pid ] = true;

func.call( that );

}

that.unbind( pid + type );

});

};

this.trigger = function( types ) {

if ( !supported ) {

return this;

}

types = types.split( \' \' );

for( var t = 0; t < types.length; t++ ) {

var idx = types[ t ];

for( var i = 0; i < events.length; i++ ) {

var eventType = events[ i ].idx.split( \'.\' );

if ( events[ i ].idx == idx || ( eventType[ 0 ] && eventType[ 0 ] == idx.replace( \'.\', \'\' ) ) ) {

var evt = document.createEvent(\'HTMLEvents\');

evt.initEvent( eventType[ 0 ], false, true );

this.sound.dispatchEvent( evt );

}

}

}

return this;

};

this.fadeTo = function( to, duration, callback ) {

if ( !supported ) {

return this;

}

if ( duration instanceof Function ) {

callback = duration;

duration = buzz.defaults.duration;

} else {

duration = duration || buzz.defaults.duration;

}

var from = this.volume,

delay = duration / Math.abs( from - to ),

that = this;

this.play();

function doFade() {

setTimeout( function() {

if ( from < to && that.volume < to ) {

that.setVolume( that.volume += 1 );

doFade();

} else if ( from > to && that.volume > to ) {

that.setVolume( that.volume -= 1 );

doFade();

} else if ( callback instanceof Function ) {

callback.apply( that );

}

}, delay );

}

this.whenReady( function() {

doFade();

});

return this;

};

this.fadeIn = function( duration, callback ) {

if ( !supported ) {

return this;

}

return this.setVolume(0).fadeTo( 100, duration, callback );

};

this.fadeOut = function( duration, callback ) {

if ( !supported ) {

return this;

}

return this.fadeTo( 0, duration, callback );

};

this.fadeWith = function( sound, duration ) {

if ( !supported ) {

return this;

}

this.fadeOut( duration, function() {

this.stop();

});

sound.play().fadeIn( duration );

return this;

};

this.whenReady = function( func ) {

if ( !supported ) {

return null;

}

var that = this;

if ( this.sound.readyState === 0 ) {

this.bind( \'canplay.buzzwhenready\', function() {

func.call( that );

});

} else {

func.call( that );

}

};

// privates

function timerangeToArray( timeRange ) {

var array = [],

length = timeRange.length - 1;

for( var i = 0; i <= length; i++ ) {

array.push({

start: timeRange.start( length ),

end: timeRange.end( length )

});

}

return array;

}

function getExt( filename ) {

return filename.split(\'.\').pop();

}

function addSource( sound, src ) {

var source = document.createElement( \'source\' );

source.src = src;

if ( buzz.types[ getExt( src ) ] ) {

source.type = buzz.types[ getExt( src ) ];

}

sound.appendChild( source );

}

// init

if ( supported && src ) {

for(var i in buzz.defaults ) {

if(buzz.defaults.hasOwnProperty(i)) {

options[ i ] = options[ i ] || buzz.defaults[ i ];

}

}

this.sound = document.createElement( \'audio\' );

if ( src instanceof Array ) {

for( var j in src ) {

if(src.hasOwnProperty(j)) {

addSource( this.sound, src[ j ] );

}

}

} else if ( options.formats.length ) {

for( var k in options.formats ) {

if(options.formats.hasOwnProperty(k)) {

addSource( this.sound, src + \'.\' + options.formats[ k ] );

}

}

} else {

addSource( this.sound, src );

}

if ( options.loop ) {

this.loop();

}

if ( options.autoplay ) {

this.sound.autoplay = \'autoplay\';

}

if ( options.preload === true ) {

this.sound.preload = \'auto\';

} else if ( options.preload === false ) {

this.sound.preload = \'none\';

} else {

this.sound.preload = options.preload;

}

this.setVolume( options.volume );

buzz.sounds.push( this );

}

},

group: function( sounds ) {

sounds = argsToArray( sounds, arguments );

// publics

this.getSounds = function() {

return sounds;

};

this.add = function( soundArray ) {

soundArray = argsToArray( soundArray, arguments );

for( var a = 0; a < soundArray.length; a++ ) {

sounds.push( soundArray[ a ] );

}

};

this.remove = function( soundArray ) {

soundArray = argsToArray( soundArray, arguments );

for( var a = 0; a < soundArray.length; a++ ) {

for( var i = 0; i < sounds.length; i++ ) {

if ( sounds[ i ] == soundArray[ a ] ) {

delete sounds[ i ];

break;

}

}

}

};

this.load = function() {

fn( \'load\' );

return this;

};

this.play = function() {

fn( \'play\' );

return this;

};

this.togglePlay = function( ) {

fn( \'togglePlay\' );

return this;

};

this.pause = function( time ) {

fn( \'pause\', time );

return this;

};

this.stop = function() {

fn( \'stop\' );

return this;

};

this.mute = function() {

fn( \'mute\' );

return this;

};

this.unmute = function() {

fn( \'unmute\' );

return this;

};

this.toggleMute = function() {

fn( \'toggleMute\' );

return this;

};

this.setVolume = function( volume ) {

fn( \'setVolume\', volume );

return this;

};

this.increaseVolume = function( value ) {

fn( \'increaseVolume\', value );

return this;

};

this.decreaseVolume = function( value ) {

fn( \'decreaseVolume\', value );

return this;

};

this.loop = function() {

fn( \'loop\' );

return this;

};

this.unloop = function() {

fn( \'unloop\' );

return this;

};

this.setTime = function( time ) {

fn( \'setTime\', time );

return this;

};

this.setduration = function( duration ) {

fn( \'setduration\', duration );

return this;

};

this.set = function( key, value ) {

fn( \'set\', key, value );

return this;

};

this.bind = function( type, func ) {

fn( \'bind\', type, func );

return this;

};

this.unbind = function( type ) {

fn( \'unbind\', type );

return this;

};

this.bindOnce = function( type, func ) {

fn( \'bindOnce\', type, func );

return this;

};

this.trigger = function( type ) {

fn( \'trigger\', type );

return this;

};

this.fade = function( from, to, duration, callback ) {

fn( \'fade\', from, to, duration, callback );

return this;

};

this.fadeIn = function( duration, callback ) {

fn( \'fadeIn\', duration, callback );

return this;

};

this.fadeOut = function( duration, callback ) {

fn( \'fadeOut\', duration, callback );

return this;

};

// privates

function fn() {

var args = argsToArray( null, arguments ),

func = args.shift();

for( var i = 0; i < sounds.length; i++ ) {

sounds[ i ][ func ].apply( sounds[ i ], args );

}

}

function argsToArray( array, args ) {

return ( array instanceof Array ) ? array : Array.prototype.slice.call( args );

}

},

all: function() {

return new buzz.group( buzz.sounds );

},

isSupported: function() {

return !!buzz.el.canPlayType;

},

isOGGSupported: function() {

return !!buzz.el.canPlayType && buzz.el.canPlayType( \'audio/ogg; codecs="vorbis"\' );

},

isWAVSupported: function() {

return !!buzz.el.canPlayType && buzz.el.canPlayType( \'audio/wav; codecs="1"\' );

},

isMP3Supported: function() {

return !!buzz.el.canPlayType && buzz.el.canPlayType( \'audio/mpeg;\' );

},

isAACSupported: function() {

return !!buzz.el.canPlayType && ( buzz.el.canPlayType( \'audio/x-m4a;\' ) || buzz.el.canPlayType( \'audio/aac;\' ) );

},

toTimer: function( time, withHours ) {

var h, m, s;

h = Math.floor( time / 3600 );

h = isNaN( h ) ? \'--\' : ( h >= 10 ) ? h : \'0\' + h;

m = withHours ? Math.floor( time / 60 % 60 ) : Math.floor( time / 60 );

m = isNaN( m ) ? \'--\' : ( m >= 10 ) ? m : \'0\' + m;

s = Math.floor( time % 60 );

s = isNaN( s ) ? \'--\' : ( s >= 10 ) ? s : \'0\' + s;

return withHours ? h + \':\' + m + \':\' + s : m + \':\' + s;

},

fromTimer: function( time ) {

var splits = time.toString().split( \':\' );

if ( splits && splits.length == 3 ) {

time = ( parseInt( splits[ 0 ], 10 ) * 3600 ) + ( parseInt(splits[ 1 ], 10 ) * 60 ) + parseInt( splits[ 2 ], 10 );

}

if ( splits && splits.length == 2 ) {

time = ( parseInt( splits[ 0 ], 10 ) * 60 ) + parseInt( splits[ 1 ], 10 );

}

return time;

},

toPercent: function( value, total, decimal ) {

var r = Math.pow( 10, decimal || 0 );

return Math.round( ( ( value * 100 ) / total ) * r ) / r;

},

fromPercent: function( percent, total, decimal ) {

var r = Math.pow( 10, decimal || 0 );

return Math.round( ( ( total / 100 ) * percent ) * r ) / r;

}

};

exports = buzz;;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\lib\aphael.js

*/

define("scripts/lib/raphael.js", function(exports){

/*

* Raphael 1.5.2 - JavaScript Vector Library

*

* Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)

* Licensed under the MIT (http://raphaeljs.com/license.html) license.

*/

var Raphael;

var window = {};

(function(){function a(){if(a.is(arguments[0],G)){var b=arguments[0],d=bV[m](a,b.splice(0,3+a.is(b[0],E))),e=d.set();for(var g=0,h=b[w];g<h;g++){var i=b[g]||{};c[f](i.type)&&e[L](d[i.type]().attr(i))}return e}return bV[m](a,arguments)}a.version="1.5.2";var b=/[, ]+/,c={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},d=/\\{(\\d+)\\}/g,e="prototype",f="hasOwnProperty",g=document,h=window,i={was:Object[e][f].call(h,"Raphael"),is:h.Raphael},j=function(){this.customAttributes={}},k,l="appendChild",m="apply",n="concat",o="createTouch"in g,p="",q=" ",r=String,s="split",t="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[s](q),u={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},v="join",w="length",x=r[e].toLowerCase,y=Math,z=y.max,A=y.min,B=y.abs,C=y.pow,D=y.PI,E="number",F="string",G="array",H="toString",I="fill",J=Object[e][H],K={},L="push",M=/^url\\([\'"]?([^\\)]+?)[\'"]?\\)$/i,N=/^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i,O={"NaN":1,Infinity:1,"-Infinity":1},P=/^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,Q=y.round,R="setAttribute",S=parseFloat,T=parseInt,U=" progid:DXImageTransform.Microsoft",V=r[e].toUpperCase,W={blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:"10px \\"Arial\\"","font-family":"\\"Arial\\"","font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width="360px",height="auto" />

exports = Raphael;;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\lib\\sound.js

*/

define("scripts/lib/sound.js", function(exports){

/**

* 簡易聲效控制

*/

/**

* 使用方法:

*

* var sound = require("scripts/lib/sound/main");

*

* var snd = sound.create("sounds/myfile");

* snd.play();

*/

var buzz = require("scripts/lib/buzz");

var supported = buzz.isSupported();

var config = {

formats: [ "ogg", "mp3" ],

preload: true,

autoload: true,

loop: false

};

function ClassBuzz( src ){

this.sound = new buzz.sound( src, config );

}

ClassBuzz.prototype.play = function( s ){

s = this.sound;

s.setPercent( 0 );

s.setVolume( 100 );

s.play();

};

ClassBuzz.prototype.stop = function(){

this.sound.fadeOut( 1e3, function(){

this.pause();

} );

};

exports.create = function( src ){

if( !supported )

return unSupported;

else

return new ClassBuzz( src );

}

function unSupported(){

// TODO:

}

unSupported.play =

unSupported.stop = function(){

// TODO:

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\lib\ween.js

*/

define("scripts/lib/tween.js", function(exports){

exports.exponential = function(){};

exports.exponential.co = function(index, offset, target, framesNum){ return (index == framesNum) ? offset + target : target * (-Math.pow(2, -10 * index / framesNum) + 1) + offset; };

// exports.exponential.ci = function(index, offset, target, framesNum){ return (index == 0) ? offset : target * Math.pow(2, 10 * (index / framesNum - 1)) + offset; }

exports.bounce = function(){};

exports.bounce.co = function(index, offset, target, framesNum){ if((index /= framesNum) < (1 / 2.75)) return target * (7.5625 * index * index) + offset; else if(index < (2 / 2.75)) return target * (7.5625 * (index -= (1.5 / 2.75)) * index + .75) + offset; else if(index < (2.5 / 2.75)) return target * (7.5625 * (index -= (2.25 / 2.75)) * index + .9375) + offset; else return target * (7.5625 * (index -= (2.625 / 2.75)) * index + .984375) + offset; };

exports.quadratic = function(){};

exports.quadratic.ci = function(index, offset, target, framesNum){ return target * (index /= framesNum) * index + offset; };

exports.quadratic.co = function(index, offset, target, framesNum){ return - target * (index /= framesNum) * (index - 2) + offset; }

exports.quadratic.cio = function(index, offset, target, framesNum){ if((index /= framesNum / 2) < 1) return target / 2 * index * index + offset; else return - target / 2 * ((-- index) * (index - 2) - 1) + offset; };

exports.circular = function(index, offset, target, framesNum){ if((index /= framesNum / 2) < 1) return - target / 2 * (Math.sqrt(1 - index * index) - 1) + offset; else return target / 2 * (Math.sqrt(1 - (index -= 2) * index) + 1) + offset; }

exports.linear = function(index, offset, target, framesNum){ return target * index / framesNum + offset; };

exports.back = function(){};

exports.back.ci = function(index, offset, target, framesNum, s){ s = 1.70158; return target * (index /= framesNum) * index * ((s + 1) * index - s) + offset; };

exports.back.co = function(index, offset, target, framesNum, s){ s = 1.70158; return target * ((index = index / framesNum - 1) * index * ((s + 1) * index + s) + 1) + offset; };;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\lib\\ucren.js

*/

define("scripts/lib/ucren.js", function(exports){

/**

* ucren-lite

* filename: boot.js

* author: dron

* version: 5.0.2.20120628

* date: 2009-03-15

* contact: ucren.com

*/

var Ucren;

var blankArray = [];

var slice = blankArray.slice;

var join = blankArray.join;

//

// [基本數(shù)據(jù)類型擴展]

//

// String.prototype.trim

if( !String.prototype.trim )

String.prototype.trim = function(){

return this.replace( /^\\s+|\\s+$/, "" );

};

// String.prototype.format

String.prototype.format = function( conf ){

var rtn = this, blank = {};

Ucren.each( conf, function( item, key ){

item = item.toString().replace( /\\$/g, "$$$$" );

rtn = rtn.replace( RegExp( "@{" + key + "}", "g" ), item );

});

return rtn.toString();

};

// String.prototype.htmlEncode

String.prototype.htmlEncode = function(){

var div = document.createElement( "div" );

return function(){

var text;

div.appendChild( document.createTextNode( this ));

text = div.innerHTML;

div.innerHTML = "";

return text;

};

}();

// String.prototype.byteLength

String.prototype.byteLength = function(){

return this.replace( /[^\\x00-\\xff]/g, " " ).length;

};

// String.prototype.subByte

String.prototype.subByte = function( len, tail ){

var s = this;

if( s.byteLength() <= len )

return s;

tail = tail || "";

len -= tail.byteLength();

return s = s.slice( 0, len ).replace( /( [^\\x00-\\xff] )/g, "$1 " )

.slice( 0, len )

.replace( /[^\\x00-\\xff]$/, "" )

.replace( /( [^\\x00-\\xff] ) /g, "$1" ) + tail;

}

// Function.prototype.defer

Function.prototype.defer = function( scope, timeout ){

var me = this;

var fn = function(){

me.apply( scope, arguments );

};

return setTimeout( fn, timeout );

};

// Function.prototype.bind

if( !Function.prototype.bind )

Function.prototype.bind = function( scope ){

var me = this;

return function(){

return me.apply( scope, arguments );

}

};

// Function.prototype.saturate

Function.prototype.saturate = function( scope/*, args */ ){

var fn = this, afters = slice.call( arguments, 1 );

return function(){

return fn.apply( scope, slice.call( arguments, 0 ).concat( afters ) );

}

};

// Array.prototype.indexOf

// if( !Array.prototype.indexOf )

Array.prototype.indexOf = function( item, i ){

var length = this.length;

if( !i )

i = 0;

if( i < 0 )

i = length + i;

for( ; i < length; i ++ )

if( this[i] === item )

return i;

return -1;

};

// Array.prototype.every

// if( !Array.prototype.every )

Array.prototype.every = function( fn, context ) {

for ( var i = 0, len = this.length; i < len; i ++ )

if ( !fn.call( context, this[i], i, this ) )

return false;

return true;

};

// Array.prototype.filter

// if( !Array.prototype.filter )

Array.prototype.filter = function( fn, context ) {

var result = [], val;

for ( var i = 0, len = this.length; i < len; i ++ )

if ( val = this[i], fn.call( context, val, i, this ) )

result.push( val );

return result;

};

// Array.prototype.forEach

// if( !Array.prototype.forEach )

Array.prototype.forEach = function( fn, context ) {

for ( var i = 0, len = this.length; i < len; i ++ )

fn.call( context, this[i], i, this );

};

// Array.prototype.map

// if( !Array.prototype.map )

Array.prototype.map = function( fn, context ) {

var result = [];

for ( var i = 0, len = this.length; i < len; i ++ )

result[i] = fn.call( context, this[i], i, this );

return result;

};

// Array.prototype.some

// if( !Array.prototype.some )

Array.prototype.some = function( fn, context ) {

for ( var i = 0, len = this.length; i < len; i ++ )

if ( fn.call( context, this[i], i, this ) )

return true;

return false;

};

Array.prototype.invoke = function( method /*, args */ ){

var args = slice.call( arguments, 1 );

this.forEach( function( item ){

if( item instanceof Array )

item[0][method].apply( item[0], item.slice( 1 ) );

else

item[method].apply( item, args );

});

return this;

};

Array.prototype.random = function(){

var arr = this.slice( 0 ), ret = [], i = arr.length;

while( i -- )

ret.push( arr.splice( Ucren.randomNumber( i + 1 ), 1 )[0] );

return ret;

};

Ucren = {

//

// [全局屬性]

//

// Ucren.isIe

isIe: /msie/i.test( navigator.userAgent ),

// Ucren.isIe6

isIe6: /msie 6/i.test( navigator.userAgent ),

// Ucren.isFirefox

isFirefox: /firefox/i.test( navigator.userAgent ),

// Ucren.isSafari

isSafari: /version\\/[\\d\\.]+\\s+safari/i.test( navigator.userAgent ),

// Ucren.isOpera

isOpera: /opera/i.test( navigator.userAgent ),

// Ucren.isChrome

isChrome: /chrome/i.test( navigator.userAgent ), //todo isChrome = true, isSafari = true

// Ucren.isStrict

isStrict: document.compatMode == "CSS1Compat",

// Ucren.tempDom

tempDom: document.createElement( "div" ),

//

// [全局方法]

//

// Ucren.apply

apply: function( form, to, except ){

if( !to )to = {};

if( except ){

Ucren.each( form, function( item, key ){

if( key in except )

return ;

to[key] = item;

});

}else{

Ucren.each( form, function( item, key ){

to[key] = item;

});

}

return to;

},

// Ucren.appendStyle

appendStyle: function( text ){

var style;

if( arguments.length > 1 )

text = join.call( arguments, "" );

if( document.createStyleSheet ){

style = document.createStyleSheet();

style.cssText = text;

}else{

style = document.createElement( "style" );

style.type = "text/css";

//style.innerHTML = text; fix Chrome bug

style.appendChild( document.createTextNode( text ));

document.getElementsByTagName( "head" )[0].appendChild( style );

}

},

// for copy : )

//

// var addEvent = function( target, name, fn ){

// var call = function(){

// fn.apply( target, arguments );

// };

// if( window.attachEvent )

// target.attachEvent( "on" + name, call );

// else if( window.addEventListener )

// target.addEventListener( name, call, false );

// else

// target["on" + name] = call;

// return call;

// }

// Ucren.addEvent

addEvent: function( target, name, fn ){

var call = function(){

fn.apply( target, arguments );

};

if( target.dom ){

target = target.dom;

}

if( window.attachEvent ){

target.attachEvent( "on" + name, call );

}else if( window.addEventListener ){

target.addEventListener( name, call, false );

}else{

target["on" + name] = call;

}

return call;

},

// Ucren.delEvent

delEvent: function( target, name, fn ){

if( window.detachEvent ){

target.detachEvent( "on" + name, fn );

}else if( window.removeEventListener ){

target.removeEventListener( name, fn, false );

}else if( target["on" + name] == fn ){

target["on" + name] = null;

}

},

// Ucren.Class

Class: function( initialize, methods, befores, afters ){

var fn, prototype, blank;

initialize = initialize || function(){};

methods = methods || {};

blank = {};

fn = function(){

this.instanceId = Ucren.id();

initialize.apply( this, arguments );

};

prototype = fn.prototype;

Ucren.registerClassEvent.call( prototype );

Ucren.each( methods, function( item, key ){

prototype[key] = function( method, name ){

if( typeof( method ) == "function" ){

return function(){

var args, rtn;

args = slice.call( arguments, 0 );

if( befores &&

befores.apply( this, [name].concat( args )) === false ){

return ;

}

this.fireEvent( "before" + name, args );

rtn = method.apply( this, args );

if( afters )

afters.apply( this, [name].concat( args ));

this.fireEvent( name, args );

return rtn;

};

}else{

return method;

}

}( item, key );

});

prototype.getOriginMethod = function( name ){

return methods[name];

};

return fn;

},

//private

registerClassEvent: function(){

this.on = function( name, fn ){

var instanceId = this.instanceId;

Ucren.dispatch( instanceId + name, fn.bind( this ));

};

this.onbefore = function( name, fn ){

var instanceId = this.instanceId;

Ucren.dispatch( instanceId + "before" + name, fn.bind( this ));

};

this.un = function( name, fn ){

//todo

};

this.fireEvent = function( name, args ){

var instanceId = this.instanceId;

Ucren.dispatch( instanceId + name, args );

};

},

// Ucren.createFuze

createFuze: function(){

var queue, fn, infire;

queue = [];

fn = function( process ){

if( infire ){

process();

}else{

queue.push( process );

}

};

fn.fire = function(){

while( queue.length ){

queue.shift()();

}

infire = true;

};

fn.extinguish = function(){

infire = false;

};

fn.wettish = function(){

if( queue.length ){

queue.shift()();

}

};

return fn;

},

// Ucren.createIf

// createIf: function( expressionFunction ){

// return function( callback ){

// var expression = expressionFunction();

// var returnValue = {

// Else: function( callback ){

// callback = callback || nul;

// expression || callback();

// }

// };

// callback = callback || nul;

// expression && callback();

// return returnValue;

// };

// },

// Ucren.dispatch

dispatch: function(){

var map = {}, send, incept, ret;

send = function( processId, args, scope ){

var processItems;

if( processItems = map[ processId ] )

Ucren.each( processItems, function( item ){

item.apply( scope, args );

});

};

incept = function( processId, fn ){

var m;

if( !( m = map[ processId ] ) )

map[processId] = [ fn ];

else

m.push( fn );

};

ret = function( arg1, arg2, arg3 ){

if( typeof( arg2 ) === "undefined" )

arg2 = [];

if( arg2 instanceof Array )

send.apply( this, arguments );

else if( typeof( arg2 ) === "function" )

incept.apply( this, arguments );

};

ret.remove = function( processId, fn ){

var m, i;

if( ( m = map[ processId ] ) && ~( i = m.indexOf( fn ) ) )

m.splice( i, 1 );

};

return ret;

}(),

// Ucren.each ( not recommended )

each: function( unknown, fn ){

/// unknown 是 array 的,會慢慢退化,建議用 Array.prototype.forEach 替代

/// unknown 為其它類似的,短期內(nèi)將暫時支持

if( unknown instanceof Array || ( typeof unknown == "object" &&

typeof unknown[0] != "undefined" && unknown.length )){

if( typeof unknown == "object" && Ucren.isSafari )

unknown = slice.call( unknown );

//for( var i = 0, l = unknown.length; i < l; i ++ ){

//if( fn( unknown[i], i ) === false ){

//break;

//}

//}

unknown.forEach( fn );

}else if( typeof( unknown ) == "object" ){

var blank = {};

for( var i in unknown ){

if( blank[i] ){

continue;

}

if( fn( unknown[i], i ) === false ){

break;

}

}

}else if( typeof( unknown ) == "number" ){

for( var i = 0; i < unknown; i ++ ){

if( fn( i, i ) === false ){

break;

}

}

}else if( typeof( unknown ) == "string" ){

for( var i = 0, l = unknown.length; i < l; i ++ ){

if( fn( unknown.charAt( i ), i ) === false ){

break;

}

}

}

},

// Ucren.Element

Element: function( el, returnDom ){

var rtn, handleId;

if( el && el.isUcrenElement ){

return returnDom ? el.dom : el;

}

el = typeof( el ) == "string" ? document.getElementById( el ) : el;

if( !el )

return null;

if( returnDom )

return el;

handleId = el.getAttribute( "handleId" );

if( typeof handleId == "string" ){

return Ucren.handle( handleId - 0 );

}else{

rtn = new Ucren.BasicElement( el );

handleId = Ucren.handle( rtn );

el.setAttribute( "handleId", handleId + "" );

return rtn;

}

},

// Ucren.Event

Event: function( e ){

e = e || window.event;

if( !e ){

var c = arguments.callee.caller;

while( c ){

e = c.arguments[0];

if( e && typeof( e.altKey ) == "boolean" ){ // duck typing

break;

}

c = c.caller;

e = null;

}

}

return e;

},

// Ucren.fixNumber

fixNumber: function( unknown, defaultValue ){

return typeof( unknown ) == "number" ? unknown : defaultValue;

},

// Ucren.fixString

fixString: function( unknown, defaultValue ){

return typeof( unknown ) == "string" ? unknown : defaultValue;

},

// Ucren.fixConfig

fixConfig: function( conf ){

var defaultConf;

defaultConf = {};

if( typeof conf == "undefined" ){

return defaultConf;

}else if( typeof conf == "function" ){

return new conf;

}else{

return conf;

}

},

// Ucren.handle

handle: function( unknown ){

var fn, type, number;

fn = arguments.callee;

if( !fn.cache ){

fn.cache = {};

}

if( typeof( fn.number ) == "undefined" ){

fn.number = 0;

}

type = typeof( unknown );

if( type == "number" ){

return fn.cache[unknown.toString()];

}else if( type == "object" || type == "function" ){

number = fn.number ++;

fn.cache[number.toString()] = unknown;

return number;

}

},

// Ucren.id

id: function(){

var id = arguments.callee;

id.number = ++ id.number || 0;

return "_" + id.number;

},

// Ucren.loadImage

loadImage: function( urls, onLoadComplete ){

var length = urls.length;

var loaded = 0;

var check = function(){

if( loaded == length )

onLoadComplete && onLoadComplete();

};

Ucren.each( urls, function( url ){

var img = document.createElement( "img" );

img.onload = img.onerror = function(){

this.onload = this.onerror = null;

loaded ++;

check();

};

Ucren.tempDom.appendChild( img );

img.src = url;

});

},

// Ucren.loadScript

loadScript: function( src, callback ){

Ucren.request( src, function( text ){

eval( text );

callback && callback( text );

});

},

// Ucren.makeElement

makeElement: function( tagName, attributes ){

var el = document.createElement( tagName );

var setStyle = function( unknown ){

if( typeof unknown == "string" )

el.style.cssText = unknown;

else

Ucren.apply( unknown, el.style );

};

for ( var prop in attributes ) {

if ( prop === "class" )

el.className = attributes[prop];

else if ( prop === "for" )

el.htmlFor = attributes[prop];

else if( prop === "style" )

setStyle( attributes[prop] );

else

el.setAttribute( prop, attributes[prop] );

}

return el;

},

// Ucren.nul

nul: function(){

return false;

},

// Ucren.queryString

// queryString: function( name, sourceString ){

// var source, pattern, result;

// source = sourceString || location.href;

// pattern = new RegExp( "( \\\\?|& )" + name + "=( [^&#]* )( #|&|$ )", "i" );

// result = source.match( pattern );

// return result ? result[2] : "";

// },

// Ucren.randomNumber

randomNumber: function( num ){

return Math.floor( Math.random() * num );

},

// Ucren.randomWord

randomWord: function(){

var cw = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

return function( length, sourceString ){

var words, re = [];

words = sourceString || cw;

Ucren.each( length, function( index ){

re[index] = words.charAt( this.randomNumber( words.length ));

}.bind( this ));

return re.join( "" );

}

}(),

// Ucren.request

request: function( url, callback ){

request = Ucren.request;

var xhr = request.xhr;

if( !request.xhr ){

if( window.XMLHttpRequest ){

xhr = request.xhr = new XMLHttpRequest();

}else{

xhr = request.xhr = new ActiveXObject( "Microsoft.XMLHTTP" );

}

}

xhr.open( "GET", url, true );

xhr.onreadystatechange = function(){

if( xhr.readyState == 4 && xhr.status == 200 ){

callback( xhr.responseText );

}

};

xhr.send( null );

}

// // Ucren.decodeColor

// decodeColor: function(){

// var r = /^\\#?( \\w{2})( \\w{2})( \\w{2})$/;

// var x = function( x ){

// return parseInt( x, 16 );

// };

// return function( color ){

// r.test( color );

// return {

// red: x( RegExp.$1 ),

// green: x( RegExp.$2 ),

// blue: x( RegExp.$3 )

// };

// }

// }(),

// // Ucren.encodeColor

// encodeColor: function(){

// var x = function( x ){

// return x.toString( 16 ).split( "." )[0];

// };

// x = x.improve( function( origin, x ){

// x = origin( x );

// return x.length == 1 ? "0" + x : x;

// });

// return function( data ){

// return ["#", x( data.red ), x( data.green ), x( data.blue )].join( "" );

// }

// }()

};

//

// [底層操作類]

//

// Ucren.BasicDrag

Ucren.BasicDrag = Ucren.Class(

/* constructor */ function( conf ){

conf = Ucren.fixConfig( conf );

this.type = Ucren.fixString( conf.type, "normal" );

var isTouch = this.isTouch = "ontouchstart" in window;

this.TOUCH_START = isTouch ? "touchstart" : "mousedown",

this.TOUCH_MOVE = isTouch ? "touchmove" : "mousemove",

this.TOUCH_END = isTouch ? "touchend" : "mouseup";

},

/* methods */ {

bind: function( el, handle ){

el = Ucren.Element( el );

handle = Ucren.Element( handle ) || el;

var evt = {};

evt[this.TOUCH_START] = function( e ){

e = Ucren.Event( e );

this.startDrag();

e.cancelBubble = true;

e.stopPropagation && e.stopPropagation();

return e.returnValue = false;

}.bind( this );

handle.addEvents( evt );

this.target = el;

},

//private

getCoors: function( e ){

var coors = [];

if ( e.targetTouches && e.targetTouches.length ) { // iPhone

var thisTouch = e.targetTouches[0];

coors[0] = thisTouch.clientX;

coors[1] = thisTouch.clientY;

}else{ // all others

coors[0] = e.clientX;

coors[1] = e.clientY;

}

return coors;

},

//private

startDrag: function(){

var target, draging, e;

target = this.target;

draging = target.draging = {};

this.isDraging = true;

draging.x = parseInt( target.style( "left" ), 10 ) || 0;

draging.y = parseInt( target.style( "top" ), 10 ) || 0;

e = Ucren.Event();

var coors = this.getCoors( e );

draging.mouseX = coors[0];

draging.mouseY = coors[1];

this.registerDocumentEvent();

},

//private

endDrag: function(){

this.isDraging = false;

this.unRegisterDocumentEvent();

},

//private

registerDocumentEvent: function(){

var target, draging;

target = this.target;

draging = target.draging;

draging.documentSelectStart =

Ucren.addEvent( document, "selectstart", function( e ){

e = e || event;

e.stopPropagation && e.stopPropagation();

e.cancelBubble = true;

return e.returnValue = false;

});

draging.documentMouseMove =

Ucren.addEvent( document, this.TOUCH_MOVE, function( e ){

var ie, nie;

e = e || event;

ie = Ucren.isIe && e.button != 1;

nie = !Ucren.isIe && e.button != 0;

if( (ie || nie ) && !this.isTouch )

this.endDrag();

var coors = this.getCoors( e );

draging.newMouseX = coors[0];

draging.newMouseY = coors[1];

e.stopPropagation && e.stopPropagation();

return e.returnValue = false;

}.bind( this ));

draging.documentMouseUp =

Ucren.addEvent( document, this.TOUCH_END, function(){

this.endDrag();

}.bind( this ));

var lx, ly;

clearInterval( draging.timer );

draging.timer = setInterval( function(){

var x, y, dx, dy;

if( draging.newMouseX != lx && draging.newMouseY != ly ){

lx = draging.newMouseX;

ly = draging.newMouseY;

dx = draging.newMouseX - draging.mouseX;

dy = draging.newMouseY - draging.mouseY;

x = draging.x + dx;

y = draging.y + dy;

if( this.type == "calc" ){

this.returnValue( dx, dy, draging.newMouseX, draging.newMouseY );

}else{

target.left( x ).top( y );

}

}

}.bind( this ), 10 );

},

//private

unRegisterDocumentEvent: function(){

var draging = this.target.draging;

Ucren.delEvent( document, this.TOUCH_MOVE, draging.documentMouseMove );

Ucren.delEvent( document, this.TOUCH_END, draging.documentMouseUp );

Ucren.delEvent( document, "selectstart", draging.documentSelectStart );

clearInterval( draging.timer );

},

//private

returnValue: function( dx, dy, x, y ){

//todo something

}

}

);

// Ucren.Template

Ucren.Template = Ucren.Class(

/* constructor */ function(){

this.string = join.call( arguments, "" );

},

/* methods */ {

apply: function( conf ){

return this.string.format( conf );

}

}

);

// Ucren.BasicElement

Ucren.BasicElement = Ucren.Class(

/* constructor */ function( el ){

this.dom = el;

this.countMapping = {};

},

/* methods */ {

isUcrenElement: true,

attr: function( name, value ){

if( typeof value == "string" ){

this.dom.setAttribute( name, value );

}else{

return this.dom.getAttribute( name );

}

return this;

},

style: function( /* unknown1, unknown2 */ ){

var getStyle = Ucren.isIe ?

function( name ){

return this.dom.currentStyle[name];

} :

function( name ){

var style;

style = document.defaultView.getComputedStyle( this.dom, null );

return style.getPropertyValue( name );

};

return function( unknown1, unknown2 ){

if( typeof unknown1 == "object" ){

Ucren.each( unknown1, function( value, key ){

this[key] = value;

}.bind( this.dom.style ));

}else if( typeof unknown1 == "string" && typeof unknown2 == "undefined" ){

return getStyle.call( this, unknown1 );

}else if( typeof unknown1 == "string" && typeof unknown2 != "undefined" ){

this.dom.style[unknown1] = unknown2;

}

return this;

};

}(),

hasClass: function( name ){

var className = " " + this.dom.className + " ";

return className.indexOf( " " + name + " " ) > -1;

},

setClass: function( name ){

if( typeof( name ) == "string" )

this.dom.className = name.trim();

return this;

},

addClass: function( name ){

var el, className;

el = this.dom;

className = " " + el.className + " ";

if( className.indexOf( " " + name + " " ) == -1 ){

className += name;

className = className.trim();

className = className.replace( / +/g, " " );

el.className = className;

}

return this;

},

delClass: function( name ){

var el, className;

el = this.dom;

className = " " + el.className + " ";

if( className.indexOf( " " + name + " " ) > -1 ){

className = className.replace( " " + name + " ", " " );

className = className.trim();

className = className.replace( / +/g, " " );

el.className = className;

}

return this;

},

html: function( html ){

var el = this.dom;

if( typeof html == "string" ){

el.innerHTML = html;

}else if( html instanceof Array ){

el.innerHTML = html.join( "" );

}else{

return el.innerHTML;

}

return this;

},

left: function( number ){

var el = this.dom;

if( typeof( number ) == "number" ){

el.style.left = number + "px";

this.fireEvent( "infect", [{ left: number }] );

}else{

return this.getPos().x;

}

return this;

},

top: function( number ){

var el = this.dom;

if( typeof( number ) == "number" ){

el.style.top = number + "px";

this.fireEvent( "infect", [{ top: number }] );

}else{

return this.getPos().y;

}

return this;

},

width="360px",height="auto" />

var el = this.dom;

if( typeof unknown == "number" ){

el.style.width="360px",height="auto" />

this.fireEvent( "infect", [{ width="360px",height="auto" />

}else if( typeof unknown == "string" ){

el.style.width="360px",height="auto" />

this.fireEvent( "infect", [{ width="360px",height="auto" />

}else{

return this.getSize().width="360px",height="auto" />

}

return this;

},

height: function( unknown ){

var el = this.dom;

if( typeof unknown == "number" ){

el.style.height = unknown + "px";

this.fireEvent( "infect", [{ height: unknown }] );

}else if( typeof unknown == "string" ){

el.style.height = unknown;

this.fireEvent( "infect", [{ height: unknown }] );

}else{

return this.getSize().height;

}

return this;

},

count: function( name ){

return this.countMapping[name] = ++ this.countMapping[name] || 1;

},

display: function( bool ){

var dom = this.dom;

if( typeof( bool ) == "boolean" ){

dom.style.display = bool ? "block" : "none";

this.fireEvent( "infect", [{ display: bool }] );

}else{

return this.style( "display" ) != "none";

}

return this;

},

first: function(){

var c = this.dom.firstChild;

while( c && !c.tagName && c.nextSibling ){

c = c.nextSibling;

}

return c;

},

add: function( dom ){

var el;

el = Ucren.Element( dom );

this.dom.appendChild( el.dom );

return this;

},

remove: function( dom ){

var el;

if( dom ){

el = Ucren.Element( dom );

el.html( "" );

this.dom.removeChild( el.dom );

}else{

el = Ucren.Element( this.dom.parentNode );

el.remove( this );

}

return this;

},

insert: function( dom ){

var tdom;

tdom = this.dom;

if( tdom.firstChild ){

tdom.insertBefore( dom, tdom.firstChild );

}else{

this.add( dom );

}

return this;

},

addEvents: function( conf ){

var blank, el, rtn;

blank = {};

rtn = {};

el = this.dom;

Ucren.each( conf, function( item, key ){

rtn[key] = Ucren.addEvent( el, key, item );

});

return rtn;

},

removeEvents: function( conf ){

var blank, el;

blank = {};

el = this.dom;

Ucren.each( conf, function( item, key ){

Ucren.delEvent( el, key, item );

});

return this;

},

getPos: function(){

var el, parentNode, pos, box, offset;

el = this.dom;

pos = {};

if( el.getBoundingClientRect ){

box = el.getBoundingClientRect();

offset = Ucren.isIe ? 2 : 0;

var doc = document;

var scrollTop = Math.max( doc.documentElement.scrollTop,

doc.body.scrollTop );

var scrollLeft = Math.max( doc.documentElement.scrollLeft,

doc.body.scrollLeft );

return {

x: box.left + scrollLeft - offset,

y: box.top + scrollTop - offset

};

}else{

pos = {

x: el.offsetLeft,

y: el.offsetTop

};

parentNode = el.offsetParent;

if( parentNode != el ){

while( parentNode ){

pos.x += parentNode.offsetLeft;

pos.y += parentNode.offsetTop;

parentNode = parentNode.offsetParent;

}

}

if( Ucren.isSafari && this.style( "position" ) == "absolute" ){ // safari doubles in some cases

pos.x -= document.body.offsetLeft;

pos.y -= document.body.offsetTop;

}

}

if( el.parentNode ){

parentNode = el.parentNode;

}else{

parentNode = null;

}

while( parentNode && parentNode.tagName.toUpperCase() != "BODY" &&

parentNode.tagName.toUpperCase() != "HTML" ){ // account for any scrolled ancestors

pos.x -= parentNode.scrollLeft;

pos.y -= parentNode.scrollTop;

if( parentNode.parentNode ){

parentNode = parentNode.parentNode;

}else{

parentNode = null;

}

}

return pos;

},

getSize: function(){

var dom = this.dom;

var display = this.style( "display" );

if ( display && display !== "none" ) {

return { width="360px",height="auto" />

}

var style = dom.style;

var originalStyles = {

visibility: style.visibility,

position: style.position,

display: style.display

};

var newStyles = {

visibility: "hidden",

display: "block"

};

if ( originalStyles.position !== "fixed" )

newStyles.position = "absolute";

this.style( newStyles );

var dimensions = {

width="360px",height="auto" />

height: dom.offsetHeight

};

this.style( originalStyles );

return dimensions;

},

observe: function( el, fn ){

el = Ucren.Element( el );

el.on( "infect", fn.bind( this ));

return this;

},

usePNGbackground: function( image ){

var dom;

dom = this.dom;

if( /\\.png$/i.test( image ) && Ucren.isIe6 ){

dom.style.filter =

"progid:DXImageTransform.Microsoft.AlphaImageLoader( src=\'" +

image + "\',sizingMethod=\'scale\' );";

/// _background: none;

/// _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src=\'images/pic.png\',sizingMethod=\'scale\' );

}else{

dom.style.backgroundImage = "url( " + image + " )";

}

return this;

},

setAlpha: function(){

var reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/;

return function( value ){

var element = this.dom, es = element.style;

if( !Ucren.isIe ){

es.opacity = value / 100;

/* }else if( es.filter === "string" ){ */

}else{

if ( element.currentStyle && !element.currentStyle.hasLayout )

es.zoom = 1;

if ( reOpacity.test( es.filter )) {

value = value >= 99.99 ? "" : ( "alpha( opacity=" + value + " )" );

es.filter = es.filter.replace( reOpacity, value );

} else {

es.filter += " alpha( opacity=" + value + " )";

}

}

return this;

};

}(),

fadeIn: function( callback ){

if( typeof this.fadingNumber == "undefined" )

this.fadingNumber = 0;

this.setAlpha( this.fadingNumber );

var fading = function(){

this.setAlpha( this.fadingNumber );

if( this.fadingNumber == 100 ){

clearInterval( this.fadingInterval );

callback && callback();

}else

this.fadingNumber += 10;

}.bind( this );

this.display( true );

clearInterval( this.fadingInterval );

this.fadingInterval = setInterval( fading, Ucren.isIe ? 20 : 30 );

return this;

},

fadeOut: function( callback ){

if( typeof this.fadingNumber == "undefined" )

this.fadingNumber = 100;

this.setAlpha( this.fadingNumber );

var fading = function(){

this.setAlpha( this.fadingNumber );

if( this.fadingNumber == 0 ){

clearInterval( this.fadingInterval );

this.display( false );

callback && callback();

}else

this.fadingNumber -= 10;

}.bind( this );

clearInterval( this.fadingInterval );

this.fadingInterval = setInterval( fading, Ucren.isIe ? 20 : 30 );

return this;

},

useMouseAction: function( className, actions ){

/**

* 調(diào)用示例: el.useMouseAction( "xbutton", "over,out,down,up" );

* 使用效果: el 會在 "xbutton xbutton-over","xbutton xbutton-out","xbutton xbutton-down","xbutton xbutton-up"

* 等四個 className 中根據(jù)相應(yīng)的鼠標事件來進行切換。

* 特別提示: useMouseAction 可使用不同參數(shù)多次調(diào)用。

*/

if( !this.MouseAction )

this.MouseAction = new Ucren.MouseAction({ element: this });

this.MouseAction.use( className, actions );

return this;

}

}

);

if( Ucren.isIe )

document.execCommand( "BackgroundImageCache", false, true );

for( var i in Ucren ){

exports[i] = Ucren[i];

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\background.js

*/

define("scripts/object/background.js", function(exports){

var Ucren = require("scripts/lib/ucren");

var layer = require("scripts/layer");

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

var image, time;

var random = Ucren.randomNumber;

exports.set = function(){

image = layer.createImage( "default", "images/background.jpg", 0, 0, 640, 480 );

};

exports.wobble = function(){

time = timeline.setInterval( wobble, 50 );

};

exports.stop = function(){

time.stop();

image.attr({ x: 0, y: 0 });

};

function wobble(){

var x, y;

x = random( 12 ) - 6;

y = random( 12 ) - 6;

image.attr({ x: x, y: y });

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\console.js

*/

define("scripts/object/console.js", function(exports){

var layer = require("scripts/layer");

var x = 16, y = 0;

var texts = [];

exports.set = function(){

};

exports.clear = function(){

for(var i = 0, l = texts.length; i < l; i ++)

texts[i].remove();

texts.length = y = 0;

};

exports.log = function(text){

y += 20;

texts.push( layer.createText( "default", text, x, y ) );

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\developing.js

*/

define("scripts/object/developing.js", function(exports){

var layer = require("scripts/layer");

var tween = require("scripts/lib/tween");

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

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

var exponential = tween.exponential.co;

/**

* "coming soon" 模塊

*/

exports.anims = [];

exports.set = function(){

this.image = layer.createImage( "default", "images/developing.png", 103, 218, 429, 53 ).hide().scale( 1e-5, 1e-5 );

};

exports.show = function( start ){

timeline.createTask({

start: start, duration: 500, data: [ 1e-5, 1, "show" ],

object: this, onTimeUpdate: this.onZooming, onTimeStart: this.onZoomStart, onTimeEnd: this.onZoomEnd,

recycle: this.anims

});

this.hide( 2000 );

};

exports.hide = function( start ){

timeline.createTask({

start: start, duration: 500, data: [ 1, 1e-5, "hide" ],

object: this, onTimeUpdate: this.onZooming, onTimeStart: this.onZoomStart, onTimeEnd: this.onZoomEnd,

recycle: this.anims

});

};

// 顯示/隱藏 相關(guān)

exports.onZoomStart = function(){

this.image.show();

};

exports.onZooming = function( time, sz, ez, z ){

this.image.scale( z = exponential( time, sz, ez - sz, 500 ), z );

};

exports.onZoomEnd = function( sz, ez, mode ){

if( mode === "hide" )

this.image.hide();

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\dojo.js

*/

define("scripts/object/dojo.js", function(exports){

var rotate = require("scripts/factory/rotate");

var tween = require("scripts/lib/tween");

exports = rotate.create("images/dojo.png", 41, 240, 175, 175, 1e-5, tween.exponential.co, 500);;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\flame.js

*/

define("scripts/object/flame.js", function(exports){

/**

* 火焰模塊

* @author zswang, dron

*/

var layer = require("scripts/layer").getLayer( "fruit" );

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

var Ucren = require("scripts/lib/ucren");

/*

raphael.path(\'M 27,122 Q 9,42 27,21 45,42 27,122\')

.attr({

stroke: \'none\',

fill: \'180-#D8D380-#EDED7A-#D8D380\'

});

*/

// 縮寫

var math = Math, cos = math.cos, sin = math.sin,

trunc = parseInt,

random = math.random,

PI = math.PI;

var guid = 0;

/**

* 添加一個火苗

* @param{Array} center 中心位置 單位像素

* @param{Number} angle 運動方向 單位幅度

* @param{Number} length 運動長度 單位像素

* @param{Number} life 存活時間 單位毫秒

*/

function appendFlame( center, angle, length, life, flames ){

return flames[guid] = {

id: guid ++,

birthday: new Date,

center: center,

angle: angle,

length: length,

life: life,

path: layer.path().attr({ stroke: \'none\', fill: trunc( angle * 180 / PI ) + \'-#fafad9-#f0ef9c\' })

};

}

var radius = 15;

function updateFlame( flames, n ){

var item = flames[n];

if ( !item )

return;

var age, center, p1, p2, p3, p4;

age = 1 - (new Date - item.birthday) / item.life;

if ( age <= 0 ){

item.path.remove();

delete flames[item.id];

return;

}

var ia, ic, il;

ia = item.angle;

ic = item.center;

il = item.length;

center = [ trunc(ic[0] + cos(ia) * il * (1 - age)), trunc(ic[1] + sin(ia) * il * (1 - age)) ];

p1 = [ trunc(center[0] - cos(ia) * radius * age), trunc(center[1] - sin(ia) * radius * age) ];

p2 = [ trunc(center[0] + cos(ia) * radius * age), trunc(center[1] + sin(ia) * radius * age) ];

p3 = [ trunc(center[0] - cos(ia + .5 * PI) * radius * .4 * age), trunc(center[1] - sin(ia + .5 * PI) * radius * .4 * age) ];

p4 = [ trunc(center[0] - cos(ia - .5 * PI) * radius * .4 * age), trunc(center[1] - sin(ia - .5 * PI) * radius * .4 * age) ];

item.path.attr({ path: \'M\' + p1 + \' Q\' + [ p3, p2, p4, p1 ].join(\' \') });

};

function removeFlame( flames, n ){

var item = flames[n];

if( !item )

return;

item.path.remove();

delete flames[ n ];

};

exports.create = function( ox, oy, start ){

var timer1, timer2;

var object = {

pos: function( x, y ){

nx = x;

ny = y;

image.attr( "x", nx - 21 ).attr( "y", ny - 21 );

},

remove: function(){

[ timer1, timer2 ].invoke( "stop" );

image.remove();

for (var p in flames)

removeFlame( flames, p );

}

};

var nx = ox, ny = oy;

var image = layer.image("images/smoke.png", nx - 21, ny - 21, 43, 43).hide();

var flames = {};

timer1 = timeline.setTimeout(function(){

image.show();

timer2 = timeline.setInterval(function(){

if(random() < 0.9)

appendFlame( [ nx, ny ], PI * 2 * random(), 60, 200 + 500 * random(), flames );

for (var p in flames)

updateFlame( flames, p );

}, Ucren.isIe ? 20 : 40);

}, start || 0);

return object;

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\flash.js

*/

define("scripts/object/flash.js", function(exports){

/**

*

*/

var layer = require("scripts/layer");

var timeline = require("scripts/timeline").use( "flash" ).init( 10 );

var tween = require("scripts/lib/tween");

var sound = require("scripts/lib/sound");

var image, snd, xDiff = 0, yDiff = 0;

var anim = tween.quadratic.cio;

var anims = [];

var dur = 100;

exports.set = function(){

image = layer.createImage( "flash", "images/flash.png", 0, 0, 358, 20 ).hide();

snd = sound.create( "sound/splatter" );

};

exports.showAt = function( x, y, an ){

image.rotate( an, true ).scale( 1e-5, 1e-5 ).attr({

x: x + xDiff,

y: y + yDiff

}).show();

anims.clear && anims.clear();

snd.play();

timeline.createTask({

start: 0, duration: dur, data: [ 1e-5, 1 ],

object: this, onTimeUpdate: this.onTimeUpdate,

recycle: anims

});

timeline.createTask({

start: dur, duration: dur, data: [ 1, 1e-5 ],

object: this, onTimeUpdate: this.onTimeUpdate,

recycle: anims

});

};

exports.onTimeUpdate = function( time, a, b, z ){

image.scale( z = anim( time, a, b - a, dur ), z );

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\fps.js

*/

define("scripts/object/fps.js", function(exports){

// var layer = require("scripts/layer");

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

// var text, fps = "fps: ";

// exports.set = function(){

// text = layer.createText( "default", fps + "0", 4, 470 ).attr( "fill", "#ccc" );

// };

// exports.update = function(){

// text.attr( "text", fps + ( timeline.getFPS() >> 0 ) );

// };;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\game-over.js

*/

define("scripts/object/game-over.js", function(exports){

var layer = require("scripts/layer");

var tween = require("scripts/lib/tween");

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

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

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

var exponential = tween.exponential.co;

/**

* "game-over"模塊

*/

exports.anims = [];

exports.set = function(){

this.image = layer.createImage( "default", "images/game-over.png", 75, 198, 490, 85 ).hide().scale( 1e-5, 1e-5 );

};

exports.show = function( start ){

timeline.createTask({

start: start, duration: 500, data: [ 1e-5, 1, "show" ],

object: this, onTimeUpdate: this.onZooming, onTimeStart: this.onZoomStart, onTimeEnd: this.onZoomEnd,

recycle: this.anims

});

};

exports.hide = function( start ){

timeline.createTask({

start: start, duration: 500, data: [ 1, 1e-5, "hide" ],

object: this, onTimeUpdate: this.onZooming, onTimeStart: this.onZoomStart, onTimeEnd: this.onZoomEnd,

recycle: this.anims

});

};

// 顯示/隱藏 相關(guān)

exports.onZoomStart = function( sz, ez, mode ){

if( mode == "show" )

this.image.show();

};

exports.onZooming = function( time, sz, ez, z ){

this.image.scale( z = exponential( time, sz, ez - sz, 500 ), z );

};

exports.onZoomEnd = function( sz, ez, mode ){

if( mode == "show" )

state( "click-enable" ).on();

else if( mode === "hide" )

this.image.hide();

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\home-desc.js

*/

define("scripts/object/home-desc.js", function(exports){

var displacement = require("scripts/factory/displacement");

var tween = require("scripts/lib/tween");

exports = displacement.create("images/home-desc.png", 161, 91, -161, 140, 7, 127, tween.exponential.co, 500);;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\home-mask.js

*/

define("scripts/object/home-mask.js", function(exports){

var displacement = require("scripts/factory/displacement");

var tween = require("scripts/lib/tween");

exports = displacement.create("images/home-mask.png", 640, 183, 0, -183, 0, 0, tween.exponential.co, 1e3);;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\knife.js

*/

define("scripts/object/knife.js", function(exports){

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

var layer = require("scripts/layer").getLayer( "knife" );

var Ucren = require("scripts/lib/ucren");

/**

* 刀光模塊

*/

var lastX = null, lastY = null;

var abs = Math.abs;

var life = 200;

var stroke = 10;

var color = "#cbd3db";

var anims = [];

var switchState = true;

var knifes = [];

function ClassKnifePart( conf ){

this.sx = conf.sx;

this.sy = conf.sy;

this.ex = conf.ex;

this.ey = conf.ey;

knifes.push( this );

}

ClassKnifePart.prototype.set = function(){

var sx, sy, ex, ey, dx, dy, ax, ay;

sx = this.sx;

sy = this.sy;

ex = this.ex;

ey = this.ey;

dx = sx - ex;

dy = sy - ey;

ax = abs(dx);

ay = abs(dy);

if(ax > ay)

sx += dx < 0 ? -1 : 1,

sy += dy < 0 ? -( 1 * ay / ax ) : 1 * ay / ax;

else

sx += dx < 0 ? -( 1 * ax / ay ) : 1 * ax / ay,

sy += dy < 0 ? -1 : 1;

this.line = layer.path( "M" + sx + "," + sy + "L" + ex + "," + ey ).attr({

"stroke": color,

"stroke-width="360px",height="auto" />

});

timeline.createTask({ start: 0, duration: life, object: this, onTimeUpdate: this.update, onTimeEnd: this.end, recycle: anims });

return this;

};

ClassKnifePart.prototype.update = function( time ){

this.line.attr( "stroke-width="360px",height="auto" />

};

ClassKnifePart.prototype.end = function(){

this.line.remove();

var index;

if( index = knifes.indexOf( this ) )

knifes.splice( index, 1 );

};

exports.newKnife = function(){

lastX = lastY = null;

};

exports.through = function( x, y ){

if( !switchState )

return ;

var ret = null;

if( lastX !== null && ( lastX != x || lastY != y ) )

new ClassKnifePart({ sx: lastX, sy: lastY, ex: x, ey: y }).set(),

ret = [ lastX, lastY, x, y ];

lastX = x;

lastY = y;

return ret;

};

exports.pause = function(){

anims.clear();

this.switchOff();

};

exports.switchOff = function(){

switchState = false;

};

exports.switchOn = function(){

switchState = true;

this.endAll();

};

exports.endAll = function(){

for(var i = knifes.length - 1; i >= 0; i --)

knifes[i].end();

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\light.js

*/

define("scripts/object/light.js", function(exports){

/**

* 炸彈爆炸時的光線

*/

var layer = require("scripts/layer");

var maskLayer = layer.getLayer( "mask" );

layer = layer.getLayer( "light" );

var Ucren = require("scripts/lib/ucren");

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

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

var random = Ucren.randomNumber;

var pi = Math.PI;

var sin = Math.sin;

var cos = Math.cos;

var lights = [];

var indexs = [];

var lightsNum = 10;

for(var i = 0; i < lightsNum; i ++)

indexs[i] = i;

exports.start = function( boom ){

var x = boom.originX, y = boom.originY, time = 0, idx = indexs.random();

var i = lightsNum, b = function(){

build( x, y, idx[ this ] );

};

while( i -- )

timeline.setTimeout( b.bind( i ), time += 100 );

timeline.setTimeout(function(){

this.overWhiteLight();

}.bind( this ), time + 100);

};

exports.overWhiteLight = function(){

message.postMessage( "overWhiteLight.show" );

this.removeLights();

var dur = 4e3;

var mask = maskLayer.rect( 0, 0, 640, 480 ).attr({ fill: "#fff", stroke: "none" });

var control = {

onTimeUpdate: function( time ){

mask.attr( "opacity", 1 - time / dur );

},

onTimeEnd: function(){

mask.remove();

message.postMessage( "game.over" );

}

};

timeline.createTask({

start: 0, duration: dur,

object: control, onTimeUpdate: control.onTimeUpdate, onTimeEnd: control.onTimeEnd

});

};

exports.removeLights = function(){

for(var i = 0, l = lights.length; i < l; i ++)

lights[i].remove();

lights.length = 0;

};

function build( x, y, r ){

var a1, a2, x1, y1, x2, y2;

a1 = r * 36 + random( 10 );

a2 = a1 + 5;

a1 = pi * a1 / 180;

a2 = pi * a2 / 180;

x1 = x + 640 * cos( a1 );

y1 = y + 640 * sin( a1 );

x2 = x + 640 * cos( a2 );

y2 = y + 640 * sin( a2 );

var light = layer.path( [ "M", x, y, "L", x1, y1, "L", x2, y2, "Z" ] ).attr({

stroke: "none",

fill: "#fff"

});

lights.push( light );

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\logo.js

*/

define("scripts/object/logo.js", function(exports){

var displacement = require("scripts/factory/displacement");

var tween = require("scripts/lib/tween");

exports = displacement.create("images/logo.png", 288, 135, 17, -182, 17, 1, tween.exponential.co, 1e3);;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\lose.js

*/

define("scripts/object/lose.js", function(exports){

var layer = require("scripts/layer");

var tween = require("scripts/lib/tween");

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

var Ucren = require("scripts/lib/ucren");

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

var anim = tween.exponential.co;

var back = tween.back.co;

/**

*

*/

var o1, o2, o3, animLength = 500;

var conf1 = { src: "images/x.png", sx: 650, ex: 561, y: 5, w: 22, h: 19 };

var conf2 = { src: "images/xx.png", sx: 671, ex: 582, y: 5, w: 27, h: 26 };

var conf3 = { src: "images/xxx.png", sx: 697, ex: 608, y: 6, w: 31, h: 32 };

var number = 0;

exports.anims = [];

exports.set = function(){

o1 = layer.createImage( "default", conf1.src, conf1.sx, conf1.y, conf1.w, conf1.h ).hide();

o2 = layer.createImage( "default", conf2.src, conf2.sx, conf2.y, conf2.w, conf2.h ).hide();

o3 = layer.createImage( "default", conf3.src, conf3.sx, conf3.y, conf3.w, conf3.h ).hide();

};

exports.reset = function(){

number = 0;

[ [ o1, conf1 ], [ o2, conf2 ], [ o3, conf3 ] ].forEach(function( infx ){

infx[0].attr( "src", infx[1].src.replace( "xf.png", "x.png" ) );

})

};

exports.show = function( start ){

timeline.createTask({

start: start, duration: animLength, data: [ "show", conf1.sx, conf1.ex, conf2.sx, conf2.ex, conf3.sx, conf3.ex ],

object: this, onTimeUpdate: this.onTimeUpdate, onTimeStart: this.onTimeStart, onTimeEnd: this.onTimeEnd,

recycle: this.anims

});

};

exports.hide = function( start ){

timeline.createTask({

start: start, duration: animLength, data: [ "hide", conf1.ex, conf1.sx, conf2.ex, conf2.sx, conf3.ex, conf3.sx ],

object: this, onTimeUpdate: this.onTimeUpdate, onTimeStart: this.onTimeStart, onTimeEnd: this.onTimeEnd,

recycle: this.anims

});

};

exports.showLoseAt = function( x ){

var infx, inf = [

[ o1, conf1 ],

[ o2, conf2 ],

[ o3, conf3 ]

];

createPosShow( x );

infx = inf[ ( ++ number ) - 1 ];

infx[0].attr( "src", infx[1].src.replace( "x.png", "xf.png" ) ).scale( 1e-5, 1e-5 );

this.scaleImage( infx[0] );

if( number == 3 )

message.postMessage( "game.over" );

};

exports.scaleImage = function( image ){

var dur = 500;

image.myOnScaling = image.myOnScaling || function( time, z ){

this.scale( z = back( time, 1e-5, 1 - 1e-5, dur ), z );

};

image.myOnScaleEnd = image.myOnScaleEnd || function(){

this.scale( 1, 1 );

};

timeline.createTask({

start: 0, duration: dur,

object: image, onTimeUpdate: image.myOnScaling, onTimeEnd: image.myOnScaleEnd,

recycle: this.anims

});

};

// 顯示/隱藏 相關(guān)

exports.onTimeUpdate = function( time, mode, x1s, x1e, x2s, x2e, x3s, x3e ){

o1.attr( "x", anim( time, x1s, x1e - x1s, animLength ) );

o2.attr( "x", anim( time, x2s, x2e - x2s, animLength ) );

o3.attr( "x", anim( time, x3s, x3e - x3s, animLength ) );

};

exports.onTimeStart = function( mode ){

if( mode == "show" )

[ o1, o2, o3 ].invoke( "show" );

};

exports.onTimeEnd = function( mode ){

if( mode == "hide" )

[ o1, o2, o3 ].invoke( "hide" ),

this.reset();

};

function createPosShow( x ){

var image = layer.createImage( "default", "images/lose.png", x - 27, 406, 54, 50 ).scale( 1e-5, 1e-5 );

var duration = 500;

var control = {

show: function( start ){

timeline.createTask({

start: start, duration: duration, data: [ tween.back.co, 1e-5, 1 ],

object: this, onTimeUpdate: this.onScaling, onTimeEnd: this.onShowEnd

// recycle: anims

});

},

hide: function( start ){

timeline.createTask({

start: start, duration: duration, data: [ tween.back.ci, 1, 1e-5 ],

object: this, onTimeUpdate: this.onScaling, onTimeEnd: this.onHideEnd

// recycle: anims

});

},

onScaling: function( time, anim, a, b, z ){

image.scale( z = anim( time, a, b - a, duration ), z );

},

onShowEnd: function(){

this.hide( 1500 );

},

onHideEnd: function(){

image.remove();

}

};

control.show( 200 );

};

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\ew-game.js

*/

define("scripts/object/new-game.js", function(exports){

var rotate = require("scripts/factory/rotate");

var tween = require("scripts/lib/tween");

exports = rotate.create("images/new-game.png", 244, 231, 195, 195, 1e-5, tween.exponential.co, 500);;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\ew.js

*/

define("scripts/object/new.js", function(exports){

var layer = require("scripts/layer");

var tween = require("scripts/lib/tween");

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

var Ucren = require("scripts/lib/ucren");

var image;

var cycleTime = 300;

var sx = 129, sy = 328, ex = 170, ey = 221, sw = 0, sh = 0, ew = 70, eh = 42, dy = 8;

var showAnim = tween.exponential.co;

var jumpAnim = tween.quadratic.ci;

exports.anims = [];

exports.set = function(){

image = layer.createImage( "default", "images/new.png", sx, sy, sw, sh );

};

exports.unset = function(){

};

exports.show = function( start ){

timeline.createTask({

start: start, duration: 500,

data: [ sx, ex, sy, ey, sw, ew, sh, eh ],

object: this, onTimeUpdate: this.onShowing, onTimeStart: this.onShowStart, onTimeEnd: this.onShowEnd,

recycle: this.anims

});

};

exports.hide = function( start ){

this.anims.clear();

timeline.createTask({

start: start, duration: 500,

data: [ ex, sx, ey, sy, ew, sw, eh, sh ],

object: this, onTimeUpdate: this.onShowing,

recycle: this.anims

});

};

exports.jump = function(){

this.anims.clear();

timeline.createTask({ start: 0, duration: -1, object: this, onTimeUpdate: this.onJumping, recycle: this.anims });

};

// 顯示相關(guān)

exports.onShowStart = function(){

};

exports.onShowing = function( time, sx, ex, sy, ey, sw, ew, sh, eh ){

image.attr({

x: showAnim( time, sx, ex - sx, 500 ),

y: showAnim( time, sy, ey - sy, 500 ),

width="360px",height="auto" />

height: showAnim( time, sh, eh - sh, 500 )

});

};

exports.onShowEnd = function(){

this.jump();

};

// 跳躍相關(guān)

exports.onJumping = function(time){

var t = parseInt(time / cycleTime);

time = time % cycleTime;

if( t % 2 ) time = cycleTime - time;

image.attr("y", jumpAnim( time, ey, dy, cycleTime ));

};;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\inja.js

*/

define("scripts/object/ninja.js", function(exports){

var displacement = require("scripts/factory/displacement");

var tween = require("scripts/lib/tween");

exports = displacement.create("images/ninja.png", 244, 81, 315, -140, 315, 43, {

show: tween.bounce.co,

hide: tween.exponential.co

}, 1e3);;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\quit.js

*/

define("scripts/object/quit.js", function(exports){

var rotate = require("scripts/factory/rotate");

var tween = require("scripts/lib/tween");

exports = rotate.create("images/quit.png", 493, 311, 141, 141, 1e-5, tween.exponential.co, 500);;

return exports;

});

/**

* @source D:\\hosting\\demos\\fruit-ninja\\output\\scripts\\object\\score.js

*/

define("scripts/object/score.js", function(exports){

var layer = require("scripts/layer");

var tween = require("scripts/lib/tween");

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

var Ucren = require("scripts/lib/ucren");

var setTimeout = timeline.setTimeout.bind( timeline );

var anim = tween.exponential.co;

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

/**

* 分數(shù)模塊

*/

var image, text1, text2, animLength = 500;;

var imageSx = -94, imageEx = 6;

var text1Sx = -59, text1Ex = 41;

var text2Sx = -93, text2Ex = 7;

exports.anims = [];

exports.set = function(){

image = layer.createImage( "default", "images/score.png", imageSx, 8, 29, 31 ).hide();

text1 = layer.createText( "default", "0", text1Sx, 24, "90-#fc7f0c-#ffec53", "30px" ).hide();

text2 = layer.createText( "default", "BEST 999", text2Sx, 48, "#af7c05", "14px" ).hide();

};

exports.show = function( start ){

timeline.createTask({

start: start, duration: animLength, data: [ "show", imageSx, imageEx, text1Sx, text1Ex, text2Sx, text2Ex ],

object: this, onTimeUpdate: this.onTimeUpdate, onTimeStart: this.onTimeStart, onTimeEnd: this.onTimeEnd,

recycle: this.anims

});

};

exports.hide = function( start ){

timeline.createTask({

start: start, duration: animLength, data: [ "hide", imageEx, imageSx, text1Ex, text1Sx, text2Ex, text2Sx ],

object: this, onTimeUpdate: this.onTimeUpdate, onTimeStart: this.onTimeStart, onTimeEnd: this.onTimeEnd,

recycle: this.anims

});

};

exports.number = function( number ){

text1.attr( "text", number || 0 );

image.scale( 1.2, 1.2 );

setTimeout(function(){

image.scale( 1, 1 );

}, 60);

// message.postMessage( number, "score.change" );

};

// 顯示/隱藏 相關(guān)

exports.onTimeUpdate = function( time, mode, isx, iex, t1sx, t1ex, t2sx, t2ex ){

image.attr( "x", anim( time, isx, iex - isx, animLength ) );

text1.attr( "x", anim( time, t1sx, t1ex - t1sx, animLength ) );

text2.attr( "x", anim( time, t2sx, t2ex - t2sx, animLength ) );

};

exports.onTimeStart = function( mode ){

if( mode === "show" )

[ image, text1, text2 ].invoke( "show" );

};

exports.onTimeEnd = function( mode ){

if( mode === "hide" )

[ image, text1, text2 ].invoke( "hide" ),

text1.attr( "text", 0 );

};;

return exports;

});

startModule("scripts/main");

html5代碼

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="description" content="A simple HTML5 Template">

<meta name="author" content="dron">

<meta name="viewport" content="width="360px",height="auto" />

<meta name="apple-mobile-web-app-capable" content="yes">

<meta name="apple-mobile-web-app-status-bar-style" content="black">

<link rel="shortcut icon" href="/favicon.ico">

<link rel="stylesheet" href="images/index.css">

<title>水果忍者HTML5網(wǎng)頁版在線游戲</title>

<!--[if lt IE 9]><script>document.createElement("canvas");</script><![endif]-->

</head>

<body>

<div id="extra"></div>

<em> -- Fruit Ninja -- </em>

<em> The game is developed by the Baidu JS team, </em>

<em> we provide the source in git: https://github.com/ChineseDron/fruit-ninja </em>

<em> follow me on weibo http://weibo.com/baidujs </em>

<em> or learn more, to see http://tangram.baidu.com </em>

<canvas id="view" width="360px",height="auto" />

<div id="desc">

<div style="text-align:center;clear:both;">

<script src="/gg_bd_ad_720x90.js" type="text/javascript"></script>

<script src="/follow.js" type="text/javascript"></script>

</div>

<div>水果忍者網(wǎng)頁版,由<a target="_blank">百度 JS 小組</a>傾情提供</div>

<div id="browser"></div>

</div>

<script src="scripts/all.js"></script>

</body>

</html>

以上就是關(guān)于手機pos機網(wǎng)站源碼,超炫HTML5游戲 附游戲源碼的知識,后面我們會繼續(xù)為大家整理關(guān)于手機pos機網(wǎng)站源碼的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://m.afbey.com/news/48310.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。