标题: 求教 tjs 中 在layer 或者message层写字的方法
57379170
会员
Rank: 1



UID 2235
精华 0
积分 49
帖子 18
阅读权限 5
注册 2009-6-28
 
发表于 2009-7-25 22:57  资料  短消息  加为好友 
求教 tjs 中 在layer 或者message层写字的方法

现在已知的是

drawText();
但是不知道控制字体以及大小的方法;
还有
processCh('');
同上

实际上的具体问题是

自己建了一个类
class miniLayer extends KAGLayer
{
//其中包括一些 诸如下述情况

var i;
var Messages=[];
var _maxMessageLayerNum=1;
for (i =1;i<=_maxMessageLayerNum;i++)
  {
    Messages=new MessageLayer(window,this);   
  }

//当然这样可以用 诸如 addButton addSliderLayer等 MessageLayer的函数来构建这个 miniLayer。
//但是 关于文字的书写控制如何做
//drawText尝试了 可以写 但是不清楚控制字体的方法
//processCh()尝试了 ......但是没有效果。。。嘎嘎


}



现在这个类 的完成度 如下

//------自定义类 myLayer------

class miniLayer extends KAGLayer
{
        var name;
        var Messages=[];                //messages层
        var Layers=[];                        //layers层
        var backGroundLayer;                //背景层
        var backGroundButtonLayer;        //底层功能层
        var _left,_top,_width,_height;        //坐标 以及 大小
        var _maxLayerNum;                //最大layer数
        var _maxMessageLayerNum;        //最大messagelayer数
        var _elm=%[];                        //当前属性
        var _Messages_elm=[];                //message层属性
        var _Layers_elm=[];                //layer层属性
        var _Messages_addelm=[];        //message层相对属性
        var _Layers_addelm=[];                //layer层相对属性
        //构造函数
        function miniLayer(win,par,EXname)
        {
                name=EXname;
                var elm=%[];
                super.KAGLayer(win, par);

                _left=0;
                _top=0;
                _width=400;
                _height=300;
                absolute = 100000;
                opacity = 256;
                visible = false;
               
                _elm.left=_left;
                _elm.top=_top;
                _elm.width=_width;
                _elm.height=_height;
                _elm.index = absolute;
                _elm.opacity = opacity;
                _elm.visible = visible;
               

               
               
                _maxLayerNum=0;
                _maxMessageLayerNum=0;
//                Layers[1] = newLayer(1);
//                resetLayerOptions(1);
       
//                Messages[1] = newMessageLayer(1);
//                resetMessageLayerOptions(1);
                       
                Layers[0] = newLayer(0);
                backGroundLayer = Layers[0];
                resetLayerOptions(0);
               
                Messages[0] = newMessageLayer(0);
                backGroundButtonLayer = Messages[0];
                resetMessageLayerOptions(0);
               
                setSize(_width,_height);
                setPos(_left,_top);
                setButtons();
               
                super.setOptions(_elm);
        }
        //析构函数
        function finalize()
        {
                var i;
                for (i=0;i<=_maxLayerNum;i++)
                {
                        invalidate Layers;
                }
                for (i=1;i<=_maxMessageLayerNum;i++)
                {
                        invalidate Messages;
                }
                super.finalize(...);
        }
        //--基本设定 --
        function setOptions(elm)
        {
                _left=elm.left if elm.left !=void;
                _top= elm.top if elm.top !=void;
                _width=elm.width if elm.width != void;
                _height=elm.height if elm.height !=void;
                absolute = elm.index if elm.index !=void;
                opacity = elm.opacity if elm.opacity !=void;
                visible = elm.visible if elm.visible !=void;
               
                _elm.left=_left;
                _elm.top=_top;
                _elm.width=_width;
                _elm.height=_height;
                _elm.index = absolute;
                _elm.opacity = opacity;
                _elm.visible = visible;
                super.setOptions(_elm);
                if (_elm.visible == false)
                {
                        hide();
                }
        }
        //--显示 --
        function show()
        {
                var i;
                visible = true;
                _elm.visible=visible;
                focus();
                setMode();


                for (i=0;i<=_maxLayerNum;i++)
                {
                        Layers.visible = _Layers_elm.visible;
                }
                for (i=1;i<=_maxMessageLayerNum;i++)
                {
                        Messages.visible = _Layers_elm.visible;
                }
        }
        function hide()
        {
                var i;
                visible=false;
                _elm.visible=visible;

                for (i=0;i<=_maxLayerNum;i++)
                {
                        Layers.visible = false;
                }
                for (i=1;i<=_maxMessageLayerNum;i++)
                {
                        Messages.visible = false;
                }
                removeMode();
        }
        function setButtons()
        {
                var elm=%[];
                //------退出按钮------
                var Bwidth=40;
                elm.exp=name+".hide()";
                elm.normal='xx';
                elm.caption="x";
                Messages[0].locate(_elm.width-Bwidth);
                Messages[0].addButton(elm);
                //------add other buttons
        }
       
