DXライブラリ 総合スレッド その12 at GAMEDEV
[2ch|▼Menu]
[前50を表示]
750:名前は開発中のものです。
12/05/16 01:14:43.27 E/82p3zm
>>749
なんだこれは

751:名前は開発中のものです。
12/05/16 01:33:14.92 E/82p3zm
>>659だけど
他で作った好きな要素数の配列をnewしてアドレス変数をポンポン交換してって
使い終わったやつはdeleteで開放
で擬似的に動的配列になるかね

日本語意味不明だけど解読してくれると嬉しい

752:名前は開発中のものです。
12/05/16 01:53:38.37 uCI89rGL
配列は定数しか無理だよ
動的配列のvectorじゃだめなん?

753:名前は開発中のものです。
12/05/16 03:41:31.70 veKNCjZ1
vectorが内部でやってることだろ。
基本を抑えずvector使っても結局詰まるよ。

754:名前は開発中のものです。
12/05/16 04:11:42.74 xN96LXhW
vectorとか適当にぶん回しても要素1000くらいまでならマジ優等生
何も考えずにvector使えばいいよ

755:名前は開発中のものです。
12/05/16 20:28:31.12 veKNCjZ1
おまじないプログラマーの甘言を真に受けないように

756:名前は開発中のものです。
12/05/16 21:05:20.10 Zs3i0kMO
プログラマーとして一流になる必要などなくて、ゲームが作れればいいんだから、
さっさとvector使えばええやん
C++ STL vectorとかでぐぐれば資料もたくさんあるから、必要な情報も得やすい

757:名前は開発中のものです。
12/05/16 21:17:43.67 xcEAC60x
名前空間とかわけわからんdせう

758:名前は開発中のものです。
12/05/16 21:22:50.79 xcEAC60x
クラスをインスタンス化する時コンストラクタやiniメソッドでメンバを初期化するとする
この時わざわざ
class Constructor{
private:
 int x,y,z;
public:
 Constructor(tmpx,tmpy,tmpz){
  x=tmpx;
  y=tmpy;
  z=tmpz;
 }
}
って名前変えて一個ずつ代入していくのが面倒なんだけど、この方法しかないの?

 Constructor(x,y,z){}
が出来るならいいんだけど

759:名前は開発中のものです。
12/05/16 21:52:32.82 Ii6Gjoka
Constructor(int tmpx, int tmpy, int tmpz) : x(tmpx), y(tmpy), z(tmpz) {}
とかどうよ

760:名前は開発中のものです。
12/05/16 22:06:52.36 xcEAC60x
やっぱなんかダサイねん(´・ω・`)
tmpとか無くしたい
x→tmpx→x

 ↓

x→x

761:名前は開発中のものです。
12/05/16 22:10:09.69 DWTPf8LX
テンプレートで初期化を自動化するstatic関数作ればいいじゃん
こういうのってC++でもできるよね?

762:名前は開発中のものです。
12/05/16 22:13:40.69 xcEAC60x
なんかこう、パラメータヒントの変数名がtmpでダサい(´・ω・`)

763:名前は開発中のものです。
12/05/16 22:22:46.08 GI6piSjh
大文字・小文字で区別ができるんじゃ?

764:名前は開発中のものです。
12/05/16 22:23:30.21 aRUZ3+na
同じ名前でもいいぞ、混乱しないようにメンバ変数にthis付けたほうが安全だけど

765:名前は開発中のものです。
12/05/16 22:30:48.24 uOBgzP4U
class point {
private:
 int x,y;
public:
 point()
 {
  *this = point(x,y);
 }
 point(int x,int y) : x(x),y(y)
 {
 }
};
ってダメかね

766:名前は開発中のものです。
12/05/16 22:54:49.23 vXiMaXO2
>>758
内部変数とアクセッサ・引数用の変数ネーミングのルールを作る。
内部変数は省略形で書き易く、アクセッサ・引数用は分かりやすく。
それ以上気にすると先に進まん。
なんかいい方法があれば後で直せば良いや、くらいで。

767:名前は開発中のものです。
12/05/16 23:53:20.10 O28tHfhr
>>764
安全っつーか、thisつけないとアクセスできないでしょ

768:名前は開発中のものです。
12/05/17 00:12:52.18 lbGUPy7y
俺ならこうだな
変数は構造体の中にまとめる
変数が増えても構造体をいじるだけでいい

typedef struct xyz
{
int x;
int y;
int z;
}stXYZ;

class Constructor
{
private:
stXYZ xyz;
public:
Constructor(stXYZ *pstTmp)
{
memcpy(&xyz,pstTmp,sizeof xyz);
}
};

//呼び出し側
stXYZ stTmp = {1,2,3};
Constructor constructor(&stTmp);


