「MYSTERY TOWER」制作日記

なかなかうまくいかないテキストエリア12月6日

さて、レイアウトで一番困ったのは、メッセージを表示するところです。始め
は、ゲーム中のメッセージとチャットと違う場所に出すように考えていました
けど、レイアウト的に一緒の方がきれいになるようなので、一緒にしました。
また、800X600ドットでは一緒にしないと画面が狭くなるという事も一緒にし
た原因です。
で、そのメッセージを書く所を作りたかったのですけど、これを作ろうと思っ
た時点では、作り方がわかっていませんでした。頭の中のイメージとしては、
Windows95のメモ帳が小さくなって入った感じで、メッセージ用に窓がでてる
感じでした。もちろん、横にスクロールバーがでていて、後から見直せるよう
にして置きたかったです。そして、ある程度メッセージがたまったら、消えて
くれるようにしたかったです。しかし、この時点では、できるかわからないの
で、最悪の場合ラベルをたくさん作って表示させてもいいかと思っていました。

で、色々と調べてみると、テキストエリアなるものがありました。これは、ま
さに、僕が求めていたものでした。これで、めんどくさそうなラベルを並べる
のは、しなくてよさそうでした。
で、テキストエリアを本やオンラインヘルプで調べてみると、appendTextとい
う便利な命令がありました。これは、現在のテキストに、指定されたテキスト
を追加するような事を書いています。そこで、僕はこれをやってみるのですが
うまくいかない。詳しく調べてみると、現在のテキストに漢字(2バイト文字)
があるとうまくいかない。変な位置にテキストが入り込む。おかしい、おかし
いと思って幾度もやってみるのだけど、うまくいかない。「このコンパイラ、
バグってるやねんか!」とプログラムがうまくいかない時の必殺の言葉を出し
て、あきらめた。そして、//をつけて注釈にして一応保存しておいて、新しい
方法で組み始める。
で、次の手段は、insertTextという命令を利用する事にした。この命令は、ap
pendTextと違って、好きな位置にテキストを挿入できるらしい。しかし、僕は
一番最後に入れたいので、一番最後のテキストの位置を知る必要があった。そ
れは、getSelectionEndという命令で調べて、一番最後のテキストに付け加え
た。これで、一応、うまく表示されるようになった。
次の要求は、ある程度テキストがたまると勝手に消えて欲しかった。僕は、メ
ッセージを書けと命令すると、後はすべてやってくれるクラスを書きたかった
ので、この処理をどうしても入れたかった。
これは、getSelectionEndで、最後の位置を調べて、これがある程度大きいと
始めの方をreplaceTextという命令で、空白と置き換えた。

以上で、テキストエリアの処理が終わった。ちなみに、上記の処理をJavaのソ
ースで書くと、

String message="test";
int row;//最後の位置
int del=1000;//消す量
int row_max=5000;//表示できるテキスト最大限
rows=comment.getSelectionEnd();
if (row<row_max){comment.insertText(message+'\n',rows);}//付け加えている。 
else{comment.replaceText("",0,del);
     rows=rows-del+1;
     comment.insertText(message+'\n',rows);
     }//消して、付け加えている。  

となります。ただ、この処理は、もっといいやり方があるかも知れません。
まあ、僕は、自分がのぞむ処理ができたので、これで満足なのですが。

前のページに戻ります