月別アーカイブ: 2009年11月

スポーツクラブに行く(11日目)

久しぶりのスポーツクラブです。

前回行った際に爪が剥がれてしまい、痛いのでしばらく行く気が起きなくて…しかしこの2週間で1/3ほどの所で剥がれてた爪も、何とか復活したよ。まだ完全とはいえないけど、なかなかの回復力だね。

日曜の昼間なのでランニングマシンなどは予約待ち状態の混み具合でした。そんな訳でマシンが空いてすぐに使い始めたんだけど、なんかオッサン臭い…やっぱり人が使った直後はダメだわ。

平日の空いてる時間帯に行きたいけど、最近よく仕事電話がかかってくるから、昼間はPCの前にいないと困るかな。

マッチョダンディーへの道は遠い。

無線LANルータを買う

I-O DATA IEEE802.11g/b 無線LANルーター WN-G54/R4を買いました。これも今まで使ってたのが6年前に買ったやつで、いい加減古かったから。あと安かったし。

その古いのは暗号化方式がWEPなんだけど、これってザルみたいなセキュリティで1分あれば解析できてしまうらしい。よくもまぁ使い続けてたものだ。

今回のはルータではあるんだけど、既にルータはあるので、ハブアクセスポイントとして使います。普通にアクセスポイント単体で買うより安かったしね。

ちょいちょいと設定したら、問題なく動作しました。勿論ダブルワイヤレスなんていうセキュリティの穴は塞いであります。

ちゃんとPS3WPA2で接続できました。これでわざわざゲームのアップデートに有線を使わなくて済みます。

アニメ関連会社の社長と飲む

今日は数ヶ月ぶりにアニメ関連会社の社長さんと飲みました。

アニメ業界は不況の真っ只中だと思ってたら、その人の会社は堅調らしい。羨ましいね。最近は某パンツアニメにちょっとだけ関係してたとか。

色々話してるうちにiPhoneAndroidの話題が出ました。

思い起こせば2年前。「iPhoneでアプリ作らない?」という誘いがあったけど「Appleのケータイなんて流行るわけ無いだろ」と断ってしまったんだよね。その後日本でも発売され、大ヒットに。当時参入してれば今頃儲かってたかもなぁ…

iPhoneとAndroid。自分には関係ないやと思ってたけど、ビジネスとして考えたら面白そうではあるね。とりあえずそれぞれの技術書でも調べてみるか。

ノートPCのメモリを増設する

文章を簡潔に書けるようになりたい>挨拶
---

091120_194448俺はPCを使う際、複数のアプリを立ち上げたまま作業する事が多いので、メモリが少ないとスワップが発生して処理が重たくなってしまいます。

ウチのノートPCはWindowsXPでメインメモリが1GBなんですが、よくよく調べてみたらオンボードGPUがメインメモリから224MBも取って行ってました。つまり800MBで動いてたのか。

いくらXPでもこれじゃ足りないと、買ってから結構経つのに今更メモリを増設する事にしました。でも今って1GBが3000円しないんだね。精密ドライバーが無かったので100円ショップにて購入、PCを裏返してネジを外し、メモリを差し込んだら問題なく認識しました。

PCをしばらくいじってみたら、アプリの起動は当然前と同じだけど、アプリからアプリに切り替える時のスワップ発生が無くなりました。重たい処理をした後に固まるのも、ほぼ無くなったかな。

快適です。これでコタツでお仕事が出来ます。

コタツを出す

最近寒いですね。

今年はコタツを出さずに過ごそうなんて考えてました。しかし寒さでくしゃみが止まらなくなるは、エアコンつけても足元は寒いは、エアコンのせいで空気が悪くなってきて頭が痛くなるはと、厳しい住環境になってしまいました。古いエアコンだからかなぁ。

ともかく、結局コタツを出したよ。コタツはコタツで猫背になったり足が痛くなったりの弊害があるんだよね。あーでも暖かくて良いなぁ。

このブログもコタツに入りながら書いてます。せっかくイスを買ったけど、今後は仕事もコタツでやる事になりそうです。

ゲーム開発29:マップ表示

名称未設定 1前回読み込んだマップデータを表示させました。

スプライト表示用のモジュールは既にあるので、並べて表示するだけです。とりあえずマップデータのレイヤー0を背景、レイヤー1をキャラクタ配置として、各所の初期化部分を書き換えました。

マップデータの読み込みは以下のようになります。

MapData= new CMapData;
MapData->File("stage01map.fmf");

そしてマップ表示はこんな感じ。map_chip=255は透明なので表示しません。

for (i=0; i<MapData->GetHeight(); i++) {
 for (j=0; j<MapData->GetWidth(); j++) {
  map_chip=MapData->Get(0, j, i);
  if (map_chip!=255) {
   g->DrawSprite(spr_no[map_chip], (j*48), (i*48), 0.9f, 0, 0);
  }
 }
}

ただ、これだと表示されない場所まで描画するので、クリッピングする必要があります。あと画面スクロールにも対応させないとね。

上記の処理で表示する事が出来ました。んーやっぱりブロックのグラフィックが不自然な気がするなぁ…

表示はしたものの、当たり判定が入っていないので、今はゲーム開始直後に下に落ちてゲームオーバーになりますw

そんな訳で、次回は大ざっぱな当たり判定を入れてみます。

タブレットIntuos4を買う

091116_185033タブレットを買いました。Wacom Intuos4 Medium PTK-640/K0です。

ウチにあるのが2世代前のIntuos2で、日記を読み返すと買ったのは8年も前です。とは言え、ここ何年もまともに使ってなかったんで、単なる敷物状態でした。

これじゃあいかんという事で、今年の春出た新型を買ってみました。サイズは前と同じくA5サイズで、アプリ無し版です。