769:名前は開発中のものです。
12/05/17 00:24:19.25 Jj8o5dc4
>>768
(・δ・`)

770:名前は開発中のものです。
12/05/17 04:59:40.80 4FnschNb
>>767
初期化子リストじゃだめなの?

class foo
{
public:
foo (int x, int y) : x(x), y(x) {}
private:
int x,y;
};


771:名前は開発中のものです。
12/05/17 08:20:02.90 XdhnKfWC
できればコンストラクタに引数渡したくないな

772:名前は開発中のものです。
12/05/17 09:51:33.09 Jj8o5dc4
よくわからんけど引数から直接メンバにデータを渡す事は変数介さないと無理でok?

773:名前は開発中のものです。
12/05/17 10:48:59.52 72LABUA9
そこは見た目だけの問題だからintとか組み込み型だと最適化で消える場合もある

774:名前は開発中のものです。
12/05/17 12:18:20.00 kt0acN7f
レベル高すぎてついていけない

775:名前は開発中のものです。
12/05/17 12:51:45.63 XdhnKfWC
別にsetter, getterない publicなメンバ変数を持ってもいいし、
visual studio c++ 専用だけどpropertyという機能もある

776:名前は開発中のものです。
12/05/17 16:09:41.33 jk5kVr/j
>>774
安心しろ、俺もだ

777:名前は開発中のものです。
12/05/17 16:36:03.67 LEC6LKtf
C++の構造体ってデフォがpublicなクラスみたいなもんだし
メンバ関数作って使い方の感覚得るとかいんじゃね

778:名前は開発中のものです。
12/05/17 17:43:23.17 ucuijB6C
厨房だけど、何からすればいいか分からん
C言語は入門書一冊熟読した
知識はそれだけです

779:名前は開発中のものです。
12/05/17 17:53:24.70 A/eH0jcf
何すれば良いか分からんやつは大抵できないから好き勝手ゲーム作ったりしてれば良いと思う

780:名前は開発中のものです。
12/05/17 18:19:27.36 Le624jWk
ファミコンのマリオみたいなの作るといいよ
あの滑らかなジャンプの曲線の動きとか作るのすげー勉強になるし、実際に動いてるの見ると楽しい

781:名前は開発中のものです。
12/05/17 18:25:10.94 sA5HBbyr
>>778
作りたいもの作ればいいよ。
作りたいものがなければ違うことやればいいと思うよ

782:名前は開発中のものです。
12/05/17 18:42:01.27 Lq82mTDs
ちょっと待て、熟読したとは言ったが、実際にコードを入力して試したのか?
ともかく、DxLibとC言語で簡単なゲーム作る本があるから探して買うか図書館で借りるかして試してみればいいよ。

783:名前は開発中のものです。
12/05/17 18:44:31.06 CIWlPPKp
昔はベーマガを見て覚えたもんだが

784:名前は開発中のものです。
12/05/17 19:04:17.83 1miPR200
俺は見た(読む)だけじゃ絶対身につかなかったな。
実際に動かして見てやっと理解できる。

785:名前は開発中のものです。
12/05/17 21:17:20.29 MVax3Amg
俺はサンプルプログラムを1個改造して、
次のサンプルプログラムを1個改造して、
気に入ったのがあったら沢山改造して、というのを繰り返して身に着けたな

786:名前は開発中のものです。
12/05/18 00:14:29.29 4zRGqSRr
URLリンク(rpg.nengu.jp)

このサイトのソース読みながら覚えたいのですが
RPG.vcprojをドラッグアンドドロップして
vc++2008に変換しようとすると
「ゲームファイルの初期化に失敗しました」と何度試しても出ます。
VC++2010は低スペなので使えないのですがどうすれば変換できるのでしょうか

もしダメならこれ以外でVC++2008で公開されているrpgのサンプルがあれば教えてください

お願いします


787:名前は開発中のものです。
12/05/18 00:56:44.66 Kw1eEMY1
staticで保持して置いた配列を使い終わったら開放したいんだけどどうしたらいいでしょうか?

788:名前は開発中のものです。
12/05/18 00:58:13.40 gx1xQNnD
staticの固定長配列はプログラムが終了すると自動的に解放されます
それ以外に開放手段はありません

789:名前は開発中のものです。
12/05/18 00:59:03.38 Kw1eEMY1
関数func1,func2でそれぞれstatic変数を宣言した時、中身は共通になりますか?


790:名前は開発中のものです。
12/05/18 00:59:42.96 mamO/m7+
C++なら終了するまでスコープから外れないので解放されない。

解放する必要があるなら、
配列へのポインタで変数を確保してnewでヒープを確保、
必要になったらdeleteすればok

791:名前は開発中のものです。
12/05/18 00:59:50.88 Kw1eEMY1
>>788
ありがとうございます

792:名前は開発中のものです。
12/05/18 01:00:56.05 mamO/m7+
>>789
関数内で宣言されるstatic変数はスコープは関数の内部のみ。
従って別物。

793:名前は開発中のものです。
12/05/18 01:04:36.26 Kw1eEMY1
>>790
なんかよくわからないので具体的にコード書いてくれると嬉しいです。
・配列arrの引数m分だけ要素数を持つint型配列を引数&pに作成する関数
とかだとわかりやすくて自分が喜びます。
図々しくてすみません。

794:名前は開発中のものです。
12/05/18 01:05:51.71 Kw1eEMY1
やはり某製作支援サイトのようにメインループの前に変数宣言した方が良いのかな・・・

795:名前は開発中のものです。
12/05/18 01:20:06.21 mamO/m7+
>>793
//えーと、

// 適当な配列
int[] arr = {0,1,2,3,4,5,6,7,8,9,}

void dynamic_array(int*& p, int length)
{
  //lengthnこのintを確保
  p = new int[length];

  // arrからコピー
  for(int i = 0; i < length; ++i)
  {
    p[i] = arr[i];
  }
}

// pを解放するときは、
// delete[] p;

796:名前は開発中のものです。
12/05/18 02:44:50.20 g6CQrJUG
>>793
>>795 のSTL版
#include <vector>
void dynamic_array(int*& p, int length)
{
 auto v = std::vector<int>(length);
 p = v.data();
}

797:名前は開発中のものです。
12/05/18 12:33:49.02 AXglkRe5
なんでここC++スレになってるんだ

798:名前は開発中のものです。
12/05/18 12:39:42.25 aBuN5zeL
DXライブラリで詰まる人はcなのかライブラリなのか区別が付かないからではないでしょうか

799:名前は開発中のものです。
12/05/18 12:52:20.63 tTxAGc55
俺みたいにDXライブラリに頼らなくてはゲームも作れないレベルの人間だと
C++についてもよくわかってなかったりするからつい、だろうね。

他のスレだと”DXライブラリに頼らなくていい人”ばかりに思えて気後れする。


800:名前は開発中のものです。
12/05/18 14:58:56.44 AqX5CuAi
>>796
dynamic_array終了時に開放されね?
>>787が単にヒープに置きたいということでなければ>>795の方法しかないと思う

もしくはvector自体new/deleteするか

801:名前は開発中のものです。
12/05/18 21:35:11.00 0qQFV47b
今時ダウンロードしてまでゲームやる人いるのかね

802:名前は開発中のものです。
12/05/18 22:52:22.12 Avt8/Znc
>>800
>vector自体new/delete
スマポをnewするとか意味ないだろ。
>>796はドヤ顔でSTL勧める本人がSTLを理解してなかった良い例。

803:名前は開発中のものです。
12/05/19 00:27:03.52 VD4oJ3BE
STLのmapに(キー重複しない)insertを繰り返していくと、
メモリはわずかながら消費されていくと思うんだけど、
それってnewが繰り返されてるってことだよね。

アクション性の高いゲームでメインループ内でnewとか使っていいのかな。
普段は軽い処理でも、メモリ確保と開放が絡むと、どこかでカクついたりしないか心配。
気にせずやってるけどカクつきなんて発生したことないよ、ということなら安心なんだけど。

804:名前は開発中のものです。
12/05/19 00:28:28.08 r1qEY4jZ
冷静に考えて、今時って携帯ゲームやネトゲが主体だろ?
DXライブラリでパソコンで動くゲームって当たり前だが
そういうのが逆に新鮮じゃね?


805:名前は開発中のものです。
12/05/19 00:49:21.53 TBtSNI4j
>>803
もしも、メインループで毎フレームほど行なうっていうのなら、
そういう処理を行なう事自体を、見直す必要があると思うけど。

806:名前は開発中のものです。
12/05/19 01:02:15.71 a+urZXjQ
GCが起動するわけでもないならnew/deleteにあまり神経質になる必要はないと思うけど・・

807:名前は開発中のものです。
12/05/19 01:10:30.26 ZOsD1vO4
>>803
new deleteが重いというけど、なにをnew deleteするかでまた違うのよ。
new int とか new char[32] みたいに1回で終われば気にするほどでもない。

new Hoge で Hogeのコンストラクタの中でまたたくさん new() よばれているような
階層深く大きいクラスのnew, deleteが重いから、
その場合だけオブジェクトプールを検討すればいい。

808:名前は開発中のものです。
12/05/19 01:27:35.13 QmsbQiPL
一応ラウンド(ステージ)管理クラス生成時に
設定されたキャラクターの数だけ配列を宣言する形なんだけど
配列用ポインタを持たせたら、参照先が使い捨てになる。
で、動的に配列の要素数を操作すればポインタで使い捨てじゃなくてもいいんじゃないかと


809:名前は開発中のものです。
12/05/19 02:35:24.88 ZOsD1vO4
それは最大数がステージの開始時にわかってて、
最大数分のメモリを確保しっぱなしにするって話だろ?

それができる(普通な)規模のステージならそれがいい。
ステージだとかシーンと呼ばれる単位で一括確保・解放できればそれがベスト。

810:名前は開発中のものです。
12/05/19 09:17:44.64 9Hyd3HTN
最近のPCの場合、個人制作のゲームなら
全部メモリ確保してもいいともうけどな

811:名前は開発中のものです。
12/05/19 10:43:57.82 lxOdfsYj
new/delete遅い遅いっつーけどwinの実装はくそ速いぞ。
一定サイズ以下ならただのプールからの切り出しだし。


812:名前は開発中のものです。
12/05/19 10:46:39.32 VD4oJ3BE
>>807
オブジェクトはゲーム起動時に最大数をメモリ確保してある前提だったりする。

そこで、mapにinsertするpairが仮にintとポインタだったとして、
insertのときにそのintとポインタ分の小さいnewが起動するし、
eraseのときにはそれがdeleteされると思う。

で、その回数が膨大になったとき、GCみたいな時間くう処理が起動して
カクついたら困るなーと。特にアクション性の高いゲームだと。
たとえばメモリを新たに大量確保する処理が起動して時間くうとか。
そんなものは発生しない、なら、安心してコンテナ使ってゲーム作れるんだけど。

アクション性の高いゲームでも普通にコンテナ使うのが定番だよ、ということなら安心なんだけど、
そのあたりよくわからなくて。

813:名前は開発中のものです。
12/05/19 11:09:09.97 ArUyj87Z
>>809
具体的なコードがわからないんだよ

class RoundAdmin{
Character character[];
RoundAdmin(int i){
for(int t=0;t<i;t++){
character[i] = new Character;
}
}
}

814:名前は開発中のものです。
12/05/19 11:09:37.11 ArUyj87Z
iPhoneスペース無視されてワロタ

815:名前は開発中のものです。
12/05/19 11:24:53.82 8/80f/4q
>>812
メモリを確保する時間よりも、メモリが確保できるかどうかが問題だな
コンテナが定番かどうかはこういうのが詳しい
URLリンク(d.hatena.ne.jp)
個人・小規模でPCゲー製作ならSTLで充分かと

816:名前は開発中のものです。
12/05/19 11:38:54.28 ArUyj87Z
>>813続き
イメージとしてはこれができたら楽なんだ
winmain(~~~~~){
 int state;
 while(error()){
  switch(state){
   case 0:
   RoundAdmin RAdmin=new RoundAdmin();
   break;

   case 1:
   state=RAdmin.Func();
   break;

   case 99:
   delete RAdmin;
   break;
  }
 }
}


817:名前は開発中のものです。
12/05/19 11:52:46.30 aIMhivPJ
try,catch,throwじゃ駄目なのか?

818:名前は開発中のものです。
12/05/19 12:00:09.24 gXEjt6C9
goto使えば良いんでね?

819:名前は開発中のものです。
12/05/19 12:22:43.39 VD4oJ3BE
>>815
ありがとう。参考になる
自分はまさに個人・小規模でPCゲー製作だから、
out of memoryの心配だけはないんだよな

820:名前は開発中のものです。
12/05/19 12:24:45.52 HSIQMcFD
オーバーライドして作ったクラスのオブジェクトをコンテナに突っ込んでイテレータで回しながら共通関数を実行するんだろ

821:名前は開発中のものです。
12/05/19 12:49:35.26 JpqeYW60
>>820
ポリモーフィズムと言え。ややこしい

822:名前は開発中のものです。
12/05/19 12:58:30.97 zRojJiyg
>>816
OGRE3DのAdvancedOgreFrameworkがシーンの使い分けを解りやすく実装してるよ
仕組みだけなので2Dでも十分使える、ただ3DゲームならOGRE3D使ったほうがDXライブラリより楽だけど

823:名前は開発中のものです。
12/05/19 13:12:00.32 dlfQry7w
メモリ確保かー。
そういえばこの間、少し大きめの構造体の配列を用意しようとしたんだけど

 STRUCT_HOGE hoge[1024];

だと実行時エラーで、

 STRUCT_HOGE *hoge = new STRUCT_HOGE[1024];

だと問題なく動くってことがあった。
頭では理解してたけど、実際遭遇したのは初めてだった。

824:名前は開発中のものです。
12/05/19 13:46:07.27 PlH7X2T2
>>823
初心者が良くやるミスだね

825:名前は開発中のものです。
12/05/19 14:26:49.52 1CGbweqQ
ちなみにそれ原因は何ですか?

826:名前は開発中のものです。
12/05/19 14:51:44.70 VD4oJ3BE
stackとheapでぐぐれ

827:名前は開発中のものです。
12/05/19 14:53:36.27 ZHekMysl
ただのスタックオーバーフローってこと?

828:名前は開発中のものです。
12/05/19 14:57:27.20 VD4oJ3BE
yes

829:名前は開発中のものです。
12/05/19 15:14:52.35 GOROOjbN
>>823
大文字で書かれると分かりにくいのは俺が初心者だからかな
普通小文字じゃない?

830:名前は開発中のものです。
12/05/19 15:18:21.89 ArUyj87Z
>>817-818
それしか方法ないのかなー
最悪、最大数宣言して存在フラグなんだけど

831:名前は開発中のものです。
12/05/19 16:51:36.07 dlfQry7w
>>824
それなりにプログラムやってるけど、遭遇したの初めてでなー。

>>829
こういう例示だと、結構使い分けることも多い気がする

832:名前は開発中のものです。
12/05/19 17:03:35.58 ZOsD1vO4
>>812
>mapにinsertするpairが仮にintとポインタだったとして、
>insertのときにそのintとポインタ分の小さいnewが起動するし、
>eraseのときにはそれがdeleteされると思う。
ツリーマップは木構造のノードに必要なデータ、キー、バリューを
一つの構造体として1回のnew(), delete()で済ませる。
だからstd::listの追加・削除・挿入は比較的速いアルゴリズムと言われてるが、
これとnew(), delete()の回数自体は変わらない。(木構造を辿る負荷は別計算)

でも毎フレームstd::mapに大量の追加・削除されるのって
そもそも連装配列に向いてないペアなんじゃないか?(キーがHPとか?)

例えば >>816 なら関数ポインタ or クラス継承して
ストラテジーパターンのポインタを使うべきだ。

833:名前は開発中のものです。
12/05/19 17:09:43.18 ZOsD1vO4
>>825
VC++の初期値では、スタックサイズの最大値、ヒープサイズの最大値に
低めの値10MBが設定してあるから、これを超えると例外が発生して終了。


834:名前は開発中のものです。
12/05/19 17:12:49.37 VD4oJ3BE
>>832
>一つの構造体として1回のnew(), delete()で済ませる。
>これとnew(), delete()の回数自体は変わらない。(木構造を辿る負荷は別計算)
同意。

小さい負荷が積もり積もって、トータルでみれば大きな負荷となること、
その負荷軽減のためのチューニングや根本的な設計の方針については、
いろいろ情報も得やすいし、なんとかなる気がしている。

他言語のGCのような突発的大負荷の心配をしてたけど、
このケースでは、その心配はあまりなさそうという気がしてきた。

835:名前は開発中のものです。
12/05/19 17:46:09.07 pWSSP6VZ
DXライブラリ 雑談スレッド その12
スレリンク(gamedev板)

836:名前は開発中のものです。
12/05/19 18:29:25.01 FNz7dsVi
そういえば、ゲーム製作に関わるC, C++全般のスレって無いのか。

837:名前は開発中のものです。
12/05/19 18:50:09.12 aIMhivPJ
>>833
これでエラー回避出来なくなった人って少なくないんだろうな(合掌)
>>834
GCが動き出すぐらいにメモリーをいじってれば、
いずれはフラグメンテーションの餌食になるだろうな。
そうなったら、メモリー管理の方法を根本から見直した方が良いな。


838:名前は開発中のものです。
12/05/19 18:56:35.62 aIMhivPJ
>>836
立てるか?それとも俺が立てる?

839:名前は開発中のものです。
12/05/19 19:20:40.08 +n/uAHmA
>>833
10MBじゃなくて1MB

840:名前は開発中のものです。
12/05/19 19:59:32.27 oQPWMkDd
>>838
あったほうがいいかも。
軽く雑談できるくらいのスレは確かに欲しい。
ム板はstlやら何やらで分かれまくっててメンドイ。

841:名前は開発中のものです。
12/05/19 21:40:01.48 aIMhivPJ
こんな所か?っつーか立てられ無かった。

題名:C/C++総合スレッド Part1
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その12
スレリンク(gamedev板)


842:名前は開発中のものです。
12/05/19 21:51:45.49 VD4oJ3BE
C/C++でDXライブラリ以外のメジャーどころのライブラリも
知ってる人がいたらテンプレに入れてみては?
俺は不勉強ゆえDXライブラリしか知らないけど…

843:名前は開発中のものです。
12/05/19 22:19:17.33 oQPWMkDd
考え出したら色々あるな。
boostとかsdlとかwtlとか

844:名前は開発中のものです。
12/05/20 02:25:40.47 b4J8kKZD
switch分岐でnew-deleteできないのかぁ!!
誰かメインループ中でラウンド管理クラス(キャラクター数、オブジェクト数などのゲーム本体を管理するクラス)
を作りたいんだけど!

全然わからん。綺麗にできない。
ラウンド管理クラスを、例えばゲームのロード画面時にパッとnewして
キャラクターをその分だけパッとメンバの配列を動的に宣言して
リザルト画面に戻ったらパッとdeleteしたい



845:名前は開発中のものです。
12/05/20 02:28:54.36 rvG7rk61
キリがないからやめろ

846:名前は開発中のものです。
12/05/20 02:43:46.36 m1rxCUFY
その前に、自分のできる方法でゲーム完成させて経験値増やしたほうがよいように見える

847:名前は開発中のものです。
12/05/20 03:09:05.33 b4J8kKZD
>>846
キャラクターのクラスをラウンドクラスで配列で持って管理するっていう方法を想定して作ったんだよ

ラウンドクラスをコンストラクタの引数で指定されたファイルでマップやキャラクターや武器を初期化して
このラウンドクラスはその名の通りラウンド中は保持してラウンドが切り替われば新しく作る。
というのがしたいんだ。
だから
switch(hoge){
case 0:
 hoge=func();
case 1:
 Round round=new Round();
 hoge=2;
 break;
case 2:
 hoge=round.main();
 break;
case 3:
 delete round;
 hoge=0;
 break;
}
これがしたい
case0がメニューで1で初期化(つまりロード画面?)2がメインゲーム、3がリザルト画面
みたいな

848:名前は開発中のものです。
12/05/20 03:12:36.92 b4J8kKZD
でもswitchスコープ抜けると開放されちゃうんよ( ;´Д`)
staticにすれば、ひょっとしたら言語特性でできるかもしれないし
でもそうするとdeleteしても消えないかもしれないし