        //--重置显示--
        function reset()
        {
                var i;
                super.setOptions(_elm);
                for (i=0;i<=_maxLayerNum;i++)
                {
                        Layers.setOptions(_Layers_elm);
                }
                for (i=0;i<=_maxMessageLayerNum;i++)
                {
                        Messages.setOptions(_Messages_elm);
                }
        }
        //--设定大小 --
        function setSize(x,y)
        {
                var elm=%[];
                _width = x;
                _height = y;
                _elm.width = x;
                _elm.height = y;
                elm.width = x;
                elm.height = y;
                super.setSize(...);
                reset();
        }

        //--设定位置 --
        function setPos(x,y)
        {
                var i;
                var elm=%[];
                _left = x;
                _top = y;
                elm.left = x;
                elm.top = y;
                _elm.left = elm.left;
                _elm.top = elm.top;
                super.setPos(...);
                reset();       
        }
        //新建message layer 元素
        function newMessageLayer(num)
        {
                var templayer=new MessageLayer(kag, this, 'Message'+num, num, true);
                _Messages_elm[num]=%[];
                _Messages_addelm[num]=%[];
                return templayer;
        }
        //新建 layer 元素
        function newLayer(num)
        {
                var templayer=new CharacterLayer(kag, this, 'Layer'+num, num);
                _Layers_elm[num]=%[];
                _Layers_addelm[num]=%[];
                return templayer;
        }
        //设定最大layer数
        function setMaxLayerNum(num)
        {
                var i;
                if(_maxLayerNum<num)
                {
                       
                        for (i=_maxLayerNum+1;i<=num;i++)
                        {
                                Layers=newlayer(i);
                        }
                }
                else if(_maxLayerNum>num)
                {
                        for (i=_maxLayerNum;i>num;i--)
                        {
                                invalidate Layers;
                        }
                }
                _maxLayerNum=num;
       
        }
        //设定最大messagelayer数
        function setMaxMessageLayerNum(num)
        {
                        var i;
                if(_maxMessageLayerNum<num)
                {
                       
                        for (i=_maxMessageLayerNum+1;i<=num;i++)
                        {
                                Messages=newMessagelayer(i);
                        }
                }
                else if(_maxMessageLayerNum>num)
                {
                        for (i=_maxLayerNum;i>num;i--)
                        {
                                invalidate Messages;
                        }
                }
                _maxMessageLayerNum=num;
       
        }
        //设定 message layer属性
        function resetMessageLayerOptions(num)
        {
                _Messages_elm[num].left = _elm.left;
                _Messages_elm[num].top = _elm.top;
                _Messages_elm[num].width = _elm.width;
                _Messages_elm[num].height = _elm.height;
                _Messages_elm[num].opacity = _elm.opacity;
                _Messages_elm[num].index = _elm.index + num*100 + 50;
                _Messages_elm[num].visible = true;
               
                _Messages_addelm[num].left = 0;
                _Messages_addelm[num].top = 0;
                _Messages_addelm[num].width = _elm.width;
                _Messages_addelm[num].height = _elm.height;
                _Messages_addelm[num].opacity = _elm.opacity;
                _Messages_addelm[num].index = num*100+50;
                _Messages_addelm[num].visible = _elm.visible;
               
        }
        function setMessageLayerOptions(num,elm)
        {
                _Messages_elm[num].left = (_elm.left + elm.left) if (elm.left != void);       
                _Messages_elm[num].top = (_elm.top + elm.top) if (elm.top !=void);
                _Messages_elm[num].width = elm.width if (elm.width !=void);
                _Messages_elm[num].height = elm.height if (elm.height !=void);
                _Messages_elm[num].opacity = elm.opacity if (elm.opacity != void);               
                _Messages_elm[num].index = (_elm.index + elm.index) if (elm.index != void);
                _Messages_elm[num].visible = elm.visible if elm.visible !=void;
                Messages[num].setOptions(_Messages_elm[num]);
                reset();
        }
        //设定 layer 属性
        function resetLayerOptions(num)
        {
                _Layers_elm[num].left = _elm.left;
                _Layers_elm[num].top = _elm.top;
                _Layers_elm[num].width = _elm.width;
                _Layers_elm[num].height = _elm.height;
                _Layers_elm[num].opacity = _elm.opacity;
                _Layers_elm[num].index = _elm.index + num*100;
                _Layers_elm[num].visible = true;
               
                _Layers_addelm[num].left = 0;
                _Layers_addelm[num].top = 0;
                _Layers_addelm[num].width = _elm.width;
                _Layers_addelm[num].height = _elm.height;
                _Layers_addelm[num].opacity = _elm.opacity;
                _Layers_addelm[num].index = num*100+50;
                _Layers_addelm[num].visible = _elm.visible;
        }
        function setLayerOptions(num,elm)
        {
                _Layers_elm[num].left = (_elm.left + elm.left) if (elm.left != void);
                _Layers_elm[num].top = (_elm.top + elm.top) if (elm.top !=void);
                _Layers_elm[num].width = elm.width if (elm.width !=void);
                _Layers_elm[num].height = elm.height if (elm.height !=void);
                _Layers_elm[num].opacity = elm.opacity if (elm.opacity != void);
                _Layers_elm[num].index = (_elm.index + elm.index) if (elm.index != void);
                _Layers_elm[num].visible = elm.visible if elm.visible != void;               
                Layers[num].setOptions(_Layers_elm[num]);
                reset();
        }
}

