namespace D
  • Home
  • kirikiri
    • Tools >
      • THE NVL Maker >
        • New Game
        • New Site
      • THE Rensei Koubou
      • KAGConfigEX2
    • Sample Games >
      • Rclick Menu Sample
      • Transition & Action Sample
      • Rock, paper, scissors
      • Item Sample
    • Plugins >
      • MultiEditLayer.tjs
      • YesNoDialog.tjs
      • AnimPlayer.ks
      • TimeFrame.ks
      • PicScroller.ks
    • Notes >
      • SliderLayer
      • pimage/templayer
      • incontextof
      • Video
      • layerExSave.dll
      • gfxEffect.dll
      • KAGEXSytleButtons
      • TextEffect
    • Reference
  • Visual C# & Unity
    • Source Code
    • Reference
  • Flash & HTML5
    • Note project
    • Note MovieClip & Transition
    • Note Loading Bar
    • Reference
  • VBA&JSX
  • Novel
  • Diary

自动显示回收的日期栏

@if exp="typeof(global.timeframe_object) == 'undefined'"

@iscript
//---------------------------------------------------------------------------------------
//自动显示回收的日期栏 by VariableD
//加工·修改自由
//转载请注明作者和出处
//---------------------------------------------------------------------------------------
//单个数字
class TimeNum
{
    var fore;
    var back;
    var l;
    var t;
    
    //创建一个数字
    function TimeNum(window,owner,n)
    {
                   this.owner = owner;
                this.window = window;

                fore = new Layer(window, window.fore.base);
                back = new Layer(window, window.back.base);
                
                fore.hitType = htMask;
                fore.hitThreshold = 256; 
                back.hitType = htMask;
                back.hitThreshold = 256;

                fore.loadImages("num-"+n); //读入单个数字图片,文件名为num-0到num-9
                back.assignImages(fore);
                fore.setSizeToImageSize(); 
                back.setSizeToImageSize();
    }
        function finalize()
        {
                invalidate fore;
                invalidate back;
        }
        
   //显示数字,设定数字和日期框的相对位置
      function spawn(pos)
      {
             t=owner.top+47;
             l=pos;
                fore.setPos(l, t);
                back.setPos(l, t); // 保证表里页面的位置同步
                fore.visible = owner.foreVisible;
                back.visible = owner.backVisible;
      }
      
      //可见效果(由plugin控制)
        function resetVisibleState()
        {

                        fore.visible = owner.foreVisible;
                        back.visible = owner.backVisible;
        }
        
      //刷新数字
      function move()
      {
             t=owner.top+47; //数字的移动是跟随日期框的
             fore.setPos(l, t);
              back.setPos(l, t); // 保证表里页面的位置同步
      }
      
      //表里交换
              function exchangeForeBack()
        {
                // trans时的表里页内容交换
                var tmp = fore;
                fore = back;
                back = tmp;
        }
}
//---------------------------------------------------------------------------------------
//日期栏
class TimeFrame
{
   var fore;
   var back;
   var spawned = false;
   var l;
   var t;
   
   //创建日期栏
   function TimeFrame(window, owner)
   {
                   this.owner = owner;
                this.window = window;

                fore = new Layer(window, window.fore.base);
                back = new Layer(window, window.back.base);
                
                fore.hitType = htMask;
                fore.hitThreshold = 256;
                back.hitType = htMask;
                back.hitThreshold = 256;

                fore.loadImages("时间栏-背景"); // 读入日期框背景图片
                back.assignImages(fore);
                fore.setSizeToImageSize(); 
                back.setSizeToImageSize();
   }
   
  //删除日期栏
        function finalize()
        {
                invalidate fore;
                invalidate back;
        }
        
   //显示
      function spawn()
      {
             l=owner.left;
             t=owner.top;
                spawned = true;
                fore.setPos(l, t);
                back.setPos(l, t); 
                fore.visible = owner.foreVisible;
                back.visible = owner.backVisible;
      }
      
      //可见效果(由plugin控制)
        function resetVisibleState()
        {
                // 表示、非表示状态重设
                if(spawned)
                {
                        fore.visible = owner.foreVisible;
                        back.visible = owner.backVisible;
                }
                else
                {
                        fore.visible = false;
                        back.visible = false;
                }
        }
        
      //移动效果
      function move()
      {
             owner.top++;//向下移动
             t=owner.top;
             fore.setPos(l, t);
              back.setPos(l, t); 
      }
      
      function moveback()
      {
             owner.top--;//向上移动
             t=owner.top;
             fore.setPos(l, t);
              back.setPos(l, t); 
      }
      
      //表里交换
              function exchangeForeBack()
        {

                var tmp = fore;
                fore = back;
                back = tmp;
        }
}

//---------------------------------------------------------------------------------------
class TimeFramePlugin extends KAGPlugin
{
      var dframe;
      var nums=[];
        var timer; // 计时器

        var window; 
        var foreVisible = true; 
        var backVisible = true; 
        