849:名前は開発中のものです。
12/05/20 03:26:03.65 m1rxCUFY
そういう概念をどこかで齧ったのなら、
そのソースごと真似すればいいんじゃないかな

スコープはC/C++では割と基礎的なところなんで、そこの理解がまだ足りないうちに
そこまで高度・大規模なことを「そらで」やろうとしても挫折してしまうと思う
手本があるなら手本を理解するまでやったほうがいい、その意味で、手本の真似が足りない

850:名前は開発中のものです。
12/05/20 04:19:36.26 rvG7rk61
>例えば >>816 なら関数ポインタ or クラス継承して
>ストラテジーパターンのポインタを使うべきだ。

switchをやめろ。

851:名前は開発中のものです。
12/05/20 04:32:17.32 ETYUDOJj
LILO and switch

852:名前は開発中のものです。
12/05/20 05:20:07.65 J67XAZ6b
なんでローカルにnew

853:名前は開発中のものです。
12/05/20 06:11:28.75 rvG7rk61
まず、メモリリークチェックしたほうがいいな。
>>847 のプログラミングからは駄々漏れ臭いがぷんぷんする。
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

ゴリ押しおまじないプログラミングは危険だぜ。

854:名前は開発中のものです。
12/05/20 08:54:21.16 jxpb7tAX
>>847
無理すんな。普通にやれw

