− 「いつも通り」 −

2003年 どっちを向いても未来〜
 5月  4月  3月  2月  1月
2002年
 12月  11月  10月  9月  8月  7月  6月  5月  4月  3月  2月  1月
2001年
 12月  11月  10月  9月  8月  7月  6月  5月  4月  3月  2月  1月
2000年
 12月  11月  10月  9月  8月  7月  6月  5月  4月  3月  2月  1月
1999年
 12月  11月  10月  9月  8月

◆ TOP INDEX へもどる


■  4月30日 (水)

◆ 「たてがみ」

 昨日、床屋へ行ってさっぱりとする。

 実は私、背中まで毛が生えているくらい毛深い方なのだが、
 床屋の兄さんが襟首の毛をどこまで剃ろうか悩んでいた。

  X-MEN のウルヴァリンではないので、ふつーに剃っていただければよろしかろうと、思うのであるが。


◆ 「言葉」

 「人の考えたことがわからないのは、そこに『言葉』がないからだ。」

 とゆー台詞に感動する。
 いや、「ぼのぼの」の最新22巻でアライグマくんの言った言葉なんですが。


◆ 「製作備忘録」

 いつ完成するか判らないモノを製作中。
 正直に話せば、ファンタジーな軽い戦略ゲームであるが。

 当初考えていたキャラクターのパラメーターは、旧システムソフトの「天下統一」のごとく、「 武力 / 知力 / 政治力 」とシンプルに考えていたのである。
 が、これでは『同一種族(民族)を前提とした軍隊』としか考えられず、『ファンタジー世界における、多種多様な種族やはぐれモンスターの混在』を表現できない。
 例えば、「森に巣くう、どの勢力にも属していないゴブリンの集団」、を表現するには、「例外処理」が必要になるのである。

 ここで、有名なファンタジー・ゲーム「 Master of Magic 」のデータを参考にいたしてみる。
 パラメータには「 攻撃力 / 防御力 / 機動力 」
 それに関連する「種族」「攻撃方法/移動方法」をデータ化。
 この方法であると整理されてピッタリとハマるのだが、いかにせん関連するパラメータの量が多くなってしまうのである。

 う゛ーーー。
 と、何とか少ないパラメータでファンタジー世界を表せないか、悩む。

 ふと。 昔「深い」と思っていた、「 Ultima 」( III 〜 IV )キャラの主なパラメータが、「種族( Class )」「 STRength / INTeger / DEXterity 」くらいだったと思い出す。
 今考えているシステムに、これをチョチョッとアレンジして追加すると、シンプルでいてピッタリとハマることが判明。

 ちとデータを書き直さなくてはならないが、コレを採用。
 ……多分。



■  4月28日 (月)

◆ 「ばからっく」

 バート・バカラックのベスト・アルバムが発売されているのを発見。
   『スウィート・メロディーズ ( Sweet Melodies ) 』
    /ワーナー・ミュージック・ジャパン

 バート・バカラックの名前を知らなくても、映画やCMなどで氏の曲は知っている、とゆー方は沢山いると推測する。
 「雨にぬれても」「ニューヨーク・シティ・セレナーデ」が原曲のまま(ほとんどの曲が原曲のまま)一緒に入っているとゆーことなので、即購入。

 拝聴するとさすがに古い音の曲もあるが、満足である。
 中にはやはり、曲は知っていても曲名を知らなかったものが。
 (「恋の面影」「世界は愛を求めている」「素晴らしき恋人たち」など)
 感動。


◆ 「 Delphi 備忘録」

 今まで、マジメに Delphi アプリを作ったことが無かったので、ポチポチといじっていると、妙なトコロで詰まってしまうのである。
 色々と試したり、ソースを見て、一つずつ理解しようと努めているのであるが、私の場合「解決すると忘れてしまう」とゆー悪い癖があるので、備忘録がわりにここへ記しておく。

 今回は、 TBitmap オブジェクトについて。
 便利な TBitmap も、使うには色々とコツが必要なようである。
 例えば、あるグラフィック Image を退避させるのに使うとき。

var
  TmpBitmap : TBitmap;

begin
  // ビットマップ・テンポラリの確保
  TmpBitmap := TBitmap.Create;
  TmpBitmap.Width := 16;
  TmpBitmap.Height := 16;

  // エリア・グラフィックの退避
  TmpBitmap.Canvas.CopyRect(Rect( 0 , 0 , 16 , 16 ),
                 MapDisp.Canvas,
                 Rect( xp , yp , xp+16 , yp+16 ));
