krkr下雪效果

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

身为新手的偶已经脱力了,研究了半天加速度,X和Y,最后还是把X设为0,竖直速度设成匀速了。(因为星星比较重...要垂直落...)不过似乎也能改成流星雨效果什麼的,可能要用枫叶的那个ks改。上传到了百度盘:/s/1c048cFm使用说明:把图片文件放在image文件夹下面,starsnow.ks放在NVL文件夹下面,macro如果没有修改过就直接覆盖吧。然后调用是starsnowinit,停止是starsnowuninit修改天气效果的步骤简介:1、复制nvl文件夹下的snow.ks,修改文件名。2、在macro.ks上加上[call storage=starsnow.ks],类似这样载入3、把需要的图片放进image里面具体的代码如下,有一些参数研究了一下,最后却还是没用上。其实说来说去最重要的参数就是ore.loadImages("starsnow_" + n); 这一步,只要改了这里,就会读取image里对应名字的图片,飘的东西就对了,至於怎麼飘那就是另外的问题了。

回复 2楼2014-02-12 21:16举报 |

甜饮凌茶
自带板凳3
@if exp="typeof(global.starsnow_object) == 'undefined'"@iscript
/*模拟星星飘动下来的画面,是在星(snow)的基础上改的。*/
class StarsnowGrain{// 星星粒子的类,var开头表示定义参数
var fore; // 表画面の星粒オブジェクトvar back; // 裏画面の星粒オブジェクトvar xvelo; // 横速度var yvelo; // 縦速度var xaccel; // 横加速var yaccel;//竖加速度var l, t; // 横位置と縦位置var ownwer; // このオブジェクトを所有する SnowPlugin オブジェクトvar spawned = false; // 星粒が出现しているかvar window; // ウィンドウオブジェクトへの参照
function StarsnowGrain(window, n, owner){// StarsnowGrain コンストラクタthis.owner = owner;this.window = window;
fore = new Layer(window, window.fore.base);back = new Layer(window, window.back.base);
fore.absolute = 1000-1; // 重ね合わせ顺序はメッセージ履歴よりも奥back.absolute = fore.absolute;
fore.hitType = htMask;fore.hitThreshold = 256; // マウスメッセージは全域透过back.hitType = htMask;back.hitThreshold = 256;
fore.loadImages("starsnow_" + n); // 画像を読み込む 在这里写入图片文件的名字back.assignImages(fore);fore.setSizeToImageSize(); // レイヤのサイズを画像のサイズと同じにback.setSizeToImageSize();xvelo = 0; // 横方向速度yvelo = 9.6; // 縦方向速度,初始表达式:yvelo = n*0.6 + 1.9 + Math.random() * 0.2;提高纵方向的速度,就会下落的很快//xaccel = Math.random(); // 初期加速度//yaccel = Math.random();//竖加速度}
function finalize(){invalidate fore;invalidate back;}
function spawn(){// 出现,spawn英文含义为大量出现l = Math.random() * window.primaryLayer.width; // 横初期位置t = -fore.height; // 縦初期位置spawned = true;fore.setPos(l, t);back.setPos(l, t); // 裏画面の位置も同じにfore.visible =

owner.foreVisible;back.visible = owner.backVisible;}
function resetVisibleState(){// 表示?非表示の状态を再设定するif(spawned){fore.visible = owner.foreVisible;back.visible = owner.backVisible;}else{fore.visible = false;back.visible = false;}}
function move(){// 星星颗粒的动作if(!spawned){// 出现していないので出现する机会をうかがうif(Math.random() < 0.002) spawn();}else{//计算偏移位置l += xvelo;t += yvelo;//计算速度和加速度//xvelo += xaccel;//xaccel += 0;//yvelo += yaccel; //yaccel = 0.00008;//设定最大加速和最大减速(可以改为越来越快,而很少减速。y正数为向下,负数为向上,x越大,则越是向右边飘,反之是向左边飘,也可以做成垂直下落。)//if(xvelo>=0) xvelo=0;//if(xvelo<=0) xvelo=0;//if(xaccel>=0) xaccel=0;//if(xaccel<=0) xaccel=0;//if(yvelo>=1000.5) yvelo=1000.5 //if(yvelo<=1.0) yvelo=1.0;//最小值设为正数,则只向下飘动。 //if(yaccel>=9.8) yaccel=9.8; //if(yaccel<=-0.0) yaccel=-0.0;//如果超过边界的话if(t >= window.primaryLayer.height){t = -fore.height;l = Math.random() * window.primaryLayer.width;}fore.setPos(l, t);back.setPos(l, t); // 裏画面の位置も同じに}}
function exchangeForeBack(){// 表と裏の管理情报を交换するvar tmp = fore;fore = back;back = tmp;}}
class StarsnowPlugin extends KAGPlugin{// 星を振らすプラグインクラス//定义星星粒子的模样
var starsnows = []; // 星星粒子var timer; // タイマvar window; // ウィンドウへの参照var foreVisible = true; // 表画面が表示状态かどうかvar backVisible = true; // 裏画面が表示状态かどうか
function StarsnowPlugin(window){super.KAGPlugin();this.window = window;}
function finalize(){// finalize メソッド// このクラスの管理するすべてのオブジェクトを明示的に破弃for(var i = 0; i < starsnows.count; i++)invalidate starsnows[i];invalidate starsnows;
invalidate timer if timer !== void;
super.finalize(...);}
function init(num, options){// num 个の星粒を出现させるif(timer !== void) return; // すでに星粒はでている
// 星星粒を作成for(var i = 0; i < num; i++){var n = intrandom(0, 15); // 星粒の大きさ ( ランダム )这个地方是图片的编号,(0,4)的意思是图片是从0~4。有多少图片就设置多少编号。starsnows[i] = new StarsnowGrain(window, n, this);}starsnows[0].spawn(); // 最初の星粒だけは最初から表示
// タイマーを作成timer = new Timer(onTimer, '');timer.interval = 80;timer.enabled = true;
foreVisible = true;backVisible = true;setOptions(options); // オプションを设定}
function uninit(){// 星粒を消すif(timer === void) return; // 星粒はでていない
for(var i = 0; i < starsnows.count; i++)invalidate starsnows[i];starsnows.count = 0;
invalidate timer;timer = void;}
function setOptions(elm){// オプションを设定するforeVisible = +elm.forevisible if elm.for

evisible !== void;backVisible = +elm.backvisible if elm.backvisible !== void;resetVisibleState();}
function onTimer(){// タイマーの周期ごとに呼ばれるvar starsnowcount = starsnows.count;for(var i = 0; i < starsnowcount; i++)starsnows[i].move(); // move メソッドを呼び出す}
function resetVisibleState(){// すべての星粒の 表示?非表示の状态を再设定するvar starsnowcount = starsnows.count;for(var i = 0; i < starsnowcount; i++)starsnows[i].resetVisibleState(); // resetVisibleState メソッドを呼び出す}
function onStore(f, elm){// 栞を保存するときvar dic = f.starsnows = %[];dic.init = timer !== void;dic.foreVisible = foreVisible;dic.backVisible = backVisible;dic.starsnowCount = starsnows.count;}
function onRestore(f, clear, elm){// 栞を読み出すときvar dic = f.starsnows;if(dic === void || !+dic.init){// 星はでていないuninit();}else if(dic !== void && +dic.init){// 星はでていたinit(dic.starsnowCount, %[ forevisible : dic.foreVisible, backvisible : dic.backVisible ] );}}
function onStableStateChanged(stable){}
function onMessageHiddenStateChanged(hidden){}
function onCopyLayer(toback){// レイヤの表←→裏情报のコピー// このプラグインではコピーすべき情报は表示?非表示の情报だけif(toback){// 表→裏backVisible = foreVisible;}else{// 裏→表foreVisible = backVisible;}resetVisibleState();}
function onExchangeForeBack(){// 裏と表の管理情报を交换var starsnowcount = starsnows.count;for(var i = 0; i < starsnowcount; i++)starsnows[i].exchangeForeBack(); // exchangeForeBack メソッドを呼び出す}}
kag.addPlugin(global.starsnow_object = new StarsnowPlugin(kag));// プラグインオブジェクトを作成し、登录する
@endscript@endif; マクロ登录@macro name="starsnowinit";设定最大显示多少颗星星@eval exp="mp.num=100" cond=(mp.num===void)@eval exp="starsnow_object.init(+mp.num, mp)"@endmacro@macro name="starsnowuninit"@eval exp="starsnow_object.uninit()"@endmacro@macro name="starsnowopt"@eval exp="starsnow_object.setOptions(mp)"@endmacro@return

回复 3楼2014-02-12 21:17举报 |

甜饮凌茶
自带板凳3
昨天有人回复了,但是偶点进去就显示已删除。
测试了一下,这个效果是可以和snow一起用的。
就是snow的雪粒子很少,要调大才明显。



相关文档
最新文档