855:名前は開発中のものです。
12/05/20 09:17:03.32 GdVgJDsL
綺麗に書く素人が「綺麗に」とか考えて作っても読みやすくはならんと思うぞ

856:名前は開発中のものです。
12/05/20 09:24:37.57 rvG7rk61
DXライブラリのC++ラッパー作ってます。よろしく。
URLリンク(mint.ninja-web.net)

857:名前は開発中のものです。
12/05/20 09:33:19.40 QwDamEGA
>>847
メンバ変数にでも保持しておかないと、
スコープ抜けたらローカル変数は保持できないので、結果的にメモリリークする

まあ、>>849がFAだと思うが

858:名前は開発中のものです。
12/05/20 09:47:55.18 b4J8kKZD
>>849
確かにswitchはオススメしないって言われた

お手本のコードは無いです。
メインループのこの部分(タイトル画面やメインゲームやオプション画面の変異)って
どのようにした方がいいですか?
他の方法がわからない


今思いついたのは

NowState=&Start();
while(~~~){
NowState=NowState();//次に実行するべき関数のアドレスを返す
}

859:名前は開発中のものです。
12/05/20 09:49:23.86 b4J8kKZD
タスクシステム?というのは聞いたけど昔のものだとかする必要が無いとか言われた

860:名前は開発中のものです。
12/05/20 09:50:46.90 GdVgJDsL
グローバルにenumでモード切り替え用の変数作ってswitchが一番簡単

