« 2005年12月 | メイン | 2006年02月 »

2006年01月 アーカイブ

2006年01月01日

あけましておめでとうございます


昨年は実りの多い良い年でした。
Flagyx N()TE 時代を含めると、今年でサイト 10 周目。
おかげさまで良くも悪くも相変わらずのペースでやってこれたなあ、という感じです。

今年の目標はゲームを出すこと。
まずは True Color, を出せるようにがんばります。

それでは、本年もよろしくお願い致します。

2006年01月04日

C# をさわってみた。


pngtest.gif 冬休み! というワケで、このダウンロードした C# 2005Express Edition (今なら無料だよ) をいじくってます。
ヘルプを眺めていたら、アルファチャンネル付き png が読み込めそうな記述があったのでテストしてみました。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        Bitmap screenGraph, bgGraph, chrGraph;
        int mx, my;
        int fps = 0;
        int fpsTime = System.Environment.TickCount;
        int frameTime = System.Environment.TickCount;

        float[][] matrixItems ={ 
        new float[] {1, 0, 0, 0, 0},
        new float[] {0, 1, 0, 0, 0},
        new float[] {0, 0, 1, 0, 0},
        new float[] {0, 0, 0, 0.3f, 0}, 
        new float[] {0, 0, 0, 0, 1}};
        
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            mx = 100;
            my = 100;
            bgGraph = new Bitmap("bg.jpg");
            chrGraph = new Bitmap("chr.png");
            screenGraph = new Bitmap("bg.jpg");
            Application.Idle += new EventHandler(OnIdle);
        }
        private void OnIdle(object s, EventArgs e)
        {
            if (fpsTime + 1000 <= System.Environment.TickCount)
            {
                this.label1.Text = fps.ToString() + "FPS";
                fpsTime = System.Environment.TickCount;
                fps = 0;
            }
            if (frameTime + 16 <= System.Environment.TickCount)
            {
                fps++;
                frameTime = System.Environment.TickCount;
                Graphics g = Graphics.FromImage(screenGraph);
                g.DrawImage(bgGraph, 0, 0);
                g.DrawImage(chrGraph, new Rectangle(mx, my, chrGraph.Width - 1, chrGraph.Height - 1));
                ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
                ImageAttributes imageAtt = new ImageAttributes();
                imageAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                g.DrawImage(chrGraph,new Rectangle(0, 0, chrGraph.Width-1,chrGraph.Height-1),0.0f,0.0f,chrGraph.Width-1,chrGraph.Height-1,GraphicsUnit.Pixel,imageAtt);
                g.Dispose();
                this.BackgroundImage = screenGraph;
            }
            System.Threading.Thread.Sleep(1);
            this.Invalidate();
        }
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            mx = e.X - (chrGraph.Width / 2);
            my = e.Y - (chrGraph.Height / 2);
        }

    }
}

ほえー、あっさり読めた。知らなかったー。行列使えば全体の透明度も設定できた。
TextRenderingHint 使うとやたらリッチなテキスト描画もできるのも最近知ったし、ウラシマ状態だなあ。

まあ上のは、べたべたのベタなコードだからスピードはあんまり出ないね。とはいえこれだけのコードでそれなりに動いてくれるんだから贅沢は言うまい。

あとループは delphi からの定石的に OnIdle 使ってるんだけど、いまいち自信薄です。

2006年01月11日

free LANGuex、 Open Type フォントの対応、忘れものと落とし物のバージョンアップについて


Open Type フォント

(CL さんの ringo 投稿 、blog エントリより)

True Color, opening plot.(18禁)

