krkr进阶教程3

 

KAGlayer以及layer类的一些相关

既然在mainwindow里边说到baselayer了,于是就顺便先把这个类拎出来讲一下。这样一路捋过去的话应该可以把layer的子类大部分捋一遍……当然全部捋到是不可能的……就算我有那么闲……感觉上也意义不大……

一边看着dollar淡定的在我面前扒拉着猫砂盆一边敲键盘……=_=

(顺便说下因为我偷懒以下敲的名字都不分大小写了,大家领会意思就好,实际上在脚本中是一定要大小写分开的,不然程序辨认不出,就是说BaseLayer一定不能像我下边一样写为baselayer)

该教程为水螅制作,未经允许,请勿转载

打开GraphicLayer.tjs,查找baselayer可以看到这一句

class BaseLayer extends GraphicLayer

就是说baselayer是继承了graphiclayer的类,那么查找graphiclayer,可以看到这一句

class GraphicLayer extends AnimationLayer

就是说baselayer是继承了AnimationLayer的类

AnimationLayer在AnimationLayer.tjs里,打开这个文件,可以看到前边一大段关于asd动画的使用说明的注释,这个暂且先不管它,往下拉可以看到

class AnimationLayer extends ActionLayer

ActionLayer在acitonlayer.tjs里……打开这个文件可以看到……

class ActionLayer extends AffineLayer

AffineLayer在AffineLayer.tjs里……打开那个可以看到……

class AffineLayer extends KAGLayer

kaglayer在kaglayer.tjs里……我知道我写到这里已经有人想要抽我了……但是这次真的是最后的了……||||||||

打开kaglayer.tjs可以看到……

class KAGLayer extends Layer

Layer是krkr的基础类……我们不用再往上找父类了……||||||

在krkr里,layer类就是基础的图层类,主要功能就是显示图像……以及其他(其他是什么啊喂)

tjs继承类的情况和其他的语言也没啥不一样,子类默认继承父类所有属性参数和方法,子类可以再给自己添加属性参数和方法,子类可以重定义父类已有的属性参数和方法……(总觉得我说的是废话……)

不过总之就是这样,如果你想知道上边那一系列Layer的子类应该有的属性参数和方法,首先你要知道Layer有什么属性参数和方法……然后再去看子类有没有再重定义什么或者添加什么,如果你不知道Layer类的情况,看到子类里边写的东西可能就无法理解。

那么,Layer类有什么属性和方法呢……这个东西完全写在kr2doc那个文档里。关于layer类的条目我直接copy出来给大家看一下吧……