861:名前は開発中のものです。
12/05/20 10:17:37.19 K5FhX9FA
シーン管理でggr

862:名前は開発中のものです。
12/05/20 10:21:43.19 b4J8kKZD
c#やjavaでいいんじゃないかってくらい全部クラス化してる。
クラスは自分が管理クラス(今回の場合はラウンドクラス)から渡されたデータを使って処理を行う。


例えば一連の流れをいうと
キャラクターが攻撃を行ったら判定クラスのメソッドが呼ばれ
判定クラスのメンバ変数ポインタからキャラクターの情報を貰って
判定結果がtrueならダメージ処理クラスに攻撃方法と対象と攻撃者が渡されるメソッドが呼ばれ
ダメージ処理クラスが持っているキャラクターの情報を貰って
HPが0ならキャラクターに死亡フラグを立て、UIクラスのメソッドに攻撃者と対象を渡す。

つまりキャラクタークラス→判定クラス→ダメージ処理クラス→UIクラス
とバトンリレーになってる。
この時、キャラクタークラスや判定クラスやダメージ処理クラスは、キャラクターの情報を持ってないと仕事にならないのでラウンド管理クラスが保持している。
イメージとしてはクラゲと、クラゲの触手

class RoundAdmin{
 Character character[];
 Judge judge;
 Damage damage;
public:
 void SetCharaNum(int);
 void SetJudgeClassChara(Character* hoge){damage.SetChara(hoge);};
 void SetDamageClassChara(Character*);
}


以上のことを踏まえて誰か中央部の設計お願いします。もう設計の最初からやり直しするのは嫌ですヽ(;▽;)ノ

863:名前は開発中のものです。
12/05/20 10:39:42.64 b4J8kKZD
>>861
URLリンク(d.hatena.ne.jp)
関数ポインタ?をスタックしまくるんですか
でもタイトルシーン→ゲームシーン→リザルトシーン
という流れがあった場合リザルトシーンを予めタイトルシーン時にリザルトをpushしなきゃならないってことですよね

864:名前は開発中のものです。
12/05/20 10:48:07.65 rvG7rk61
昨日はアクションでstd::mapが速い遅いの話だったが、今日はRPGの戦闘か?

C++だと相互参照するのに嫌な制限あるから難しいよね。
>>856のサンプルに入ってるソースではデータと振る舞いを分けちゃってますが、
クラスを名前だけ前方宣言してダブルディスパッチするほうが一般的なのかなぁ。

865:名前は開発中のものです。
12/05/20 11:49:53.71 rvG7rk61
>>862
こうか?

class Charactor
{
__int HP;
__bool isDead;
__void Attack(Charactor* target, How* how)
__{
____Judge judge;
____bool is = judge.IsHit(target);
____if( is )
____{
______Damage damage;
______damage.Set(this, target, how);
______if( HP == 0 )
______{
________isDead = true;
________UI ui;
________ui.Set(this, how);
______}
____}
__}
};

866:名前は開発中のものです。
12/05/20 11:56:57.34 rvG7rk61
だめだ、エスパーよろ。

867:名前は開発中のものです。
12/05/20 14:50:25.73 b4J8kKZD
>>865
それぞれの返り値がないから
例えばjudge.ishit()っていうメソッドの中でdamageを定義してメソッドを呼んでる
こう・・・

class Charactor
{
 int HP;
 int x,y;
 double Angle;
 bool isDead;
 RoundAdmin* Admin;
 void Attack(int Kind){
  Admin->judge.IsHit(this,x,y,Angle,Kind);
 }
};

class Judge{
 RoundAdmin* Admin;
 void Judge(RoundAdmon tmpAdmin){
  Admin=tmpAdmin;
 }
 void IsHit(Attacker,x,y,Angle,Kind){
  for(int i=0;i<Admin->CharaNum;i++){
   if(~~~){
    Admin->damage.func(Attacker,i,Kind);
   }
  }
 }
}