コメントとして書いたのですが、目立たないので(^^; こちらでも書きたいと思います。
フォントリスト取得から True Type フォントの限定を外した版を作成してみました。
http://insertcoin.languex.jp/ver103/flanguex.zip
(こちらのファイルを、ゲームをインストールしたフォルダの同名のファイルに上書きしてお試し頂くと、フォントが選択できるようになると思います)

これで手持ちのものでは対応できたかな? と思うのですが、いかんせん Open Type フォントそのものを僕があまり所有していないため、すべてのフォントの取得が問題なく可能になっているのかちょっと自信がありません……。
もし open type フォントをご所有の方で、フォントを表示させたい方がいらっしゃいましたら上記ファイルをおためしください。
問題ないようでしたら、次回バージョンに含めたいと思います。

(名前の取得のみなので、他の手段としてはフォントダイアログを出しちゃう手もあったりします)

テキスト校正

また、ふり男爵さんよりテキスト表記校正のご連絡をいただいています (大変助かります。ありがとうございます!) 。こちらも次回の更新に含める予定です。
バージョンアップは今週の末ぐらいには出したいなと思いますー。


(01/12 追記)
cl さんのトラックバックを踏まえてさらにテスト。

http://www.borland.co.jp/tips/delphi/dh007/

この情報を踏まえて、以下のコードを書いてみました。
単純な話だったなあ。

procedure TForm1.Button1Click(Sender: TObject);
var
    bmp:TBitmap;
    Str:String;
begin

    Str := 'あいうABC';

    bmp := TBitmap.Create;
    bmp.Width := 256;
    bmp.Height := 30;
    bmp.PixelFormat := pf24bit;

    bmp.Canvas.Font.Name := '小塚明朝 Pro-VI R';
    bmp.Canvas.Font.Height := -30;
    bmp.Canvas.TextOut(0,0,Str+'テストA');
    bmp.SaveToFile('c:\test_k_a.bmp');

    bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height));

    bmp.Canvas.Font.Height := 30;
    bmp.Canvas.TextOut(0,0,Str+'テストB');
    bmp.SaveToFile('c:\test_k_b.bmp');

    bmp.Canvas.Font.Name := 'MS Pゴシック';
    bmp.Canvas.Font.Height := -30;
    bmp.Canvas.TextOut(0,0,Str+'テストA');
    bmp.SaveToFile('c:\test_m_a.bmp');

    bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height));

    bmp.Canvas.Font.Height := 30;
    bmp.Canvas.TextOut(0,0,Str+'テストB');
    bmp.SaveToFile('c:\test_m_b.bmp');


    bmp.Free;
end;

小塚明朝 A font_testa.gif

小塚明朝 B font_testb.gif

MS Pゴシック A font_testc.gif

MS Pゴシック B font_testd.gif

なぜ縦が欠けるか

  • freeLANGuex では現在、暗黙的にフォントの縦幅は横幅と「およそ」同じ事を期待してキャンバスサイズを取り、仮想ビットマップに描画処理を行っています(その後アンチエイリアシング縮小でゲーム画面へ)。
  • フォントによっては、縦幅>横幅 の差が非常に大きいものがあることがわかりました。これはフォントに内部レディングなど適切に情報が入っているからこそ露呈した不具合と言えます。

上記のコードを組み込むことで、おそらく free LANGuex でも問題なく表示は行えるようになると思います。ただし、これらのフォントを使用した場合、他のフォントを使うよりフォントのサイズが小さく、また上下に幅が取られることになります。