コンストラクタ
Layer
メソッド
adjustGamma ( ガンマ補正 )
affineBlend ( アフィン変換重ね合わせ )
affineCopy ( アフィン変換コピー )
affinePile ( アフィン変換ピクセルアルファブレンド重ね合わせ )
assignImages ( 画像のコピー )
beginTransition ( トランジションの開始 )
blendRect ( 矩形重ね合わせ )
bringToBack ( 一番奥に移動 )
bringToFront ( 一番手前に移動 )
colorRect ( 矩形半透明塗りつぶし )
convertType ( レイヤ画像表現形式の変換 )
copyRect ( 矩形コピー )
doBoxBlur ( 矩形ブラーをかける )
doGrayScale ( グレースケール変換 )
drawText ( 文字描画 )
fillRect ( 矩形塗りつぶし )
flipLR ( 左右反転 )
flipUD ( 上下反転 )
focus ( フォーカスの設定 )
focusNext ( 後方のレイヤにフォーカスを設定 )
focusPrev ( 前方のレイヤにフォーカスを設定 )
getLayerAt ( 指定位置のレイヤを取得 )
getMainPixel ( メイン画像の色の取得 )
getMaskPixel ( マスク画像の値の取得 )
getProvincePixel ( 領域画像の値の取得 )
independMainImage ( メイン画像の共有の解除 )
independProvinceImage ( 領域画像の共有の解除 )
loadImages ( 画像の読み込み )
loadProvinceImage ( 領域画像の読み込み )
moveBefore ( 指定レイヤの手前に移動 )
moveBehind ( 指定レイヤの奥に移動 )
operateAffine ( アフィン変換演算合成 )
operateRect ( 矩形演算合成 )
operateStretch ( 拡大縮小演算合成 )
pileRect ( 矩形ピクセルアルファブレンド重ね合わせ )
piledCopy ( レイヤを重ね合わせた画像をコピー )
releaseCapture ( マウスイベントキャプチャの解除 )
removeMode ( モーダル状態を解除する )
saveLayerImage ( 画像の保存 )
setAttentionPos ( 注視位置の指定 )
setClip ( 描画クリップ矩形の設定 )
setCursorPos ( マウスカーソル位置の指定 )
setImagePos ( レイヤ画像オフセットの設定 )
setImageSize ( レイヤ画像サイズの設定 )
setMainPixel ( メイン画像の色の設定 )
setMaskPixel ( マスク画像の値の設定 )
setMode ( モーダル状態にする )
setPos ( レイヤ表示位置の設定 )
setProvincePixel ( 領域画像の値の設定 )
setSize ( レイヤ表示サイズの設定 )
setSizeToImageSize ( レイヤ表示サイズを画像サイズに合わせる )
stopTransition ( トランジションを停止する )
stretchBlend ( 拡大縮小重ね合わせ )
stretchCopy ( 拡大縮小コピー )
stretchPile ( 拡大縮小ピクセルアルファブレンド重ね合わせ )
update ( 画像の更新 )
プロパティ
absolute ( 絶対位置 )
absoluteOrderMode ( 絶対位置モードかどうか )
attentionLeft ( 注視左端位置 )
attentionTop ( 注視上端位置 )
cached ( キャッシュを行うか )
callOnPaint ( onPaint イベントを呼ぶかどうか )
children ( 子レイヤ配列 )
clipHeight ( 描画クリップ矩形縦幅 )
clipLeft ( 描画クリップ矩形左端位置 )
clipTop ( 描画クリップ矩形上端位置 )
clipWidth ( 描画クリップ矩形横幅 )
cursor ( マウスカーソル )
cursorX ( マウスカーソル x 位置 )
cursorY ( マウスカーソル y 位置 )
enabled ( 操作可能かどうか )
face ( 描画方式 )
focusable ( フォーカスを受け取れるかどうか )
focused ( フォーカスされているかどうか )
font ( フォント )
hasImage ( レイヤが画像を持っているかどうか )
height ( 縦幅 )
hint ( ヒント )
hitThreshold ( 当たり判定の敷居値 )
hitType ( 当たり判定のタイプ )
holdAlpha ( アルファチャンネルを保護するか )
imageHeight ( 画像縦幅 )
imageLeft ( レイヤ画像左端オフセット )
imageModified ( 画像が変更されたか )
imageTop ( レイヤ画像上端オフセット )
imageWidth ( 画像横幅 )
imeMode ( IMEモード )
isPrimary ( プライマリレイヤかどうか )
joinFocusChain ( フォーカスチェーンに参加するか )
left ( 左端位置 )
mainImageBuffer ( メイン画像バッファポインタ )
mainImageBufferForWrite ( メイン画像バッファポインタ(書き込み用) )
mainImageBufferPitch ( メイン画像バッファピッチ )
name ( レイヤ名 )
neutralColor ( 中性色 )
nextFocusable ( 後方のフォーカスを受け取れるレイヤ )
nodeEnabled ( レイヤノードが操作可能かどうか )
nodeVisible ( ノードが可視かどうか )
opacity ( 不透明度 )
order ( 相対位置 )
parent ( 親レイヤ )
prevFocusable ( 前方のフォーカスを受け取れるレイヤ )
provinceImageBuffer ( 領域画像バッファポインタ )
provinceImageBufferForWrite ( 領域画像バッファポインタ(書き込み用) )
provinceImageBufferPitch ( 領域画像バッファピッチ )
showParentHint ( 親レイヤのヒントを引き継ぐか )
top ( 上端位置 )
type ( レイヤ表示タイプ )
useAttention ( 注視情報を使用するかどうか )
visible ( 可視かどうか )
width ( 横幅 )
window ( ウィンドウオブジェクト )
イベント
onBeforeFocus ( フォーカスを受け取る直前 )
onBlur ( フォーカスを失った )
onClick ( レイヤがクリックされた )
onDoubleClick ( レイヤがダブルクリックされた )
onFocus ( フォーカスを得た )
onHitTest ( 当たり判定 )
onKeyDown ( キーが押された )
onKeyPress ( 文字が入力された )
onKeyUp ( キーが離された )
onMouseDown ( マウスのボタンが押された )
onMouseEnter ( マウスが入ってきた )
onMouseLeave ( マウスが出ていった )
onMouseMove ( マウスが移動した )
onMouseUp ( マウスのボタンが離された )
onMouseWheel ( マウスホイールが回転した )
onNodeDisabled ( ノードが操作不能になった )
onNodeEnabled ( ノードが操作可能になった )
onPaint ( 描画されるとき )
onSearchNextFocusable ( フォーカス可能なレイヤの後方検索 )
onSearchPrevFocusable ( フォーカス可能なレイヤの前方検索 )
onTransitionCompleted ( トランジションが終了した )

具体每个方法和属性的使用在文档里都可以点进去看详细的……

从以上的条目可以看出……这个类是要用tjs写东西一定要会的……||||||你可以不会system不会controller……但是不能不会用layer的class……

在图层这一系列的类里,kaglayer.tjs就是基础了,所以我们从这个文件开始看起。