end;

  CopyRect メソッドで退避(矩形コピー)する前に、 TBitmap オブジェクトを確保し、 Width プロパティと Height プロパティを設定。 (このソースの場合 16x16 dot )
 今回、 Create で確保したは良いが、 Width と Height プロパティの設定とゆーものを忘れた為、 1x1 dot が引き延ばされてコピーされるばかりで頭を抱えた。(笑)

 このアプリでは、 Image コントロールに表示された「エリア・マップ」をクリックすると、クリックしたエリアに「カーソル・ポインタ(矢印)」が表示されるプロシージャに使用している。

///// マップのカレントエリアを選択
procedure TMainForm.PointArea(ar: Integer);
var
  ax , ay : Integer;
  Tmp0Bitmap : TBitmap;
  frRect , toRect : TRect;
begin

    Tmp0Bitmap := TBitmap.Create;
    Tmp0Bitmap.Width := 16;
    Tmp0Bitmap.Height := 16;
    ax:=area[ar].xp;  ay:=area[ar].yp;

    // エリア・グラフィックの退避
    toRect := Rect( 0,0,16,16 );
    frRect := Rect( ax-8,ay-16,ax-8+16,ay-16+16 );
    Tmp0Bitmap.Canvas.CopyRect(toRect,MapDisp.Canvas,frRect);

    // カーソルポインタの消去(退避したエリア・グラフィックの上書き)
    toRect := Rect( area[CrArea].xp-8,area[CrArea].yp-16,
          area[CrArea].xp-8+16,area[CrArea].yp-16+16 );
    frRect := Rect( 0,0,16,16 );
    MapDisp.Canvas.CopyRect(toRect,TmpBitmap.Canvas,frRect);

    // エリアにカーソル・ポインタ(矢印)のパターンを描く
    BitBlt(MapDisp.Canvas.Handle,ax-8,ay-16,
      16,16,MapChipImg.Canvas.Handle,0,160,SRCERASE);
    BitBlt(MapDisp.Canvas.Handle,ax-8,ay-16,
      16,16,MapChipImg.Canvas.Handle,16,160,SRCINVERT);

    // マップ・グラフィック再表示( Reflesh より Invalidate )
    MapDisp.Invalidate;

    // 退避したエリアグラフィックを確保(次回にカーソルを消すため)
    TmpBitmap.Assign(Tmp0Bitmap);

    // ビットマップ・テンポラリ解放
    Tmp0Bitmap.Free;

  // カレントエリアを変更
  CrArea := ar;

end;

 ちょっと(かなり)ムダなことをしているが、

 「一時 Bitmap テンポラリを確保」→
 「これからカーソルを表示するエリアの一部を、一時 Bitmap テンポラリに退避」→
 「今までカーソルを表示していた所へ、退避用 Bitmap テンポラリから矩形コピー (カーソルを消す)」→
 「カーソルを描く (何故か BitBlt による)」→
 「マップを表示している Image コントロールを再表示 (全体を描き換える Reflesh ではなく Invalidate を使っている)」→
 「一時 Bitmap テンポラリから、退避用 Bitmap テンポラリへデータを移動 ( Assign メソッドを使用する)」→
 「一時 Bitmap テンポラリを解放」

 とゆー具合に、カーソルを消すのに TBitmap オブジェクトを使用している。

 ここの場合、 TBitmap から TBitmap へデータを移動するとき、「 Assign メソッド」を使用するということに気付くのが遅れたのである。
 あと、 Rect (矩形)の指定で 16x16 dot の指定をする時に、 (0,0,15,15) ではなく、 (0,0,16,16) とゆートコロ。(笑)

 このソースは、 TBitmap 使用の練習を兼ねている。
 良い子は、作業用の Image コントロール(不可視)に描き込んで、終わったら丸ごと表示用 Image コントロール(可視)に転送するが、よろしいかもしれぬ。

///// このフォームを閉じるとき
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // TBitmap 解放
  TmpBitmap.Free;
end;

 あとは、アプリを終わらせる時(もしくはフォームを閉じる時)、忘れずにオブジェクトを解放である。
 めでたしめでたし。


◆ 「 Delphi 備忘録 2」

 先ほどのように1つの Image コントロールをいじくって、ちまちまと色々なものを表示していると、ちらつきがひどくなることがある。

// フォーム全体を描画する際の明滅を防ぐ。
procedure TMainForm.WMEraseBkgnd(var m : TWMEraseBkgnd);
begin
  m.Result := LRESULT(False);
