ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

TIPS

背景を黒、文字を白に

EmacsでActionScriptのコードを書き始めた。ActionScript-modeを導入したのでソースコードは色付きで表示されているのだが、なんとなく見にくい。デフォルトでは背景が白で文字が黒で、色付きで表示されているものが淡い色になっており、背景にうもれてしま…

起動時のフレームサイズを指定する

Emacsを起動したときのサイズを指定するには次のように.emacsに記述すればよい。 ; 起動時のフレームサイズ (setq initial-frame-alist (append (list '(width . 128) ; 幅 '(height . 41) ; 高さ ) initial-frame-alist)) ここでの幅や高さは文字数。自分の…

Finderで隠しフォルダへ移動

Finderでは.(ドット)から始まるファイルやフォルダは隠し属性となり見えない。一度、Finderで隠しファイルが見えるような設定にしたが、デスクトップ上の設定ファイルが見えるのが嫌だったので、結局止めてしまった。でもFinderでも隠しフォルダにアクセスし…

Finderウィンドウでパス表示

Finderウィンドウでタイトルバーにパスを表示するにはターミナルで次の通り入力すれば良い。 $ defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES $ killall Finder

シャッフル

配列の内容をシャッフルする関数を作った。 シャッフルするアルゴリズムはここで紹介されていたもの。 かき混ぜてはいかがでしょうか template <class T> void shuffle(T* p, int num) { for(int i=num; i>0; i--) { // 入れ替え位置を乱数で計算 int rnd = rand() % </class>…

隠しファイルの表示

現在、emacsのいろいろな設定中。emacsのいろいろな設定は.emacsというファイルに書き込む。このドットから始まるファイルは隠しファイルとなり、Finderではそのままでは見ることができない。これを表示するにはターミナルでコマンドを入力する必要がある。 …

カウントダウンクロックの操作方法

http://www.segatoys.co.jp/countdownclock/ セガトイズのおもちゃで設定した日時までのカウントダウンを行う時計がある。これの設定を変更しようと思ったが説明書が無くて操作が分からなかった。やっと説明書が見つかったので、再び困らないように操作方法…

バッチファイル

ビルドが終わったら、特定のファイルを特定のフォルダへコピーするなど、決まりきった作業はバッチファイルを作って効率化するようにしている。 作成したバッチファイルはランチャなどに登録してすぐに実行できるようにしている。しかし、実行が終わるとコマ…

Paint.NETで半透明画像を作る その2

昨日、ゲームのキャラクター画像を作る方法を書いたが、もっと簡単な方法があった。 新しいレイヤーを作成し、そこにキャラクターを描く 背景のレイヤーの表示するチェックをオフにする これで保存すれば背景部分は透明となる。

Paint.NETで半透明画像を作る

Paint.NETで半透明を使った画像を作るにはレイヤーのプロパティで不透明度を設定してやればよい。 たとえばゲームのキャラクターを作成してキャラクター以外の部分は透明にしたい場合は次のようにして簡単に作成できる。 レイヤーの背景をダブルクリックして…

値を交互に更新する

Twitterのkoizukaさんがツイートしていた値を交互に更新する方法。 まずは0と1を交互に更新する方法。 value = 1 - value; 0とnを交互に更新 value = n - value; nとmを交互に更新 value = m+n - value; xorを使ったもの value = value xor (m xor n); もち…

アルゴリズム

アルゴリズムの紹介 いろんなアルゴリズムが紹介されているサイト。これは便利。 ライン描画のアルゴリズムも紹介されており、ちょうど知りたいところだったので助かった。

矩形と点の当たり判定

矩形と点の当たり判定は非常に簡単。矩形の範囲内に点があるかどうか調べれば良い。 typedef struct { int left; int top; int right; int bottom; } RECT; bool isHit(RECT& r, int x, int y) { if ( r.top > y || r.bottom < y || r.left > x || r.right <…

トランプのシャッフル

TIPS/トランプのシャッフル - KOZの館 - Visual Basic Programming - かき混ぜてはいかがでしょうか トランプをシャッフルするアルゴリズムについて書かれたページ。メモリ使用量が少ない分、2番目のページのほうがいいアルゴリズムだと思う。 このランダム…

Google Chromeに検索用のブックマークレットを追加する

WEBブラウザにSleipnirを使っていたのだが、最近頻繁にフリーズすることが多いので、Google Chromeをメインで使うようにした。 Google Chromeは軽くて快適なのだが、カスタマイズがほとんどできず、使いにくい部分もある。 マウスジェスチャーに関しては、「…

デフォルトではReleaseビルドでもデバッグ情報が埋め込まれる

Visual Studioでプロジェクトを作成し、Releaseでビルドしてもデフォルトの設定ではデバッグ情報が埋め込まれることに注意。 生成したプログラムファイルにはpdb(Program Debug Database)ファイルへのパスが埋め込まれている。そのパスがフルパスになってい…

0、1、たくさん

プログラムで回数や個数といった数値を扱うときに注意すべき点。 ここでのたくさんとは2以上の数のこと。 ゲームではアイテム数やステージ数といった数値を多く扱うが、このときに「0、1、たくさん」ということを意識してテストしたほうがよい。 たとえばあ…

C++で作ったDLLをC#のアプリケーションでデバッグする方法

C++で作ったDLLをC#で使うにはDllImportで宣言すればよい。 using System.Runtime.InteropServices [DllImport("kernel32.dll")] extern static bool Beep(uint dwFreq, uint dwDuration); via http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32a…

ASSERTで文字列を表示

ASSERTは配列の添字が範囲内に入っているかとか、渡された引数は正しいかなどのチェックに重宝する。 ASSERTでプログラムが停止されたときにはそのときの引数が表示される。そこで引数に&&を付けて文字列も指定してやれば、その文字列も表示される(文字列はt…

includeを減らす

「ゲームプログラマになる前に覚えておきたい技術」より。 新しくソースを作成してヘッダファイルをincludeするとき、includeする順番やincludeを忘れてエラーになることが面倒で、ついつい前のソースからincludeしている部分をコピペして済ましてしまうこと…

壁で反射 改良

昨日の壁で反射する方法(id:toburau:20080604)。HIZさんよりコメントを頂いたので改良。 昨日の方法ではボールの速度は変化せず、壁は動かない場合はうまくいくが、速度が変化する場合などうまくいかない。たとえばボールが減速しているような場合、反射し続…

壁で反射

ボールが壁で反射する処理は、ボールの移動速度を反転してやれば良い。 たとえば、X軸に平行な壁なら、X軸方向の速度を反転する。 画面の上下左右の壁で反転する処理は次のような感じ。 float x; // x座標 float y; // y座標 float vx; // x速度 float vy; /…

矩形同士の当たり判定

矩形同士の当たり判定は最初いろいろ面倒かなと思ったが、実はかなりシンプルに書くことができる。 bool isCross(RECT& r1, RECT& r2) { if ( r1.top > r2.bottom || r1.bottom < r2.top || r1.right < r2.left || r1.left > r2.right ) { return false; } e…

sln,vcproj

小ネタ。 拡張子slnがソリューションファイルで、拡張子vcprojがプロジェクトファイル。 両方ともダブルクリックすればVisualStudioが立ち上がるが、VisualC#,VisualC++両方がインストールされていると、slnファイルをダブルクリックしたときにはVisualC#かV…

HHKでCapsLock

HHK Lite2の日本語配列モデルでCapsLockのON/OFFには、[Fn] + [Shift] + [Tab]。 ときどき、突然CapsLockが入ってしまって困ることがある。忘れないようにメモ。 さらにSHIFTキーが入ってしまうのか、[:]のキーを押しても[*]になってしまうことがある。でも…

cl.exeのコンパイルオプション

cl.exeを使ってコマンドラインでコンパイルしようとすると、次のようなwarningが出てしまう。 C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocale(326) : warning C4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効には…

コマンドラインでコンパイル

VisualC++ 2005 Express Editionがインストールしてある環境でコマンドラインでコンパイルを行う方法。 まずは環境変数を設定するためにVisualC++がインストールされているフォルダのbinにあるvcvars32.batを実行。デフォルトでインストールしたのなら、C:\P…

値Aから値Bへの補間

値Aから値Bへと補間する式は次の通り。 float a; float b; float c; float t; c = (b-a) * t + a; ここでtは0から1までの値。0のとき値a、1のとき値b、0.5のときaとbの中間の値となる。 とまあ、こんな式は考えなくてもすぐに出てこないといけないんだけど、…

0と1を繰り返す

ダブルバッファを切り替えるときなど、0と1を交互に繰り返したいことがある。そんなときは次のように書いていた。 int i; i = 1 - i; iが0なら1になるし、1なら0となる。初めてこのコードを見たとき最初何をやっているか分からなかったが、理解したときすご…

フレームから秒を表示

時間制限のあるゲームでプログラム内ではフレームでカウンタを持っている場合、たとえば60フレームで1秒の場合は次のように秒を求めてみる。 float counter; // 残りフレーム数 int second = counter / 60; // 残り秒を計算 このようにして計算すると、残り…