「Tonyu Tips」の編集履歴(バックアップ)一覧はこちら

Tonyu Tips」(2007/09/18 (火) 11:00:44) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*Tonyu Tips (この項目は半永久的に未完成です。補正、Tipの追加等をお願いします。) LastUpdate:H18.3.6 **目次 #contents ****○Tonyuの処理速度について [[こちら>Tonyu Tip_処理速度について]] ****○異なる型の演算 異なる型で算術演算を行った場合、以下の様な演算結果になる。 また、型の変換も行われる。 ex. 1+0.1 == 1.1(浮動小数点型) 1+"str" == "1str"(文字列型) 1.1+"str" == "1.1str"(文字列型) ****○NULL値の扱い [[こちら>null値との計算]] ****○値の型を調べる方法  整数型    : isInt(v)  浮動小数点型 : isFroat(v)  文字列型   : クラス"String"か否か ex.値の型を判別する関数 function AnyType(v1){ var type; if(v1 is String) type="文字列"; else if(isFloat(v1)) type="浮動小数点数"; else if(isInt(v1)) type="整数"; else type=-1; return type; } ****○使用可能な値とその範囲 整数     : 10桁(大体) 浮動小数点数 : 38桁(10の-38乗~10の38乗)(大体) 文字列    : 半角10万字以上(これ以降は未確認) ****○変数・関数に使える文字 a-z 0-9(但し、2文字目以降) _ (アンダーバー) 全角文字全て ****○使用可能なフォント(H18.3.6修正) 以下、使用可能なフォントの一覧。 "ごとコピペして使用すべし。 (訂正:インストール済みのフォントなら全て使用可能     但し、あまり特殊なフォントはプレイヤー側にない場合があるので     以下に示すフォントを使用するのが無難) "MS 明朝" "MS P明朝" "MS ゴシック" "MS Pゴシック" "HGゴシックE" "HGPゴシックE" "HGSゴシックE" "HGゴシックM" "HGPゴシックM" "HGSゴシックM" "HG行書体" "HGP行書体" "HGS行書体" "HG丸ゴシックM-PRO" "HG創英角ゴシックUB" "HGP創英角ゴシックUB" "HGS創英角ゴシックUB" "HG創英角ポップ体" (注、参照) "HGP創英角ポップ体"(注、参照) "HGS創英角ポップ体"(注、参照) "HG正楷書体-PRO" 注)Tonyuでは、プログラム中に半角カタカナがあると、エラーが起こる場合がある。 この為、 "HG創英角ポップ体"(+その下の2種)はそのまま入力しても、エラーとなる。 これを回避するため、以下の様にする。 texTmp="AポップA"; //この形ならエラーにならない strPop=texTmp.substring(1,6); //"ポップ"だけ取り出す setFont("HG創英角"+strPop+"体"); //フォントの設定 "HGP創英角ポップ体","HGS創英角ポップ体"についても同様。 尚、指定したフォントが存在しない場合、"MS Pゴシック"が使用される模様。 ****○使用可能なフォント表示例&応用文字 各フォントの文字表示例を示す。 書式は フォント名: 文字サイズ8 文字サイズ10 文字サイズ15 文字サイズ20 +[[基本>http://www4.atwiki.jp/gomatarou/?cmd=upload&act=open&pageid=30&file=TonyuFont_SizeList1.PNG]] +[[枠付文字>http://www4.atwiki.jp/gomatarou/?cmd=upload&act=open&pageid=30&file=TonyuFont_SizeList_Frame.PNG]] +[[影付文字>http://www4.atwiki.jp/gomatarou/?cmd=upload&act=open&pageid=30&file=TonyuFont_SizeList_shadow.PNG]] 途中で、文字が切れているのは仕様。 【枠付文字を書く関数】 //引数(順に)-x座標,y座標,テキスト,文字色,枠色,文字サイズ //ws-枠の太さ function sub_DT2(px,py,tex,cl1,cl2,ts){ var _x,_y,ws; ws=1; for(_x=-ws;_x<=ws;_x++)for(_y=-ws;_y<=ws;_y++){ if(_x==0&&_y==0)0; else $panel.drawText(px+_x,py+_y,tex,cl2,ts); }$panel.drawText(px,py,tex,cl1,ts); } 【影付文字を書く関数】 //引数(順に)-x座標,y座標,テキスト,文字色,枠色,文字サイズ //ws-影の長さ function sub_DT3(px,py,tex,cl1,cl2,ts){ var _x,_y,i,ws; ws=2; for(i=0;i<=ws;i++){ for(_x=-1;_x<=1;_x++)for(_y=-1;_y<=1;_y++){ if(_x==0&&_y==0)0; else $panel.drawText(px+_x+i,py+_y+i,tex,cl2,ts); } }$panel.drawText(px,py,tex,cl1,ts); } ”$panel.”は、適宜変更、省略すべし。 注)枠付文字・影付文字共に、通常文字に比べ描画に要する処理量が大きい 具体的には、 枠付文字-( (ws*2+1)*(ws*2+1) )倍、  (ws=2なら25倍) 影付文字-(ws*9)倍、  (ws=2なら18倍) ****○変数の初期値 変数 : null 配列 : null ハッシュテーブル : null ****○返す値 代入式   : 式の右辺 算術演算式 : 演算結果 比較演算式 : 0 or 1 論理演算式 : 0 or 1 関数    : returnで値を返した場合、その値           返していない場合、その関数のオブジェクト ****○1クラスの最大サイズ 32KB これを超える場合は、複数のクラスに分割して書く必要がある。 ****○真スタック領域の大きさ 110 ―スタック領域とは? . 関数呼び出しの際に使用される、変数を格納する領域。 . これを使い切ると、エラー"スタックオーバーフロー"が発生する。 関数を呼ぶたびに引数の数+ローカル変数の数+5消費 関数を抜けるとその関数を呼ぶときに消費した分回復 引数の数は、定義した関数の引数の数では無く、関数の呼び出し時に渡した引数の数である function A(a,b,c,d,e,f,g,h,i) {if(a)return A(a-1,b,c,d,e,f,g,h,i)+14;else return 6;} ↑A(7)なら6+14*7=104で大丈夫  A(8)だと6+14*8=118でエラー発生 やたら深度の深い関数呼び出し、引数・ローカル変数の多い関数は危険。 アクション系はともかく、RPGをテキトーに作ってるとよく引っかかる。 スタック領域のサイズが小さい為、再起を利用したプログラムは通常の方法では不可能。 自作のスタックを使用する、新しく生成したオブジェクトで再起の処理を行う等の必要がある。 スタック領域を設定する関数が欲しい 。 ****○画像の大きさ取得 横幅 : getPatWidth(p) 縦幅 : getPatHeight(p) (p:画像ファイル名) ****○クラス名の取得 obj.getClassName() if (t is ○) は if (t.getClassName()=="○") と等価 ex. 自分と同じクラスを探す for(t in $Chars){ if(t.getClassName()==getClassName()) print("一致:"+t.getClassName()); } ****○クラスの判別(t is ○) ○に入り得るもの、  -自分が作成したクラス  -その他、標準クラス   SpriteChar,DxChar,TextChar,,,   ,Array,Matrix,Hashtable,   ,Object,PlainChar,String,    etc....(と言うか、クラス全部.) 親クラスを指定すると、その子クラスも指定したことになる。 ex.インスタンスの判別 a=new Array(); print("配列:"+(a is Array)); text="str"; print("文字列:"+(text is String)); obj=new SpriteChar(); print("スプライト:"+(obj is SpriteChar)); print("PlainChar:"+(obj is PlainChar)); //すべて"真"である. ****○文字列をグローバル変数に変換 ex.変数var2にグローバル変数var1を代入する。 var2=getGlobal("$var1"); ****○基本オブジェクトの引数(appearするときの参考に) new SpriteChar(x,y,p,f) new DxChar(x,y,p,f,scale,angle,alpha) new TextChar(x,y,text,color,size) new PanelChar(x,y,width,height) new SecretChar()  (引数無し) ****○ローカル変数とオブジェクト変数使い分け  オブジェクト変数にはthisを付け、  ローカル変数には付けない事で使い分けが可能。 ex. var1;           //オブジェクト変数 function FUNC(){ var var1;       //ローカル変数 var1=5;       //ローカル変数に5を代入 this.var1=10;   //オブジェクト変数に10を代入 } ****○関数で引数の初期値を設定する方法  指定されなかった引数には、Nullが入っている。  初期値を指定するには、値がNullのときに値を入れればいいのだが、  値を指定していない引数には、値を代入することができない。  そこで、ローカル変数を一つ使用し、  その変数に、引数がNullのときは特定の値を入れ、  そうでないときは引数を入れるようにすればよい。 ex.関数、引数がある場合は引数を返し、ない場合は10を返す。 function FUNC(_var1){ var var1; if(_var1==null) var1=10; else var1=_var1; return var1; } ****○関数の戻り値で2つ以上の値を得る方法  配列を引数として与え、それに戻したい値を入れる。 ex.引数として与えた配列に10,20を入れる a=new array(); FUNC(a); print(a.get(0)); //10が表示される function FUNC(_a){ _a.add(10); _a.add(20); } ****○共用関数の作成方法 方法1.使用したい関数の定義したクラスを全クラスの親クラスにする。 方法2.使用したい関数を持つクラスのオブジェクトをグローバル変数に入れ、       これを通して呼び出す。(ex.$g.FUNC();) 方法3.Kernel/PlainCharファイルに使用したい関数を記述する。(キケン、超上級者向け。実行ファイルでない限り他人の環境ではエラーが出ます。基本的にはやめておきましょう) ****○Panelの意味、使用法   Panelはボードの機能、PanelCharはそのボードを毎フレーム画面上に表示する機能 (と様々な便宜)を司る。 つまり、自前で毎フレーム、ボードを表示すれば(かつ必要な便宜を自分で行えれば) PanelCharを使用する必要はなくなる。 (ボードの表示には、stretchDraw(x,y,w,h)命令を使う) ****○Panelの有効利用法  1.Panelを軽く使用する   PanelCharは使わない。   Panelに表示したいものを描き、これをcopyRect()を使用して$Panelにコピーする。   PanelCharは重いと言う話をよく聞くが、この方法ならあまり重くないはず。   但し、パネルの移動、回転したパネルの表示等は出来ないし、 $Panelのコピー先にある画像も上書きしてしまう。   また、表示の更新も自前でしなければならない。それが嫌なら大人しくPanelCharを使うべし。  2.?? ****○オブジェクトの表示位置を画面上に固定 オブジェクトに以下の関数を記述すると、 そのオブジェクトをスクロールの影響から無視する。 function draw() { drawScreenXY(1); super.draw(); drawScreenXY(0); } ****○変数、ポインタについて   変数には、数値や文字列以外(Array,オブジェクト等)は全て、 "それ自体"ではなく"それを示すポインタ"が入っている。 その為、この変数を代入した場合、代入元と代入先の示すものは同一のものとなる。 (同じ内容という意味ではなく、同じものを示すということ) ex.Arrayの場合 a=new array(); b=a; b.add(10); print(a.get(0)); //10が表示される これは、Arrayの場合だが、オブジェクト("new ○" の形で生成したもの全て)でも同様である。 (また、これは代入だけではなく、関数の引数として渡した場合にも同じことが言える) これを利用して、配列にオブジェクトを格納し管理、なんてことも可能。 ****○クラスを作成せずにオブジェクト作成する   オブジェクトが必要だが、処理を記述するわけではない。(他のオブジェクトから操作すればいい) その、処理をしないクラスをわざわざ作るのは煩わしい。 こんな状況は結構ある。 実はクラスを作らなくても、オブジェクトは生成可能である。 基本オブジェクトを直に生成すればいい。 ex.obj=appear(new SpriteChar(x,y,p)); obj.wait(); //wait()しないとすぐに終了してしまう。 SpritCharだけでなく、DxChar,PanelCharなども可能。 このオブジェクトを移動させたい場合は、obj.x+=10;等とすればいい。 &counter()
*Tonyu Tips (この項目は半永久的に未完成です。補正、Tipの追加等をお願いします。) LastUpdate:H18.3.6 **目次 #contents ****○Tonyuの処理速度について [[こちら>Tonyu Tip_処理速度について]] ****○異なる型の演算 異なる型で算術演算を行った場合、以下の様な演算結果になる。 また、型の変換も行われる。 ex. 1+0.1 == 1.1(浮動小数点型) 1+"str" == "1str"(文字列型) 1.1+"str" == "1.1str"(文字列型) ****○NULL値の扱い [[こちら>null値との計算]] ****○値の型を調べる方法  整数型    : isInt(v)  浮動小数点型 : isFroat(v)  文字列型   : クラス"String"か否か ex.値の型を判別する関数 function AnyType(v1){ var type; if(v1 is String) type="文字列"; else if(isFloat(v1)) type="浮動小数点数"; else if(isInt(v1)) type="整数"; else type=-1; return type; } ****○使用可能な値とその範囲 整数     : 10桁(大体) 浮動小数点数 : 38桁(10の-38乗~10の38乗)(大体) 文字列    : 半角10万字以上(これ以降は未確認) ****○変数・関数に使える文字 a-z 0-9(但し、2文字目以降) _ (アンダーバー) 全角文字全て ****○使用可能なフォント(H18.3.6修正) 以下、使用可能なフォントの一覧。 "ごとコピペして使用すべし。 (訂正:インストール済みのフォントなら全て使用可能     但し、あまり特殊なフォントはプレイヤー側にない場合があるので     以下に示すフォントを使用するのが無難) "MS 明朝" "MS P明朝" "MS ゴシック" "MS Pゴシック" "HGゴシックE" "HGPゴシックE" "HGSゴシックE" "HGゴシックM" "HGPゴシックM" "HGSゴシックM" "HG行書体" "HGP行書体" "HGS行書体" "HG丸ゴシックM-PRO" "HG創英角ゴシックUB" "HGP創英角ゴシックUB" "HGS創英角ゴシックUB" "HG創英角ポップ体" (注、参照) "HGP創英角ポップ体"(注、参照) "HGS創英角ポップ体"(注、参照) "HG正楷書体-PRO" 注)Tonyuでは、プログラム中に半角カタカナがあると、エラーが起こる場合がある。 この為、 "HG創英角ポップ体"(+その下の2種)はそのまま入力しても、エラーとなる。 これを回避するため、以下の様にする。 texTmp="AポップA"; //この形ならエラーにならない strPop=texTmp.substring(1,6); //"ポップ"だけ取り出す setFont("HG創英角"+strPop+"体"); //フォントの設定 "HGP創英角ポップ体","HGS創英角ポップ体"についても同様。 尚、指定したフォントが存在しない場合、"MS Pゴシック"が使用される模様。 ****○使用可能なフォント表示例&応用文字 各フォントの文字表示例を示す。 書式は フォント名: 文字サイズ8 文字サイズ10 文字サイズ15 文字サイズ20 +[[基本>http://www4.atwiki.jp/gomatarou/?cmd=upload&act=open&pageid=30&file=TonyuFont_SizeList1.PNG]] +[[枠付文字>http://www4.atwiki.jp/gomatarou/?cmd=upload&act=open&pageid=30&file=TonyuFont_SizeList_Frame.PNG]] +[[影付文字>http://www4.atwiki.jp/gomatarou/?cmd=upload&act=open&pageid=30&file=TonyuFont_SizeList_shadow.PNG]] 途中で、文字が切れているのは仕様。 【枠付文字を書く関数】 //引数(順に)-x座標,y座標,テキスト,文字色,枠色,文字サイズ //ws-枠の太さ function sub_DT2(px,py,tex,cl1,cl2,ts){ var _x,_y,ws; ws=1; for(_x=-ws;_x<=ws;_x++)for(_y=-ws;_y<=ws;_y++){ if(_x==0&&_y==0)0; else $panel.drawText(px+_x,py+_y,tex,cl2,ts); }$panel.drawText(px,py,tex,cl1,ts); } 【影付文字を書く関数】 //引数(順に)-x座標,y座標,テキスト,文字色,枠色,文字サイズ //ws-影の長さ function sub_DT3(px,py,tex,cl1,cl2,ts){ var _x,_y,i,ws; ws=2; for(i=0;i<=ws;i++){ for(_x=-1;_x<=1;_x++)for(_y=-1;_y<=1;_y++){ if(_x==0&&_y==0)0; else $panel.drawText(px+_x+i,py+_y+i,tex,cl2,ts); } }$panel.drawText(px,py,tex,cl1,ts); } ”$panel.”は、適宜変更、省略すべし。 注)枠付文字・影付文字共に、通常文字に比べ描画に要する処理量が大きい 具体的には、 枠付文字-( (ws*2+1)*(ws*2+1) )倍、  (ws=2なら25倍) 影付文字-(ws*9)倍、  (ws=2なら18倍) ****○変数の初期値 変数 : null 配列 : null ハッシュテーブル : null ****○返す値 代入式   : 式の右辺 算術演算式 : 演算結果 比較演算式 : 0 or 1 論理演算式 : 0 or 1 関数    : returnで値を返した場合、その値           返していない場合、その関数のオブジェクト ****○1クラスの最大サイズ 32KB これを超える場合は、複数のクラスに分割して書く必要がある。 ****○真スタック領域の大きさ 110 ―スタック領域とは? . 関数呼び出しの際に使用される、変数を格納する領域。 . これを使い切ると、エラー"スタックオーバーフロー"が発生する。 関数を呼ぶたびに引数の数+ローカル変数の数+5消費 関数を抜けるとその関数を呼ぶときに消費した分回復 引数の数は、定義した関数の引数の数では無く、関数の呼び出し時に渡した引数の数である function A(a,b,c,d,e,f,g,h,i) {if(a)return A(a-1,b,c,d,e,f,g,h,i)+14;else return 6;} ↑A(7)なら6+14*7=104で大丈夫  A(8)だと6+14*8=118でエラー発生 やたら深度の深い関数呼び出し、引数・ローカル変数の多い関数は危険。 アクション系はともかく、RPGをテキトーに作ってるとよく引っかかる。 スタック領域のサイズが小さい為、再起を利用したプログラムは通常の方法では不可能。 自作のスタックを使用する、新しく生成したオブジェクトで再起の処理を行う等の必要がある。 スタック領域を設定する関数が欲しい 。 (07年9月18日追記:現在のバージョンではスタック領域を設定する関数が実装済み) ****○画像の大きさ取得 横幅 : getPatWidth(p) 縦幅 : getPatHeight(p) (p:画像ファイル名) ****○クラス名の取得 obj.getClassName() if (t is ○) は if (t.getClassName()=="○") と等価 ex. 自分と同じクラスを探す for(t in $Chars){ if(t.getClassName()==getClassName()) print("一致:"+t.getClassName()); } ****○クラスの判別(t is ○) ○に入り得るもの、  -自分が作成したクラス  -その他、標準クラス   SpriteChar,DxChar,TextChar,,,   ,Array,Matrix,Hashtable,   ,Object,PlainChar,String,    etc....(と言うか、クラス全部.) 親クラスを指定すると、その子クラスも指定したことになる。 ex.インスタンスの判別 a=new Array(); print("配列:"+(a is Array)); text="str"; print("文字列:"+(text is String)); obj=new SpriteChar(); print("スプライト:"+(obj is SpriteChar)); print("PlainChar:"+(obj is PlainChar)); //すべて"真"である. ****○文字列をグローバル変数に変換 ex.変数var2にグローバル変数var1を代入する。 var2=getGlobal("$var1"); ****○基本オブジェクトの引数(appearするときの参考に) new SpriteChar(x,y,p,f) new DxChar(x,y,p,f,scale,angle,alpha) new TextChar(x,y,text,color,size) new PanelChar(x,y,width,height) new SecretChar()  (引数無し) ****○ローカル変数とオブジェクト変数使い分け  オブジェクト変数にはthisを付け、  ローカル変数には付けない事で使い分けが可能。 ex. var1;           //オブジェクト変数 function FUNC(){ var var1;       //ローカル変数 var1=5;       //ローカル変数に5を代入 this.var1=10;   //オブジェクト変数に10を代入 } ****○関数で引数の初期値を設定する方法  指定されなかった引数には、Nullが入っている。  初期値を指定するには、値がNullのときに値を入れればいいのだが、  値を指定していない引数には、値を代入することができない。  そこで、ローカル変数を一つ使用し、  その変数に、引数がNullのときは特定の値を入れ、  そうでないときは引数を入れるようにすればよい。 ex.関数、引数がある場合は引数を返し、ない場合は10を返す。 function FUNC(_var1){ var var1; if(_var1==null) var1=10; else var1=_var1; return var1; } ****○関数の戻り値で2つ以上の値を得る方法  配列を引数として与え、それに戻したい値を入れる。 ex.引数として与えた配列に10,20を入れる a=new array(); FUNC(a); print(a.get(0)); //10が表示される function FUNC(_a){ _a.add(10); _a.add(20); } ****○共用関数の作成方法 方法1.使用したい関数の定義したクラスを全クラスの親クラスにする。 方法2.使用したい関数を持つクラスのオブジェクトをグローバル変数に入れ、       これを通して呼び出す。(ex.$g.FUNC();) 方法3.Kernel/PlainCharファイルに使用したい関数を記述する。(キケン、超上級者向け。実行ファイルでない限り他人の環境ではエラーが出ます。基本的にはやめておきましょう) ****○Panelの意味、使用法   Panelはボードの機能、PanelCharはそのボードを毎フレーム画面上に表示する機能 (と様々な便宜)を司る。 つまり、自前で毎フレーム、ボードを表示すれば(かつ必要な便宜を自分で行えれば) PanelCharを使用する必要はなくなる。 (ボードの表示には、stretchDraw(x,y,w,h)命令を使う) ****○Panelの有効利用法  1.Panelを軽く使用する   PanelCharは使わない。   Panelに表示したいものを描き、これをcopyRect()を使用して$Panelにコピーする。   PanelCharは重いと言う話をよく聞くが、この方法ならあまり重くないはず。   但し、パネルの移動、回転したパネルの表示等は出来ないし、 $Panelのコピー先にある画像も上書きしてしまう。   また、表示の更新も自前でしなければならない。それが嫌なら大人しくPanelCharを使うべし。  2.?? ****○オブジェクトの表示位置を画面上に固定 オブジェクトに以下の関数を記述すると、 そのオブジェクトをスクロールの影響から無視する。 function draw() { drawScreenXY(1); super.draw(); drawScreenXY(0); } ****○変数、ポインタについて   変数には、数値や文字列以外(Array,オブジェクト等)は全て、 "それ自体"ではなく"それを示すポインタ"が入っている。 その為、この変数を代入した場合、代入元と代入先の示すものは同一のものとなる。 (同じ内容という意味ではなく、同じものを示すということ) ex.Arrayの場合 a=new array(); b=a; b.add(10); print(a.get(0)); //10が表示される これは、Arrayの場合だが、オブジェクト("new ○" の形で生成したもの全て)でも同様である。 (また、これは代入だけではなく、関数の引数として渡した場合にも同じことが言える) これを利用して、配列にオブジェクトを格納し管理、なんてことも可能。 ****○クラスを作成せずにオブジェクト作成する   オブジェクトが必要だが、処理を記述するわけではない。(他のオブジェクトから操作すればいい) その、処理をしないクラスをわざわざ作るのは煩わしい。 こんな状況は結構ある。 実はクラスを作らなくても、オブジェクトは生成可能である。 基本オブジェクトを直に生成すればいい。 ex.obj=appear(new SpriteChar(x,y,p)); obj.wait(); //wait()しないとすぐに終了してしまう。 SpritCharだけでなく、DxChar,PanelCharなども可能。 このオブジェクトを移動させたい場合は、obj.x+=10;等とすればいい。 &counter()

表示オプション

横に並べて表示:
変化行の前後のみ表示:
記事メニュー
目安箱バナー