868:名前は開発中のものです。
12/05/20 14:50:56.96 b4J8kKZD
説明が下手でスパゲティで死にたい

869:名前は開発中のものです。
12/05/20 14:54:58.64 d1pNr8pV
enum
{
  TITLE,
  MAIN,
  ENDING,
};

int state = TITLE;

int main(void)
{
  while()
  {
    func[state]();
  }
}

870:名前は開発中のものです。
12/05/20 15:33:37.24 GdVgJDsL
>>863
ゲームオーバー処理の時にゲームシーンをpopして、そのままゲームオーバーをpushすればいいんじゃないの?

871:名前は開発中のものです。
12/05/20 16:09:24.24 b4J8kKZD
>>870
逆だと思ってました(popしたものが実行されると思ってた)
そういうことですか

>>869
func[MAIN]関数内で保持したい変数ってどうすればいいんですか?
func[MAIN]以外が呼び出されたら消えて欲しいです。

あと今更ですが質問厨でウザいですし基本設計の質問はDxlibスレでスレチだった・・・

872:名前は開発中のものです。
12/05/20 18:03:42.86 B+9uILOG
Charactor*のようにポインターのマークが後ろにつくのはどういう意味だっけ?

873:名前は開発中のものです。
12/05/20 18:16:08.20 eBiE/F9z
Character* x; // Characterのポインタ型を表す型名
Character*30 // Characterという変数と30の乗算(演算子オーバーロードがされていない場合)
Character*=10 // Characterという変数に30を乗算し代入(演算子オーバーロードがされていない場合)
/*Character*/ // コメントの終端

どれでもお好きな物をどうぞ

C++のスレがないってのは
ここで質問して良いって言う理由にはならないからな?

874:名前は開発中のものです。
12/05/20 18:30:54.34 rvG7rk61
中高生の黒歴史

875:名前は開発中のものです。
12/05/20 18:44:31.78 iNm25OoA
いい加減、スレ立てるか。>>841でいい?

876:名前は開発中のものです。
12/05/20 18:44:39.45 B+9uILOG
ありがd
Character* x; // Characterのポインタ型を表す型名 ですよね

しかし↓このように書くのはどうなんだろう?
Charactor *target

877:名前は開発中のものです。
12/05/20 18:56:48.04 m1rxCUFY
>>876
個人でゲーム作ってるなら、どっちか好きなほうを選べばいい
URLリンク(www.henshi.net)
URLリンク(ockeysprogramming.blog42.fc2.com)

878:名前は開発中のものです。
12/05/20 19:16:26.37 /AOQLV8Q
>>875
スレタイに「ゲーム製作」入れて、

C/C++ゲーム製作総合スレッド Part1
でいいんじゃない?

879:名前は開発中のものです。
12/05/20 19:19:04.91 B+9uILOG
これは参考になりますね。どうもありがとうございます〜
C++の本には載ってない文法なので疑問でしたが
人それぞれの考え方なんですね

880:名前は開発中のものです。
12/05/20 21:23:14.14 iNm25OoA
立てた

C/C++ゲーム製作総合スレッド Part1
スレリンク(gamedev板)l50

881:名前は開発中のものです。
12/05/20 21:29:41.56 m1rxCUFY
>>880

882:名前は開発中のものです。
12/05/21 01:56:01.80 ZnI/WkSf
>>880
おつ

883:名前は開発中のものです。
12/05/21 16:15:45.24 L5xx/kw7
>>879
手元の入門書(2種類)だと載ってるけどな

884:名前は開発中のものです。
12/05/21 18:26:14.29 ffV6Y48y
キャラクターを一瞬真っ白にして描画する方法ってわかる? 例えばダメージを受けたときなんかに使うアレ

885:名前は開発中のものです。
12/05/21 18:30:28.40 I9dpNaEz
>>884
明るさを0にして色反転ってできなかったっけ?

886:名前は開発中のものです。
12/05/21 18:51:02.98 ffV6Y48y
>>885
フィルタか、サンキュー

887:名前は開発中のものです。
12/05/21 18:58:22.65 ffV6Y48y
違った、ブレンドモードか。危ない危ない…

888:名前は開発中のものです。
12/05/21 22:19:42.57 47wV3n9Q
SetDrawBright()とSetDrawBlendMode()使って、
一時的に他の色っぽく表示っていうのがこのスレか前のスレかにあったね
参考にさせてもらったわ

889:名前は開発中のものです。
12/05/21 23:13:34.24 yadbYRsO
別の画像を表示

890:名前は開発中のものです。
12/05/22 00:28:56.82 fGZyqonm
画像を指定した角度座標でマスクできる関数教えてください!
四角く作ったミニマップがダサいです!

891:名前は開発中のものです。
12/05/22 15:12:29.46 mXIdZtP1
上からマスク画像を表示

892:名前は開発中のものです。
12/05/22 20:41:55.22 KEARhB46
>>890
すまんが、その質問からだとどういうふうに描きたいのか分からない。
「○○っていうゲームの△△みたいに」っていう例えでも良いんで
もう少し詳しくやりたいことを説明してはくれまいか。

893:名前は開発中のものです。
12/05/22 23:11:59.34 fGZyqonm
AVAのミニマップ表示と
EXVSの画面右上のミニマップの両方お願いします。

894:名前は開発中のものです。
12/05/22 23:33:05.27 GwTouD/j
EXVSってただの丸だろ。マスクする必要なしw

895:名前は開発中のものです。
12/05/23 10:34:59.14 b4o10B2o
構造体のポインタを引数にする関数がうまく使えない。
クラスのメンバ構造体のポインタを渡そうとしても「CClass::TStructからTStructへ変換できません」と言われる。
わけわからん。お助けくだせえ

896:名前は開発中のものです。
12/05/23 10:36:23.94 b4o10B2o
おっと、それ用のスレがあったんか。スレ汚しすまん

897:名前は開発中のものです。
12/05/23 12:41:41.58 0bw1KTX7
>>889
以前他のライブラリで試そうとしたんだけどどうやっても白いくり抜いたような画像は得られませんでした。
やっぱり出来ないんですよね?
たとえば赤い色の敵がいるとすると青と緑の要素がないからキレイに白くならなかったような

そのときの結論は、手作業で白い敵の絵も作ってダメージのとき
そちらを表示するしかないということでした