少しだけタブレットを触ってみると、確かに描きやすくなってる! 前のはとにかく滑りやすく、滑らないように力を入れて描いてたのですぐ手が疲れたのですが、新型は紙に鉛筆で描くような筆感です。素晴らしい。春にワコム株を買っておけば良かった

これでスキャナで取り込む手間を無くして、直接描けるようになれれば、もう少し描く頻度を増やせそうです。

スポーツクラブに行く(10日目)

結局先週と同じ曜日の同じ時間帯になったけど、スポーツクラブに行ってきました。

今日はランニングマシンで10分間走ってみた。たったそれだけなのに、心拍数が170を越えて測定不能になったんでびびった。まだまだ持久力が足りないな。

そういえばランニングマシンで走りながら、新聞読んでるおばさんがいて噴いた。走りながら字が読めるんかな。色んな人がいるなぁ。

トレーニング後、シャワーを浴びてから着替えるんだけど、その時に衣服に爪を引っ掛けてしまい、爪が剥がれたよ(涙) 見事に横一直線に切れ目が入り、血が出るし痛いし。

右手の中指なんだけど、お陰でキーボードやらマウスの操作に不自由してます。ちゃんと手入れしとかないとな…

ゲーム開発28:マップデータ読み込み

今回はマップデータを読み込む処理を、CMapDataクラスとして作成しました。

Platinumというマップエディタでマップを作ってますが、このツールから書き出す形式にFMFというのがあって、これがベタデータでわかり易かったので、とりあえずこれをそのまま取り込みます。

サンプルプログラムがあったのでそれを参考に、というか多少手を入れた程度のものを作ってみました。

まずFMFのデータ形式ですが、ヘッダ部は以下のようになっています。

typedef struct FMFHeader
{
 DWORD Identifier; // ファイル識別子 'FMF_'
 DWORD Size;    // ヘッダを除いたデータサイズ
 DWORD Width;    // マップの横幅
 DWORD Height;   // マップの高さ
 BYTE ChipWidth;  // マップチップ1つの幅(未使用)
 BYTE ChipHeight;  // マップチップ1つの高さ(未使用)
 BYTE LayerCount;  // レイヤーの数
 BYTE BitCount;   // レイヤデータのビットカウント(未使用)
}FMFHEADER;

これの後ろに実データがレイヤー毎に区切り無く入ってます。なのでヘッダ内のSizeでメモリを確保し、WidthHeightから1レイヤーのサイズを計算して、任意の場所のデータを読み書きすれば良い感じです。もうサンプルのまんまだけどねw

しかしこのレイヤーという概念は便利で良いですね。1つのデータファイルにマップデータのみならず、キャラクタの配置イベント発生場所といった物を持たせられます。しかも同一のデータ形式で。

今まではキャラクタの位置情報は別形式で持ってたけど、FMFに一緒に載せてしまおうか。

次回は読み込んだマップデータを表示させます。

//-----------------------------------------------------------------------------
// ファイル読み込み
BOOL CMapData::File(char *filename)
{
 HANDLE FP;
 DWORD ReadBytes;

 // ファイルオープン
 FP=CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 if (FP==INVALID_HANDLE_VALUE) {
  return FALSE;
 }

 // ヘッダ情報取得
 if (!ReadFile(FP, &fmfHeader, sizeof(FMFHEADER), &ReadBytes, NULL) || ReadBytes!=sizeof(FMFHEADER)) {
  CloseHandle(FP);
  return FALSE;
 }

 // 必要なメモリ確保
 LayerAddr= new BYTE[fmfHeader.Size];
 if (LayerAddr==NULL) {
  CloseHandle(FP);
  return FALSE;
 }

 // レイヤーデータ取得
 if (!ReadFile(FP, LayerAddr, fmfHeader.Size, &ReadBytes, NULL) || ReadBytes!=fmfHeader.Size) {
  CloseHandle(FP);
  return FALSE;
 }

 CloseHandle(FP);

 return TRUE;
}

//-----------------------------------------------------------------------------
// マップ情報取得
int CMapData::Get(BYTE layer_no, BYTE x, BYTE y)
{
 int  chip_no;
 BYTE *Layer;

 Layer=LayerAddr+fmfHeader.Width*fmfHeader.Height*layer_no;
 chip_no=*(Layer+y*fmfHeader.Width+x);

 return chip_no;
}

//-----------------------------------------------------------------------------
// マップ情報上書き
void CMapData::Write(BYTE layer_no, BYTE x, BYTE y, BYTE chip_no)
{
 BYTE *Layer;

 // 範囲チェック
 if (layer_no>=fmfHeader.LayerCount || x>=fmfHeader.Width || y>=fmfHeader.Height) {
  return;
 }

 Layer=LayerAddr+fmfHeader.Width*fmfHeader.Height*layer_no;
 *(Layer+y*fmfHeader.Width+x)=chip_no;
}

//-----------------------------------------------------------------------------
// マップの横幅取得
int CMapData::GetWidth()
{
 return fmfHeader.Width;
}

//-----------------------------------------------------------------------------
// マップの縦幅取得
int CMapData::GetHeight()
{
 return fmfHeader.Height;
}

ゲーム開発27:マップチップ作成中2

名称未設定 4マップチップの方向とか角度とか間違ってたので修正しました。

前のだと進行方向の先からマップを見てる事になるから、変だよね。あと俯瞰角度も広く見えるように変更しました。

何度か作り直して今のカタチにしたけど、これで大丈夫かなぁ。まぁキリが無いのでひとまずFIXとして、マップデータ読み込み処理を作ることにします。

ちなみにこの画像の構成のままプレイ出来るとは限りません。技術的に解決すべき事が色々あるからね。

先は長い。