神代クロ のすべての投稿

ノート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として、マップデータ読み込み処理を作ることにします。

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

先は長い。

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

夕方くらいにスポーツクラブに行ってきました。やはり休日の夕方は混んでるね。

既にたくさんの人が使ったせいか、汗臭い器具があったよ(汗) やはり早めに行くべきか。しかし昼間はトレーニングの効果が出にくいらしいからなぁ。

ダイエットは朝、筋力アップは夜トレーニングすると良いとか。だからホントは朝から行ければいいんだろうけどね。

次は時間や曜日を考えて行ってみよう。

横浜で打ち合わせ&飲み

今日も横浜で打ち合わせです。今日の議題は某所のクリスマスイベント用システムの開発について。

クリスマスかぁ、例年俺はひとりでケーキ2個買って来て、日本酒をかっ食らって寝るとかそんな感じだけど、今年は違うものにしたいね。

打ち合わせ後は、持ち込んだノートPCでその場で作業したり。夜になったのでみんなでご飯を食べに行こうとしたら、ちょうど他の人達が地方出張から帰ってきたので、せっかくだからと居酒屋へ行くことになりました。

居酒屋では大量の串を注文して、みんなで食べたよ。飲みながらクレーム処理について語ったり。飲食系はヤ○ザ連れて来るから困るとかそんな感じ。出来るだけ穏便に済ませたいものです。

段々仕事が溜まって来たな…うまくこなさないと。

OAチェアを買う

chairデスクトップPCを使う時用のイスを買いました。SANWA SUPPLY SNC-NET4BKN2 OAチェアです。写真の左側のがそうです。

実はイスも10年間同じものを使っていて、最近プラスチックのタイヤがボロボロと欠けてきてたんだよね。タイヤは取替え出来ないっぽいし、買い替えとなりました。

家電屋で実際にイスに座って確かめながら、値段との兼ね合いも考えてこれにしました。約13,000円也

組み立ては自分でやったけど、30分くらいで完成かな。六角レンチで各所を固定するだけの単純な作業でした。

背もたれが頭の所まであり、レバーを引けば後ろにだらんと下がるので良いです。今までのは(写真の右側)、背もたれが小さいため、猫背がちになってたけど、これで姿勢も良くなりそうです。

ただ、今までのイスより大きいため、キーを打つ時に違和感があるなぁ。まぁこれは慣れかな。

これでより一層ネットサーフィn…じゃなくて、仕事に励めます。