        var left=500;//日期框左坐标
        var top=-100;//日期框初始上坐标
        var count=0;//计数器
        
        var y;//年月日,用来保存日期框上的各具体数字
        var m;
        var d;

        function TimeFramePlugin(window)
        {
                super.KAGPlugin();
                this.window = window;
        }
        
                function finalize()
        {
                invalidate timer if timer !== void;
                super.finalize(...);
        }

               function init(yy,mm,dd)
        {               
               dframe=new TimeFrame(window,  this); //创建日期框

               //创建日期数字,并读入具体年月日数字

               if (nums==void) nums=[]; 
               nums[0]=new TimeNum(window,this,yy[0]);
               nums[1]=new TimeNum(window,this,yy[1]);
               nums[2]=new TimeNum(window,this,yy[2]);
               nums[3]=new TimeNum(window,this,yy[3]);
               
               nums[4]=new TimeNum(window,this,mm[0]);
               nums[5]=new TimeNum(window,this,mm[1]);
               
               nums[6]=new TimeNum(window,this,dd[0]);
               nums[7]=new TimeNum(window,this,dd[1]);
               
              //计时器的具体设定

                timer = new Timer(onTimer, '');
                timer.interval = 10;
                timer.enabled = true;
                
                foreVisible = true;
                backVisible = true;
                
                y=yy;
                m=mm;
                d=dd;
                
                dframe.spawn();
                
                //对年月日的显示位置进行设定,这里的left就是日期框的左坐标了
                nums[0].spawn(left*1+40);
                nums[1].spawn(left*1+60);
                nums[2].spawn(left*1+80);
                nums[3].spawn(left*1+100);
                
                nums[4].spawn(left*1+150);
                nums[5].spawn(left*1+170);
                
                nums[6].spawn(left*1+220);
                nums[7].spawn(left*1+240);
        }
        
               function uninit()
        {
               
               top=-100;
               count=0;
               timer=void;
               dframe=void;
               nums=void;

        }
        
        function onTimer()
        {
             if(timer == void) return; //当计时器被删除,什么都没发生

             if (count>=700) {uninit();return;} //当日期框已经收回,处理掉它
             
             if (count<100) dframe.move(); //向下移动阶段(显示)

             if (count>=500 && count<700) dframe.moveback(); //向上移动阶段(收回)

             for (var i=0;i<8;i++) nums[i].move();//所有数字跟着日期框移动

             count++;
        }
        
        function resetVisibleState()
        {
                if (dframe==void) return;
                dframe.resetVisibleState(); // resetVisibleState メソッドを呼び出す
             for (var i=0;i<8;i++) nums[i].resetVisibleState();
        }
        
        function onStore(f, elm)
        {
                // 当保存时,记录日期框的状况

                var dic = f.timeframes = %[];
                dic.init = timer !== void;
                dic.foreVisible = foreVisible;
                dic.backVisible = backVisible;
                dic.count=count;
                dic.y=y;
                dic.m=m;
                dic.d=d;
                dic.left=left;
                dic.top=top;
        }

        function onRestore(f, clear, elm)
        {
                // 当读取时……
                var dic = f.timeframes;
                if(dic === void || !+dic.init)
                {
                        uninit();
                }
                else if(dic !== void && +dic.init)
                {
                        left=dic.left;
                        top=dic.top;
                        y=dic.y;
                        m=dic.m;
                        d=dic.d;
                        count=dic.count;
                        init(y,m,d,%[ forevisible : dic.foreVisible, backvisible : dic.backVisible ] );
                }
        }
        function onCopyLayer(toback)
        {
                // 复制时表里交换
                if(toback)
                {
                        // 表→里
                        backVisible = foreVisible;
                }
                else
                {
                        // 里→表
                        foreVisible = backVisible;
                }
                resetVisibleState();
        }
        
        function onExchangeForeBack()
        {
                // 表、里页内容交换
           if (dframe==void) return;
           dframe.exchangeForeBack(); // exchangeForeBack メソッドを呼び出す
        }
        
}

kag.addPlugin(global.timeframe_object = new TimeFramePlugin(kag));

@endscript
@endif

;-------------------------------------------------------------------------------------------
;★时间显示
;-------------------------------------------------------------------------------------------
[macro name=dateframe]
;显示日期框并设定年月日
@eval exp="timeframe_object.init(mp.year,mp.month,mp.day)"
;同步年月日到三个对应变数
@eval exp="f.year=mp.year"
@eval exp="f.month=mp.month"
@eval exp="f.day=mp.day"
[endmacro]

[return]

需求说明

准备一张日期框图片和0-9的数字图片。
用@dataframe year="2010" month="04" day="20"调用。(年一定要4位,月日一定要2位,记得加引号)

假如你看得懂,位置可以随便调,这个是在右上角,落下来,等待几秒,然后收回去。
也可以调成从下到上或者从左到右,反正原理一样。
同时会自动改变f.year、f.month、f.day的内容。
参考下雨下雪插件做的,所以其实还可以扩展出一些其他的功能来……
Powered by Create your own unique website with customizable templates.