首先上边有一大串注释写了kag里边图层类的继承关系,就是这个

Layer ( 吉里吉里ネイティヴクラス )
|
+-- KAGLayer ( このファイル )
       |
       +-- AnimationLayer ( AnimationLayer.tjs )
       |    |
       |    +-- ClickGlyphLayer ( AnimationLayer.tjs )
       |    |
       |    +-- GraphicLayer ( GraphicLayer.tjs )
       |         |
       |         +-- BaseLayer ( GraphicLayer.tjs )
       |         |
       |         +-- CharacterLayer ( GraphicLayer.tjs )
       |
       +-- MessageLayer ( MessageLayer.tjs )
       |
       +-- ButtonLayer ( ButtonLayer.tjs )
       |    |
       |    +-- LinkButtonLayer ( MessageLayer.tjs )
       |    |
       |    +-- LButtonLayer ( HistoryLayer.tjs )
       |
       +-- EditLayer ( EditLayer.tjs )
       |    |
       |    +-- LinkEditLayer ( MessageLayer.tjs )
       |
       +-- CheckBoxLayer ( CheckBoxLayer.tjs )
            |
            +-- LinkCheckBoxLayer ( MessageLayer.tjs )

下边的注释就是在说trans之类对图层进行操作的时候有个children的参数可以决定是否对子层也进行操作之类之类有兴趣的人可以详细看看

进入kaglayer的class里,开头是定义了几个自己的参数,然后是构造函数

function KAGLayer(win, par)
{
   super.Layer(win, par);
}

就是说直接继承父类的这个函数

再往后是初始化函数,没什么好说的,除了继承父类的初始化外还把自己那个刚定义的moveObject初始化了一下

然后是

function setOptions(elm)
{
   // elm に従ってレイヤのオプションを設定
   visible = +elm.visible if elm.visible !== void;
   left = +elm.left if elm.left !== void;
   top = +elm.top if elm.top !== void;
   opacity = +elm.opacity if elm.opacity !== void;

   if(elm.modal !== void)
   {
    // this would not work well
    var modal = elm.modal;
    if(modal) setMode(), focus(); else removeMode();
   }

   absolute = +elm.index if elm.index !== void;
}

elm是个传入的字典,这个是kaglayer自定义的function,layer类里没有,在这里定义后以后kaglayer的子类就都会继承这个function

visible、left、top、opacity都是layer类就有的属性,setmode,focus、removemode都是layer类就有的方法,具体什么意思也请查kr2doc,当然其实看字面意思也就知道是干什么的了……

想起来我的面向受众是完全不知道这是啥的妹子们,于是我觉得大概要在这里说下这东西怎么用……

比如说你new了一个叫做aa的KAGlayer类的实体,你想要调用这个function,就可以写

aa.setOptions(%['visible' => true,'left' => 3,'top' => 100,'opacity' => 255,'modal' => true]);

这就是怎样使用一个类的function,参数到底要填啥你必须自己翻出来那个function里边用到了啥才行……

再往后是loadImages的function,layer类本身有loadimages这个函数了,kaglayer类重定义了它一下,在super前加了句key = adjustColorKey(key);就是把你loadimages里边的透明色参数依情况转换了下。

adjustColorKey的转换内容到底是啥就在下边

function adjustColorKey(key)
{
   // 文字列で与えられたカラーキーの変換
   if(key === void)
    key = clNone;
   else if(typeof key == "String")
   {
    if(key == "adapt")
     key = clAdapt; // adaptive color key
    else
    {
     if(key.length >= 7)
      key = +key;
     else
      key = +key + 0x3000000; // 0x3000000 = パレットインデックスによる指定
    }
   }
   return key;
}

不过实际上因为我一直都用png,所以在loadimages里边从来不写key这个参数啊哇卡卡卡

下边各种function没啥可讲的了,就像我上边所举的例子一样,看到到处都没定义就被调用的方法和属性一般都是layer类自带的,查kr2doc就行了,其他的肯定都是在类里有定义的东西。

值得一提的是有时候里边会出现Window.什么什么,Window是layer类的一个属性,就是new它的时候写入的那个从属窗口,一般来说都是kag,但是在有些弹出对话框之类的class里边情况不同,我之所以特意提一下这个就是因为以前遇到过用新模块换旧模块出现模块里调了window的什么,但是因为从属窗口改变了于是会报错的情况,通常遇到这种情况把window直接改成kag就行了……大家调的向来都是kag的东西……

还有一个值得一提的地方是beginMove(就是我们写kag时候的move那个效果),Layer类是没有beginMove的,这个是KAGlayer自己定义的,所以如果想要用这种move的效果,new的时候就不能new layer类而是kaglayer类或者kaglayer类的子类。

KAGlayer暂时就讲这些吧,其他部分好像也没啥可说的了……



TOP

访客数: 3169813
aa