end;

 とのプロシージャを追加すると、 WMEraseBkgnd とゆー Windows API を呼び出して TMainForm の頻繁な再描画を避けてくれる。
 ……ハズなのだが、今回の Image コントロールのちらつきは抑えられず。
 しょーがないので、 FormCreate の一節に、

  // このフォーム描画時のちらつきを無くす
  MainForm.DoubleBuffered := True;

 の一文を追加して、フォームの DoubleBuffered プロパティを True に。
 メモリをガバチョと食う、オススメできないとりあえずの手段なのだが、まぁ完成を第一に考えたアプリなので、よしとする。

 実際、効果てきめんで、クリックするたびに明滅していた Image コントロールは静かになったのである。
 ズバッと解決。
 ……出来ていない面はある。


◆ 「同じようなことを」

 つらつらと過去の日記を読んでいたら、
  昨年この月にも Delphi をいじっていたことを発見する。
 うむむ。 この時期はプログラムしたくなる季節なのであらうか。
 さらにまた、今年と昨年も同じソースをいじっているのが、ちと泣けるのである。

 前回いじっていた時は、 ListBox コントロールにテキストとグラフィックを混在させるのが面白くなってしまい色々と試していたら、別の関係で忙しくなってしまいプログラミングを中断。
 ……して、そのまま半分忘れさっていたのである。
 とほほ。



■  4月23日 (水)

◆ 「思考停滞空間」

 ……………………はッ!!

 長い間、思考が停止していたようである。
 安くてどーもすいません。 とヘコヘコしつつ、久しぶりに更新である。


◆ 「備忘録」

 Delphi には、 implementation 部に書いたメソッドをクラスの宣言を自動的に追加したり、逆にクラスを宣言すると implementation 部にメソッドのスケルトンを自動的に追加する、「コード補完機能」がある。
 例えば、

public
        procedure ReadData(FileName: String);
 というクラス定義をして、「 Ctrl + Shift + C 」キーを押すと、 implementation 部に、

procedure TForm1.ReadData(FileName: String);
begin
end;
 というコードを生成する。 逆もまた可能である。

 ………なることを、先日、初めて知る。
 今まで、延々と宣言部/実行部の両方にコードをタイプしていたわい。
 くっそー。


◆ 「エイプリル・フールだったね」

 やっとこさトップページから「4/2のお知らせ」を撤去。
 とゆーわけで、今さらながら、エイプリルフール・ネタについてである。
 (ちなみに、4/1のトップページは ◆ こちら →

 今年は、ビッグ・マウスくんを画面中に走り回らせたり、英語トップページを追加してみたりしたが、ちとネタが空振りであった。
 これは来年へ向けて、反省材料とするべきであろう。
 まだやるんかい、というツッコミはあえて聞かないフリをさせていただく。

 さて、あの元気なビッグ・マウスくんについて2〜3の事柄。

 えー。 久しぶりにドット絵打ったら、肩こった。
 4方向のパターンなら回転させればいーだろう、と思っていたが、光源を左上に想定してしまった為、結局4つのパターンを描くことになった故である。
 しかも、32×32ドットではあまりにチマチマしすぎだったので48×48ドットに描き直し。
 プチプチ。

 さらにあの懐かしい旧MSマウスの形であるが、あまりいーかげんに描くのもナニだと思い、 Google イメージ検索で写真を探し出す。
 おー、よく見ると、記憶にあるよりスマートだったのね。
 と、感心しつつも、この微妙な曲線は16色じゃ出せぬので、適当にデフォルメである。
(そう、表示スピードを稼ぐ為に16色でドット打ちしたのである。 色をケチッていたらば結局8色で収まったが。)
 思ったよりかわいげのあるマウスになったので、自己満足。
 走るビッグマウスくんをクリックすると、一応、元のカットに戻るよーにしてあったのだが、気付いた人は少なかったよーだ。
 しおしお。

 ちなみに走り回る Java Script は、サイト◆ AUTO LOGOさんのフリー素材を使わせていただいた。
 この場を借りて御礼申し上げます。

 さて、も一つの英語ページのほうであるが。
 いーかげんなイングリッシュなので、詳しく読まないよーに。(笑)
 しかし、日本語の語呂や感覚で付けた名前と書いた文章のあいまいな意味を、もう一度見直す良いキッカケになったことは確かである。
 (必ず「何が何を」と、はっきりさせないといかぬ故)

 またやる。




◆ TOP INDEX へもどる