ただし元になるParaFla!のプロジェクトファイルはeucampiaさんのテンプレートを使用しているので、問題があればすぐに公開を停止します。
元のファイルの「始めにお読み下さい」の部分を残してあります。
上記の通りなので現象と仕組みを説明します。
■これを使う意義
00:00:00ではなく#0:#0:#0という形式にしたい場合
(01を1と表示させ、更に上詰または左詰で表示させたい場合)
00.00.00(thu)ではなく0年0月0日 木などと表示したい場合
縦書き(漢数字など)表示させたい場合
(例:水墨画風鯨待ち受け)
■現象
・SWF4(携帯用)のプロジェクト
・埋め込みのフォントを使用(使用する「2バイト文字」は登録済み)
・ダイナミックテキスト(変数名使用)
・ActionScriptで文字列変数に当該登録文字を代入するとエラーになる
例)
「〇一二三四五六七八九十時分秒」というダイナミックテキストを登録
str = "十"; などとするとエラー。時・分・秒・年・月・日でも同様。
〇〜九ならエラーは発生しません。
■対策
上記eucampiaさん作テンプレートで画像を使用する時計・日付を使用します。
※ただし、24時間制ではなく、1時〜12時制にしてあります。
0時→12時・13時→1時
・流れ(詳細は後述)
1.各文字を一文字ずつテキストとして登録
2.時・分・秒(もしくは年・月・日)のスプライトを作成
3.10の位のスプライトを作成
4.取得した時刻の時の数値を変更
5.時刻(もしくは日付)のスプライトを設定・ActionScriptを変更
右の画像のように(クリックで拡大します)1文字ずつ登録します。
フォントは好きなものを選択してください。
鯨の待ち受けでは時計には「〇」という文字は使用していませんが、年月日の西暦表示で「〇」を使用するため、共通部品として登録してあります。
2について
単純に(0,0)の位置に置くだけです。
・10の位が0の場合はその桁を表示しない
→0の時は画像を消去する処理に書き換え
・漢数字の場合
10→10の位は十=1文字です。
20(以上)→10の位は二十=2文字です。
よって、スプライトの大きさ(プロパティで設定)2文字分の大きさにしておいてください。
(縦書きなら高さを倍、横書きなら幅を倍に)
4について
ルートにある「取得情報と変数名」の以下の部分に2行追加します。
nowHou=FSCommand2("GetTimeHours");
if(nowHou>12)nowHou -= 12; // 1時〜12時制の場合
if(nowHou==0)nowHou = 12; // 0時を12時にする場合
・2で作成した時・分・秒(もしくは年・月・日)のスプライトを配置
→座標値はコードで変更するのでどこでもいいです。
・各数字スプライトのうち、10の位にあたるH1・M1・S1のプロパティを開き、IDを「10の位」のスプライトへ変更する。
・アクションスクリプトの冒頭に以下を追加する
※ActionScriptを全然知らないので、変数の扱い等々よくわかんないんですが動いてるので良しとしています。
条件分岐も適当で付け焼き刃のコードなので変だったら書き換えてください。
※横書きならxyの指定を逆転させてください。
※szは文字の大きさによって変更してください。
// 変数の初期化
cnt = 0; // 表示座標のカウンタ
flag = 0; // 非表示フラグ
sz = 17; // 1文字分の高さ(もしくは幅)
// 時
// 表示初期化
H1.alpha = 100; // 10の位を表示
H2.alpha = 100; // 1の位を表示
H1.x = 0;
H1.y = cnt;
H2.x = 0;
H2.y = cnt + sz;
if(substr(/:nowHou, 1, 1)==="0"){
H1.alpha = 0;
H2.y = cnt;
cnt += sz;
} else if(substr(/:nowHou, 2, 1)==="0"){
H2.alpha = 0;
cnt += sz;
} else {
cnt += sz*2;
}
txtH.y = cnt;
cnt += sz; // 「時」1文字分加算
// 分
// 表示初期化
M1.alpha = 100; // 10の位を表示
M2.alpha = 100; // 1の位を表示
txtM.alpha = 100; // 「分」を表示
M1.y = cnt;
M2.x = 0;
txtM.x = 0;
if(substr(/:nowMin, 1, 1)==="0" && substr(/:nowMin, 2, 1)==="0"){
M1.alpha = 0;
M2.alpha = 0;
txtM.alpha = 0;
flag = 1;
} else if(substr(/:nowMin, 1, 1)==="0"){
M1.alpha = 0;
M2.y = cnt;
cnt += sz;
} else if(/:nowMin === "10"){
cnt += sz;
M2.alpha = 0;
} else if(substr(/:nowMin, 1, 1)==="1"){
cnt += sz;
M2.y = cnt;
cnt += sz;
} else if(substr(/:nowMin, 2, 1)==="0"){
M2.alpha = 0;
cnt += sz*2;
} else {
cnt += sz*2;
M2.y = cnt;
cnt += sz;
}
if(flag != 1){
txtM.y = cnt;
cnt += sz;
}
flag = 0; // フラグリセット
// 秒
// 表示初期化
S1.alpha = 100; // 10の位を表示
S2.alpha = 100; // 1の位を表示
txtS.alpha = 100; // 「秒」を表示
S1.y = cnt;
S2.x = 0;
txtS.x = 0;
if(/:nowSec==="00"){
S1.alpha = 0;
S2.alpha = 0;
txtS.alpha = 0;
flag = 1;
} else if(substr(/:nowSec, 1, 1)==="0"){
S1.alpha = 0;
S2.y = cnt;
cnt += sz;
} else if(/:nowSec === "10"){
S2.alpha = 0;
cnt += sz;
} else if(substr(/:nowSec, 1, 1)==="1"){
cnt += sz;
S2.y = cnt;
cnt += sz;
} else if(substr(/:nowSec, 2, 1)==="0"){
S2.alpha = 0;
cnt += sz*2;
} else {
cnt += sz*2;
S2.y = cnt;
cnt += sz;
}
if(flag != 1){
txtS.y = cnt;
}
上記が全部入った時刻・日時の部分だけを入れたParaFla!プロジェクトファイルです。
kanji_digital.zip
※ウィルスチェックはしてあります。



表示的には27分=『二七』でも全然OKですが,『二十七』にしなければと言うところにプログラマ魂を感じます。
・・・見習わなければ
COBOL見ていたときに,桁定義や出力位置を間違えて,プログラムは通るのに結果が全然ダメ〜 ってのはよく経験しました。
悩んで何度も見返した結果,
PIC X(7) → PIC X(8) で全て解決なんて事も・・・
『全く,このくらい融通きかせろよ! つかえね〜な〜』と,モニタに向かってぼやいていました・・・
なんか下らない記事にコメントいただいてありがとうございます!
横書きだと二七でもいいんですが、11分などの時に縦書きだと二に見えるというか、見づらいのでどうしてもこうしたかったんです。
配列の指定とかシンタックスって見落としがちなんですよね。
似たような変数名をつけたときとかもコンパイルできても結果が変ということになったりして、悩みますよね。
なんかものすごく心当たりが・・・
>融通を利かせてくれるCPU
喉から手が出るほど欲しい!(;´∀`)