顶部
57379170
会员
Rank: 1



UID 2235
精华 0
积分 49
帖子 18
阅读权限 5
注册 2009-6-28
 
发表于 2009-7-25 23:03  资料  短消息  加为好友 
因为没有 写 在message层写字的function

测试中 在 新建的 实例中 直接操作如下
*start
@iscript
var myLayer= new miniLayer(kag,kag.fore.base,'myLayer');
myLayer.hide();
myLayer.Messages[0].drawText(100,100,'日你妹啊啊啊啊啊啊啊',0xffff00);
myLayer.show();
@endscript
@val
[link target=*end]返回[endlink]
[s]
*end
@jump target=*start;

确实可以写一些 字出来 但是 不知道怎么调整字体 大小 什么的。。

[ 本帖最后由 57379170 于 2009-7-26 10:12 编辑 ]

顶部
57379170
会员
Rank: 1



UID 2235
精华 0
积分 49
帖子 18
阅读权限 5
注册 2009-6-28
 
发表于 2009-7-25 23:15  资料  短消息  加为好友 
其实 总体思想是 想自己 包装一下

方便以后建立一些功能模块 比如说 config save/load cg memory 等模块 也可以[history enabled = false output =true]
然后自己写 history样式
当然 kag 层面也可也做 但总感觉 看着一堆的 @ 特别恶心。。。

还是特别喜欢 一个东西 直接 new 一下就好了的感觉。。。

顶部
57379170
会员
Rank: 1



UID 2235
精华 0
积分 49
帖子 18
阅读权限 5
注册 2009-6-28
 
发表于 2009-7-25 23:27  资料  短消息  加为好友 
接着再 舔脸 求一些东西

如果要在类中 添加 鼠标事件 具体的做法是怎样。

自己也尝试了一个
        function onMouseDown(x, y, button)
        {
                if(button == mbRight) hide();
                }
但是发现没有虾米效果

同时看 history layer 发现一些 比如说 focus() setMode() removeMode();
求意义 以及用法

具体想做 出一个模块 可以和 对话并行
简单的说就是 当模块打开的时候 在 模块范围
比如说 大小(800,600)的窗口 位置是(500,0),大小为(300,100)的myLayer

需要做的是
1.在 myLayer范围内 的鼠标活动 不会导致对话继续 而是换成该模块内自定义的功能,比如说按住左键拖拽模块位置.
2. myLayer范围外 正常单击鼠标左键 还会继续读取剧本, 右键以及滚轮功能不消失,照常或是其他模块自定义的功能,比如说常见的右键菜单。

当然考虑过 用一个透明大按钮 覆盖住整个 myLayer的最底层,按钮作用就是startdrag();......当然只是最后手段了,希望能有比较正常的方法。

顶部
57379170
会员
Rank: 1



UID 2235
精华 0
积分 49
帖子 18
阅读权限 5
注册 2009-6-28
 
发表于 2009-7-25 23:32  资料  短消息  加为好友 
先去睡了
明 起床 先尝试 透明大按钮的想法~

急求 drawText的 文字样式调整的做法。

顶部
resty
会员
Rank: 1



UID 2180
精华 0
积分 178
帖子 81
阅读权限 5
注册 2009-5-13
 
发表于 2009-7-31 02:51  资料  短消息  加为好友 
文字样式设置好Layer下面的font成员吧

你前面说的太长了- -,你要做的事情我试过,好像都能做,问题也没遇到什么- -

顶部
 



清除 Cookies - 联系我们 - [Key Fans Club] the Council of Doujin-game Development and Promotion - Archiver - WAP
Powered by Discuz! 5.5.0 © 2001-2006 Comsenz Inc.
Processed in 0.027321 second(s), 9 queries , Gzip enabled
粤ICP备05060595号
[ 当前模板 - 天高云淡 v 设计制作 - 七星论坛 v 请使用1024*768或以上分辨率浏览本模板 ]
请勿删除或修改此处版权图示