この処理をどうするか、ということですが、一時は外部レディングが広いフォントは free LANGuex 内部の行間値を使用しないことも考慮しました。
しかし、考えてみればフォントの選択に行間の広いフォントを意図して選ぶ方もいらっしゃるわけで、こちら側で情報を加工するのはあまり適切ではないと (今のところ) 判断しています。
「迷ったらあるがままに任せる」の法則に従い(^^; 内部レディングや外部レディングも含んだ形でサイズを取って描画する予定です。

2006年01月12日

Ziz Puzzle を公開しました


だいたいここの所数年、知人に年賀状代わりにゲームをつくって送りつけています。
今年も成人の日の 3 連休を使ってちょっとつくってみました。

Ziz Puzzle
http://ziz.languex.jp/

zizfig.gif

Ziz Puzzle はマウスを使ってブロックを「ぽとり、ぺたり」と貼り付けるテトリスライクなゲームです。
ストイックなアクションパズルゲームをお楽しみ下さい。

ビル・メリンダ・ゲイツ財団の活動は、「世界の貧困・環境問題へのあるべき解決策ではない」の表現は何を意味するのか考えてみる


finalventの日記
今日もコカコーラ問題

 じゃ、もっとコカコーラが慈善団体を持って活動せよ、というなら、そういうの例としてゲイツ三世のかみさんの活動をどう見ますかね? ああいうのは立派だと思うけど、それが世界の貧困・環境問題へのあるべき解決策なのか?

僕のブログではコカコーラについて言及は行いません。

気になったのは、引き合いに出されているビル・メリンダ・ゲイツ財団についてです。このエントリでの文脈を読むと、以下のように読めます。

  • ビル・メリンダ・ゲイツ財団の活動はマイクロソフトが企業としておこなっている
  • 活動は立派ではあるが、世界の貧困・環境問題へのあるべき解決策ではない

ビル・メリンダ・ゲイツ財団の活動については以前、元 MS の 古川 氏のブログで触れていたことがあり、その時の僕の感想として「ゲイツもそれなりに活動してるんだねえ」という、どちらかというと意味のある活動として受け取っていたため、上記エントリのようなとらえ方があることを知らなかったのです。あの活動に意味が無いという表現が暗喩として語られるほどその認知が一般的ならば、僕の印象に誤りがあったことになります。

今の所、検索の情報 (US / economist を付与 / Wikipedia)を通じて、僕の感じている印象は以下です。

  • ビル・メリンダ・ゲイツ財団は、自己資産を基金として設立されているため、マイクロソフトが企業として慈善団体を持って行っている活動ではない。
  • 世界の貧困・環境問題へのあるべき解決策かどうかはわからないが、実績は上げている。
    • (どのような慈善活動も「これが世界の貧困・環境問題へのあるべき解決策である」と言い切れるものではないのではないか?)

「そういうの例」として引き合いに出す財団として、ビル・メリンダ・ゲイツ財団は適切ではない、と思う。

僕の印象に誤りが含まれているという情報は、まだ明確に見つかっていません。
興味のある話題ですので、この話題については継続的に調査し、上記印象に誤りが含まれている場合、随時訂正を行います。
なお、finalventさんの日記はコメントがはてなユーザに限定されているので (トラックバックできないのかな?)、この情報を直接的に finalventさんの元には届けていません。

2006年01月15日

忘れものと落とし物 Version 1.03 を公開しました


忘れものと落とし物 プロダクトページより、 Version 1.03 を公開しました。
予告していましたとおり、今回は誤字脱字修正および Open Type フォントへの試験的な対応をおこなっています。
ご指摘、ご協力頂きました ふり男爵さん、 CL さん、ありがとうございました!

ちなみに誤字脱字修正では差分ファイルを出力しましたが、ie でテキストファイルを開こうとすると xml 宣言から xml ファイルと勘違いしてしまうと言う悲しい仕様に出くわしたため、 zip ファイルで固めてあります……。

あと Ziz Puzzle の画面周りがちょっと寂しいので、今晩ぐらいに手を入れたバージョンを上げる予定です。いやまあどんなに画面周りに手を入れてもストイックなゲームですが(^^;

(1/16 追記)
アップデートプログラムには cab32.dll の自己展開プログラムを使用していたのですが、ウイルススキャンプログラムの avast! が、この形式をトロイの木馬として検出するというご報告をいただきましたので、ファイルを zip ファイルの自己展開形式に差し替えました。
この警告は avast! の誤検出です。たぶん時間が経てば(^^; 解決してくれると淡い期待を抱いています。

About 2006年01月

2006年01月にブログ「Flagyx.blog」に投稿されたすべてのエントリです。新しい順に並んでいます。

前のアーカイブは2005年12月です。

次のアーカイブは2006年02月です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type