898:名前は開発中のものです。
12/05/23 13:39:40.92 fw4B82cQ
シェーダを使うw

899:名前は開発中のものです。
12/05/23 13:59:04.47 EJDtoHbk
>>897
DXライブラリのメモリイメージAPIから作り出すことができる。

ただしDirect3Dは、同じテクスチャを同じ描画モードで
連続して描画すると効率が良いので、

一枚の敵画像の中に白く塗り潰した敵の絵も一緒に入れてしまったほうが
描画するときの効率はいい。

900:名前は開発中のものです。
12/05/23 14:07:34.09 EJDtoHbk
Direct3D9の固定パイプラインがもっている、
あるいはHLSL書いてピクセルシェーダ使うのも描画モードが切り替わるので、
Direct3Dの一括描画を止めてしまう。

手作業で白い敵の絵も作って、アルファブレンドで二枚塗りして
フェードさせるのが最も望ましいんじゃないかな。


901:名前は開発中のものです。
12/05/23 17:25:41.49 0bw1KTX7
>>898
わかりません・・・Directx7レベルPGなのでw

>>899 >>900
よくわかりました。ありがとうございます。
おかげでこないだ詰まってた問題も原因がわかりました。
スプライト処理クラスを作って一枚表示ごとに描画モードを
SetRenderStateで変えていたのですが、去年買ったi5パソコンで数百程度の
小さい画像表示で処理落ちし始めてビビリました。
このスレで「描画モードを変えると処理が重くならないか?」という話題があったのを
うっすら記憶していて、SetRenderStateをまとめてやるようにしたら改善されました。
いま「SetRenderState 重い」で検索したらたしかに重たいと警告を発してる開発者さんがいました。

902:名前は開発中のものです。
12/05/23 21:39:28.35 oEFLuczz
スプライトの色を一時的に白っぽくするとかはここを参考にした覚えがある
URLリンク(dixq.net)

903:名前は開発中のものです。
12/05/23 21:52:32.24 fw4B82cQ
画像ロードする関数を少しラップしてソフトイメージ経由で白マスク画像を作成、連結したもの作らせると結構良さそうかな

904:名前は開発中のものです。
12/05/23 22:29:47.19 hXbSVptG
ファミコンだったらパレットチェンジでデータ量少なくかつ高速に処理できるのに最新PCって駄目だな

905:名前は開発中のものです。
12/05/23 22:42:46.64 kOpBPT9L
全くだw
いちいち色違いのキャラを用意しないといけないとか、面倒だわ。

俺もこの白点滅のやり方について公式とかで質問した人間だから、同類。

906:名前は開発中のものです。
12/05/23 22:49:16.12 EJDtoHbk
>>903
いくつかポイントがあって、合成する元の画像がそれを意識して作られる必要あり。

テクスチャは2の累乗であるwidth, height の正方形である。
だから長方形とかだと裏で大きめの正方形を確保してしまうから、
合成後の画像が正方形のスペースを有意義に使うこと。

カラーパレットが空いている必要がある。
つまり256色を白以外で使いつくされてるとだめ。

907:名前は開発中のものです。
12/05/23 22:50:09.77 pwt5T56h
今だってピクセルシェーダー使えば同じこと出来るだろ

908:名前は開発中のものです。
12/05/23 23:13:59.87 hXbSVptG
そんな高度なテクニックは使いこなせねえよ

909:名前は開発中のものです。
12/05/23 23:18:06.90 0ldDGJ6S
白抜きしたいキャラクタをまずブレンドモードInvで反転で描くだろ?
その上にもっぺん同じキャラクタをこんどはAddで加算描画するだろ?
そうすると抜き色以外255で埋まるって寸法よ

910:名前は開発中のものです。
12/05/24 00:14:49.78 OTDx3X8F
別に白画像作ればいいじゃん

911:名前は開発中のものです。
12/05/24 00:37:40.90 YnP/Ncq+
アルファブレンドのON,OFFの切り替えが頻繁に起きるぐらいなら
全部アルファブレンドONで描画したほうがいいんだな。
マップタイルだけOFFとか。

912:名前は開発中のものです。
12/05/25 00:25:55.82 rg8OJbTJ
>>909
頭やわらかいねきみ

913:名前は開発中のものです。
12/05/25 20:12:45.46 9VSOgWxy
Allegroには、グラフィックの背景色以外の部分を指定の色一色にして描画する関数があって、
ビットマップでフォントを用意してそれを指定の色で描いたり、
そのシューティングゲームでダメージを受けて一瞬#fffだか#f00だかのシルエットになるときとか使い道があった

914:名前は開発中のものです。
12/05/27 08:25:16.10 /36TiFsh
でも白画像でいいよね

915:名前は開発中のものです。
12/05/27 11:50:59.78 6LUkVEJp
作るの面倒くさい。少なくとも自動生成じゃないと。

916:名前は開発中のものです。
12/05/27 16:01:26.83 jTp1UMkC
俺はゲーム内で自動派だけど、
ゲーム外でツールで生成する派とかもいるかもしれんな
要はゲームで実現できればいいし

917:名前は開発中のものです。
12/05/28 03:51:16.27 xvuBoj/+
ゲームではかなりよくある表現だから関数があってもいいかもな

918:名前は開発中のものです。
12/05/28 05:01:17.17 fvu7wQ0B
関数作ったよー><
// r, g, bの色を透過色とみなした白マスクを下に繋げて作成。alphacheckを1にするアルファ値0も透過する。
// AllNum以降はLoadDivGraph系と同じ(ただし複製後の画像を想定して指定すべし)。
int LoadDivGraphWhiteMaskDup(const wchar *infile, int r, int g, int b, int alphacheck,
int AllNum, int XNum, int YNum, int SizeX, int SizeY, int *HandleBuf) {
int inhandle = LoadSoftImage(infile);
int w, h;
GetSoftImageSize(inhandle, &w, &h);
int outhandle = MakeARGB8ColorSoftImage(w, h*2);
BltSoftImage(0, 0, w, h, inhandle, 0, 0, outhandle);

for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
int tr, tg, tb, ta;
GetPixelSoftImage(inhandle, x, y, &tr, &tg, &tb, &ta);
if ((tr == r && tg == g && tb == b) || (alphacheck && ta == 0))
DrawPixelSoftImage(outhandle, x, y+h, 0, 0, 0, 0);
else
DrawPixelSoftImage(outhandle, x, y+h, 255, 255, 255, 255);
}
}

int outgraph = CreateDivGraphFromSoftImage(outhandle, AllNum, XNum, YNum, SizeX, SizeY, HandleBuf);
DeleteSoftImage(inhandle);
DeleteSoftImage(outhandle);
return outgraph;
}

919:名前は開発中のものです。
12/05/28 06:51:35.69 mvM7MJU+
マリオみたいな感じのゲームを作ろうと思ったけどジャンプができない。

色々サイトとか回ってみたけど中々分からない。
誰か教えてくれると幸いです。

920:名前は開発中のものです。
12/05/28 08:13:51.39 fvu7wQ0B
重力と地面に立つことを作ればあとは飛ぶだけ

921:名前は開発中のものです。
12/05/28 08:21:05.78 IVkwT0S2
>>919
v=gt
速度の上限を定める
落下しすぎたら戻す

ジャンプで難しいのは着地だけ

どうしてもダメなら最初は加速させずに等速ジャンプでいいと思うよ
押してる間だけ上昇、離したら下降とかね


922:名前は開発中のものです。
12/05/28 08:40:00.71 c9K0Nu9s
アクションゲームの最初の壁はジャンプ
次の壁は坂道

923:名前は開発中のものです。
12/05/28 08:52:55.29 6YRysOIW
最初の壁は床だろう……。

924:名前は開発中のものです。
12/05/28 10:20:42.61 rvNFgryv
どこから作りかで変るだろ
マップチップ並べた床作らなくても地面にする座標決めればキャラの動きは作れる

>>919
てかDXライブラリの公式ページにサンプルあるじゃん
URLリンク(homepage2.nifty.com)
2.ジャンプ処理


925:名前は開発中のものです。
12/05/28 10:21:04.96 90lU+KxT
床てY軸の位置こていしとくだけじゃないか

926:名前は開発中のものです。
12/05/28 10:32:44.25 6YRysOIW
それを言うなら、ジャンプだって下方向へ加速させるだけだ。
さらに言うなら、昔のゲームみたいに(等加速度でなくて)等速直線運動だとしてもジャンプはジャンプだ。

927:名前は開発中のものです。
12/05/28 11:25:52.97 uXHACx8T
yが毎フレーム5マイナスされる時
厚さ1の床をどうやって判定するんだ

928:名前は開発中のものです。
12/05/28 11:28:20.73 9WGXBrjP
5以内に地面があれば5-距離だけ移動してジャンプ終了、でよくね?

929:名前は開発中のものです。
12/05/28 11:53:09.06 aojI3MeF
for(i=0; i<5; i++)
{
  y++;
  if(isAtari())
  {
    y--;
  }
}

930:名前は開発中のものです。
12/05/28 11:59:48.69 b7wzF1nG
ちょっと横から失礼

>>902
これで真っ白な画像を得られました。ありがとうございます。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
int x = 0;
int Handle = LoadGraph("char.png");
while (ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0) {
SetDrawBright(255, 255, 255);
SetDrawBlendMode(DX_BLENDMODE_INVSRC, 255);
DrawGraph( x, 100, Handle, TRUE );
SetDrawBlendMode(DX_BLENDMODE_ADD, 255);
DrawGraph( x, 100, Handle, TRUE );
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
x = x + 1;
}
DxLib_End();
return 0;
}
ブレンドモード切替の負荷の重さにはびっくりしたので
ゲームの最初にこれで白い画像を作って表示することにしました。

931:名前は開発中のものです。
12/05/28 13:04:49.57 b7wzF1nG
>>918
ちょっとだけ直して動きました。
URLリンク(www1.axfc.net)
使えそうです。ありがとうございます。

932:名前は開発中のものです。
12/05/28 14:53:28.29 WnycGPJc
DXについて勉強するのにオススメの書籍とかありますか?

横スクロールのアクションゲームを作ってみたいんですが

933:名前は開発中のものです。
12/05/28 15:02:03.10 jUTN7lVO
14才からはじめるわくわく〜
みたいなやつ

934:名前は開発中のものです。
12/05/28 20:02:07.96 GTiho4az
>>932
俺の結論として本は要らない
Dxライブラリは覚えること余りないから必要なのはサンプルでしょ
ネットで他言語でもなんでも見たらいいと思う

935:名前は開発中のものです。
12/05/28 21:06:10.30 51O+Wupn
公式にあるサンプル全部やって、全部ちょこっとずつ改造してみれば、
次に何を勉強すればいいか道が見えてくるかもね

936:名前は開発中のものです。
12/05/29 01:46:18.53 L7O/xZHN
>>927
そんな半端な場所に床を設置すんな

937:名前は開発中のものです。
12/05/29 01:50:59.85 BLevQqxO
うお、仮とはいえPMXに対応してきたのか
すげーな

938:名前は開発中のものです。
12/05/29 02:00:46.52 ajD2ZMcH
>>933
あれ買うなら東方もどきのサイトの方が1000倍マシ

939:名前は開発中のものです。
12/05/29 16:38:49.14 0ZCTZE5+
>>932
DXってのはDXライブラリのことを指してるのかな?

DXライブラリ自体は画像の描画や音楽の再生、キー操作の取得なんかを簡単にできるものだと思えばいい。
リファレンスを読めばわかるから、書籍など全く必要ない。

問題は各ゲーム(シューティング、横スクロールアクション、落ち物、パズル、etc...)の構造なんだけど、
この辺は当然ながら言語もDXライブラリも全く関係ないから、ひたすらググればいいと思う。

もちろんシューティングに特化した書籍なんかも売ってるとは思うから、
どうしても本がいいならそういうのを買えばいいと思うよ。

940:名前は開発中のものです。
12/05/30 23:01:39.68 sRt+VGOO
【ゲームバグ集】私達の知ってるゲームとは違う【吹いたら負け】
URLリンク(www.youtube.com)

これ見るとゲームのバグのほとんどが地形かキャラ同士の変な判定でめり込むことによって起きてるんだね
横アクションを作るとき注意ですね

941:名前は開発中のものです。
12/05/30 23:29:00.29 RKMJ5hGw
勢い良くぶつかったら吹っ飛んだとか、
しゃがみジャンプで天井ぶつかったら吹っ飛んだとか、
ブロックとブロックの間に挟まって吹っ飛んだとか、

よくある光景ですよね


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4370日前に更新/240 KB
担当:undef