C++でRPGゲームを作成するat GAMEDEV
C++でRPGゲームを作成する - 暇つぶし2ch750:名前は開発中のものです。
06/06/20 05:44:49 yRy3miB7.net
鬼はどうなったん?

751:名前は開発中のものです。
06/06/20 11:04:29 annU3c5h.net
ステフが捨てました。

752:名前は開発中のものです。
06/06/21 17:03:09 b0spWjUO.net
>>749の作るゲームに期待

753:名前は開発中のものです。
06/06/21 18:05:51 HFz2n3fa.net
スレリンク(tech板:793-794番)

754:名前は開発中のものです。
06/06/21 18:07:40 HFz2n3fa.net
ヘッダに実装を書かない方法を知らないんジャマイカ

755:名前は開発中のものです。
06/06/22 19:56:56 UpYDoT5s.net
俺たちでドラクエ作ろうぜ
スレリンク(ff板)
スタッフ募集!
シナリオ班・ツクール班・音楽班・ドット絵班


756:名前は開発中のものです。
06/06/25 17:33:37 cfrlOTij.net
ドラゴンクエストノスタルジア
とか創ったら略語がDQNにw

757:名前は開発中のものです。
06/08/01 04:11:10 lqTlZ2D0.net
きっと鬼ぃは喉を餅に詰まらせて診断だ

758:名前は開発中のものです。
06/08/01 16:04:04 dyzvPv2P.net
ですよねー

759:名前は開発中のものです。
06/08/04 18:42:33 W6nuuaJ8.net
うんうん ^^

760:名前は開発中のものです。
06/10/14 17:56:19 TyTVrLwQ.net
ワロタ

761:名前は開発中のものです。
06/10/26 21:13:09 ssyUOzfl.net
C++でRPGシステムを作ろうと思っています。
汎用性重視で描画処理はすべてフレームバッファ(Win32ではDIBとして表示。LinuxとかMacは知らんw)。
フォントも安心して使える固定サイズのフリーフォント内蔵で画面イメージも統一できます。
シナリオエディタも搭載、ツクール感覚でオリジナルのRPGを作ることが可能。



設計書書くんで、誰かプログラミングしてください。


762:名前は開発中のものです。
06/10/26 23:08:33 5Uv1F1QJ.net
クラス設計は人の書いたの見てみたいなあ

763:名前は開発中のものです。
06/10/27 15:19:29 PMSzIrz+.net
>>761
それは津クールXPやDxLib・SDLと何が違うんだ?
もし、おもしろそうなら、合間合間にcodingはしてもいいが。

764:名前は開発中のものです。
07/01/28 23:04:23 LYBCO2KL.net
自分のスキルあげるならどういうゲーム作ったら良いのさ

765:名前は開発中のものです。
07/01/30 11:53:29 C4TtFAJ1.net
一定の経験値でスキルあがるようにするとか。
……と微妙にボケてみる。

766:名前は開発中のものです。
07/04/12 17:49:52 ZybyQoX6.net
>>764
今のレベルによるが、
ある程度も組めないようなら、本買ってきてそれに載ってるコードを読めるようになるとか
AngBandなどオープンソースの奴を頑張って読む。
その後は、何か2週間で作れるゲームを自力で作る(設計も自分でする)。
ここまで、できれば、あとはだいたいどんなRPGでも時間や物理的障害を除いて出来るようになると思うよ。


767:名前は開発中のものです。
07/04/12 17:50:34 bCgTq/qC.net
盛りage

768:名前は開発中のものです。
07/04/12 18:43:46 MaYb13RL.net
>>764
作りたいゲーム作れば?

769:名前は開発中のものです。
07/11/21 16:03:51 74vDcPF7.net
>>764
ピアノと一緒で、練習曲を色々やるべき。
大曲を練習してもうまくならない。

770:名前は開発中のものです。
07/11/26 14:03:23 uhzP5Hxh.net
ドミノ10万個を見ても圧倒されない精神力

771:名前は開発中のものです。
08/04/25 07:51:24 CbC63WhO.net


772:名前は開発中のものです。
08/06/04 20:15:51 xVETCOHb.net
新しい gamedeve一応かきかき
TopPage - game-develop.com wiki
URLリンク(wiki.game-develop.com)
GameDevWikiを何とかするスレ
スレリンク(gamedev板)

773:名前は開発中のものです。
08/10/04 03:04:33 6CC7noIJ.net
world


774:名前は開発中のものです。
08/11/10 13:58:56 CM/VVTpv.net
めんどいから紙芝居から練習するよ

775:名前は開発中のものです。
09/03/04 08:57:47 BIR8YGwO.net
RPGを作る前にミニゲームなどを作れるようにしたほうがいいよ。
ミニゲームで作った技術はRPGで応用できると思う
いきなり、 大作を作ろうとしても無理

776:名前は開発中のものです。
09/03/04 09:02:17 WGe6HWau.net
その通りではあるが
こんな過疎スレで言わんでも

777:名前は開発中のものです。
09/04/08 14:56:30 3KQiReEr.net
過疎ってるなー。


778:名前は開発中のものです。
09/07/02 02:09:35 TZX2GARh.net
とりあえず完成形が何かというを考え直した方がいいとレナは思うの

779:名前は開発中のものです。
10/08/04 16:06:44 uZVXPzys.net
>>107 のサイトにあったマップエディタって誰か持ってない?
うっかり消してしまったから誰かうp頼む

780:名前は開発中のものです。
10/09/13 20:52:54 M+I9V0GA.net
旧態依然としたコマンド&ターン戦闘が激しくつまらないと思う今日この頃


781:名前は開発中のものです。
10/10/14 12:24:18 /y1Wbqlm.net
JavaScriptでも作れそう?
URLリンク(www.programmingmat.jp)


782:名前は開発中のものです。
10/10/23 15:44:45 A2QO4U5x.net
>>781
HTML5の威力はこっちのが判りやすいよ
URLリンク(www.publickey1.jp)

783:名前は開発中のものです。
11/01/21 23:01:50 MHt2IGM0.net
その通りではあるが
こんな過疎スレで言わんでも

784:名前は開発中のものです。
11/03/09 22:15:31.71 hobFeZxC.net
このスレもらっていいかな?
C++とDirectXでRPGを作りたいんだが
誰か一から作り方を教えてくれる奇特な人はいる?

785:名前は開発中のものです。
11/03/09 23:09:17.54 gadIXpQZ.net
>>784
一緒に考えるくらいでよければ協力しますよ。

786:名前は開発中のものです。
11/03/09 23:38:44.90 hobFeZxC.net
>>785
おお、ありがたいです
とりあえずDirectXの知識とか皆無なので
ドラクエ1-4程度の2DRPGを作ってみようと思う
ゲーム性とか関係なく、コンパクトな物を完成させることを目標に

787:名前は開発中のものです。
11/03/10 00:15:24.30 zj8b7q7C.net
>>786
まったく一からと仮定して下記を試してみてください。
#include <windows.h>
#include <stdio.h>
class WINDOW {
public:
WINDOW();
};
WINDOW window;
WINDOW::WINDOW(){
AllocConsole();
freopen( "CONOUT$", "w", stdout );
freopen( "CONIN$", "r", stdin );
}
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
printf( "hello world\n" );
do {
;
} while ( 1 );
return 0;
}

788:名前は開発中のものです。
11/03/10 00:23:55.03 zj8b7q7C.net
(787続き)
いろんなアプローチがあるかと思うのでいろんな意見を参考にされるとよいと思います。
わたしはまずはprintfから作るオールドタイプです。
あと、DirectXはver9しか知らないです。
VisualC++は使ったことないのでまったくわからないです。


789:名前は開発中のものです。
11/03/10 00:26:00.17 LV/Xv7hB.net
>>787
はい、試しました

790:名前は開発中のものです。
11/03/10 00:29:26.99 LV/Xv7hB.net
>>788
DirectXは9.0cで作ろうと思っているので、ちょうど良いです
自分はもっとオールドタイプですね
MSXの頃にプログラムしてたので、Windows環境はさっぱりです
まあVC++が吐き出すWin32APIの雛形くらいは理解できますが

791:名前は開発中のものです。
11/03/10 00:36:07.62 zj8b7q7C.net
次はとりあえずWindowを作成してしまいましょう。
WINDOWクラスに下記のメンバーを追加してください。
private:
HWND handle;
MSG message;
bool sync;
struct {
unsigned int X,Y,W,H;
unsigned int x,y,w,h;
} screen;
変数名とか関数名は自分のポリシーにあわせて変更してください。

792:名前は開発中のものです。
11/03/10 00:49:20.74 zj8b7q7C.net
メンバー関数を作成します。
public:
bool open( void );
ゲームの名称が決まっているならプロジェクト名をつけておくと愛着が湧きますよ。
#ifndef PROJECT
#define PROJECT "お好きな名前"
#endif
そろそろファイルを.hと.cppに分割したほうがよいかも知れません。

793:名前は開発中のものです。
11/03/10 00:51:12.61 zj8b7q7C.net

bool WINDOW::open( void ){
HINSTANCE hi = GetModuleHandle( NULL );
WNDCLASSEX wc;
wc.cbSize = sizeof( wc );
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = Proc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hi;
wc.hIcon = ( HICON )LoadImage( NULL,IDI_APPLICATION,IMAGE_ICON, 0,0,LR_DEFAULTSIZE|LR_SHARED );
wc.hIconSm = wc.hIcon;
wc.hCursor = ( HCURSOR )LoadImage( NULL,IDC_ARROW, IMAGE_CURSOR,0,0,LR_DEFAULTSIZE|LR_SHARED );
wc.hbrBackground= ( HBRUSH )GetStockObject( BLACK_BRUSH );
wc.lpszMenuName = NULL;
wc.lpszClassName= _T( PROJECT );


794:名前は開発中のものです。
11/03/10 00:52:43.01 LV/Xv7hB.net
>>791-792
できました
ちなみにどんな環境でコンパイルしてるんですか?
自分はVisual C++ Express 2010でやってます

795:名前は開発中のものです。
11/03/10 00:55:08.70 zj8b7q7C.net
RegisterClassEx( &wc );
handle = CreateWindow(wc.lpszClassName,
wc.lpszClassName,
WS_OVERLAPPEDWINDOW,
screen.X = screen.x = ( GetSystemMetrics( SM_CXSCREEN ) - SCREEN_W )/ 2,
screen.Y = screen.y = ( GetSystemMetrics( SM_CYSCREEN ) - SCREEN_H )/ 2,
screen.W = screen.w = SCREEN_W + GetSystemMetrics( SM_CXFRAME ) * 2,
screen.H = screen.h = SCREEN_H + GetSystemMetrics( SM_CYFRAME ) * 2 + GetSystemMetrics( SM_CYCAPTION ),
NULL,NULL,hi,NULL);
ShowWindow( handle, SW_SHOW );
UpdateWindow( handle );
return true;
}
これでコンパイルしてみてください。
"Procという関数がないよ"でエラーになります。

796:名前は開発中のものです。
11/03/10 00:57:21.06 LV/Xv7hB.net
>>795
そこまで出来ました
ProcとSCREEN_WとSCREEN_Hが定義されていないので
エラーになりますね

797:名前は開発中のものです。
11/03/10 00:59:49.27 n38lezle.net
windows.hのインクルード前に
#define WIN32_LEAN_AND_MEAN
を入れておくとコンパイルが早くなったりとか
_WIN32_WINNTを定義しておかないと勝手にVistaとか7専用にされたりとか

798:名前は開発中のものです。
11/03/10 01:00:15.45 zj8b7q7C.net
>>794
MinGW g++というコンパイラです。VCのような統合環境が苦手なんです。
静的メンバー関数としてProcを追加してください。
private:
static LRESULT CALLBACK Proc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp );
LRESULT CALLBACK WINDOW::Proc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ){
switch ( msg ) {
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, msg, wp, lp );
}


799:名前は開発中のものです。
11/03/10 01:04:37.18 zj8b7q7C.net
>>796
スクリーン用の定数定義を忘れていました。
WINDOWクラスに下記の定義を追加してください。
private:
enum {
SCREEN_W = 800,
SCREEN_H = 600,
};
数値はお好みで変更ください。
ファイルや環境変数で外部から取り込む方法もあるかと思いますが、
面倒くさいんでやってないです。最後の方で対応すればよいかと。

800:名前は開発中のものです。
11/03/10 01:14:43.71 LV/Xv7hB.net
>>798-799
できました
LRESULT CALLBACK WINDOW::Proc~の行で
同じパラメーターの型で静的な、または動的なメンバー関数をオーバーロードできません。
とのエラー


801:名前は開発中のものです。
11/03/10 01:21:28.74 zj8b7q7C.net
>>800
すいません原因よくわからないです。
ProcをWINDOWクラスのメンバーから外して、単なる外部関数にしてみてください。


802:名前は開発中のものです。
11/03/10 01:25:17.77 LV/Xv7hB.net
>>801
できました

803:名前は開発中のものです。
11/03/10 01:30:45.13 zj8b7q7C.net
>>802
そうですか。。。コンパイラの差異かも知れないです。
先々、この手の差異でどうにもわからない場合は、
申し訳ないですが自己解決か他に助言を求めてください。
下記の2つのメンバー関数を追加してください。
private:
bool peek( void ); //ウィンドウのメッセージを処理します
bool sync( void ); //タイマーの同期を取ります


804:名前は開発中のものです。
11/03/10 01:36:52.24 LV/Xv7hB.net
>>803
syncが再定義でエラーになりますね
以前にbool変数として定義されていますが

805:名前は開発中のものです。
11/03/10 01:39:12.81 zj8b7q7C.net
最終的に作成した3つのメンバー関数はWinMaiに以下のように組み込みます。
window.open();
do {
GameSystemInit();
while ( window.peek() ) {
if ( !window.sync() ) { continue; }
if ( !GameSystemMain()) { break; }
}
GameSystemFree();
} while ( window.sync() );
↓これらがゲームっぽいプログラムを入れるところです。
bool GameSystemInit( void ){ return true; }
bool GameSystemMain( void ){ return true; }
bool GamaSystemFree( void ){ return true; }
とりあえず空関数を適当に作成しておきます。

806:名前は開発中のものです。
11/03/10 01:41:06.36 zj8b7q7C.net
>>804
あまり自分の色が出ないように自分のソースからそのまま名前を持ってこないようにしています。
すいませんが適宜お好みの命名規則で回避してください。

807:名前は開発中のものです。
11/03/10 01:47:57.19 zj8b7q7C.net
(806続き)
混乱するので、以降はそのまま持ってくるようにします。
sync変数と関数は下記になります。
private:
bool sync;
public:
bool Sync( void ) const { return sync; }


808:名前は開発中のものです。
11/03/10 01:51:46.72 LV/Xv7hB.net
>>807
そこまでできました
peekもpublicになりますか?
今のままだと静的関数なんでアクセスできないですけど

809:名前は開発中のものです。
11/03/10 01:53:56.05 zj8b7q7C.net
Peek関数の中でタイマーを処理しているので、WINDOWクラスに下記のメンバーを追加してください。
struct {
unsigned int old;
unsigned int now;
} time;
コンストラクターで初期化します。
WINDOW::WINDOW() {
timeBeginPeriod( 1 );
time.old = timeGetTime();
}
で、デストラクターで後始末します。
WINDOW::~WINDOW(){
timeEndPeriod( 1 );
}


810:名前は開発中のものです。
11/03/10 07:13:10.95 zj8b7q7C.net
>>808
Peekはpublicです。privateは間違いでした。
あと静的(static)ではないです。

811:名前は開発中のものです。
11/03/10 22:22:49.60 zj8b7q7C.net
Peekの実装です。これでWindowsが表示されると思います。
bool WINDOW::Peek( void ){
sync = false;
if ( PeekMessage( &message, NULL, 0, 0, PM_NOREMOVE ) ) {
switch ( GetMessage( &message, NULL, 0, 0 ) ) {
case 0:
case -1:
return false;
}
TranslateMessage( &message );
DispatchMessage( &message );
}
time.now = timeGetTime();
if ( time.now - time.old >= 1000/60 ) {
time.old = time.now;
sync = true;
}
return true;
}


812:名前は開発中のものです。
11/03/11 00:55:58.78 jGNSe99R.net
>>811
Window表示できました

813:名前は開発中のものです。
11/03/11 07:34:09.43 tT3vlqKS.net
>>812
VC++上でのデバッガー実行はよくわからないんで自前でやっていただくとして、
先々、デバッグ目的で何かを表示するのに、よくprintfとMessageBoxを使ったりします。
これらに加えて、Windows上で表示されるフォントがあると便利なので、
デバッグ用にSpriteによる文字表示を作成するのがよいかと思います。
SpriteはDirectXの機能を使います。

814:名前は開発中のものです。
11/03/11 11:57:07.06 cb9oR2jl.net
#include <windows.h>
OutputDebugStringA("これはデバッグ出力\n");

815:名前は開発中のものです。
11/03/19 10:31:39.54 zpjTizC+.net
皆様お元気でしょうか
ちょっとゴタゴタしてましたが、再開です
>>813
スプライトによる文字表示がよく分からなかったので
とりあえずDrawTextで文字列表示できました
まあ、とりあえずデバッグ用としてこれでいいかなと
>>814
VisualStudioだとそれでコンソール出力できるみたいですね
参考にします

816:名前は開発中のものです。
11/03/19 10:35:30.95 zpjTizC+.net
それにしても、意外とDirectX9の解説サイト少ないですね
8以前だと結構あるんですが
特にプログラマブルシェーダーに対応したサイトは少ない
固定機能パイプラインとかもう廃止なので使いたくないし
DirectXの知識は全くないので、情報が無いとなかなか進まない

817:名前は開発中のものです。
11/03/19 10:41:37.55 zpjTizC+.net
マップチップとかって、どうやって読み込むんだろう
RPGツクールVXなどを見てみると、マップチップ数に制限が無い
仮に32*32ドットのマップチップ数が65536個だとすると
RPGツクール仕様だと、横8個分のチップを縦方向に無限なので
256*262144ドットの巨大テクスチャとして読み込むのだろうか
こんな巨大なテクスチャ作れるのかな?

818:名前は開発中のものです。
11/03/19 11:54:43.83 tf/j5S+W.net
俺なら複数枚のテクスチャを切り替えて表示するかな >817
1枚目のテクスチャにあるチップを描画して、SetTextureで切り替えて2枚目とか
どんな方法がベストなのかは知らないけど

819:名前は開発中のものです。
11/03/19 12:16:09.47 zpjTizC+.net
>>818
なるほど、やはり適当な大きさに分割するのが良いんですね
昔のゲームなら全部VRAMに読み込んでコピーとか普通だったけど
今のゲームの規模ならそれはないですね

820:名前は開発中のものです。
11/03/21 11:39:21.38 t1zoR9O5.net
ここ数日DirectXの情報サイトばかり見ているけど
リソースの解放とか凄い面倒そうだ
ある程度フレームワーク化しなきゃ駄目なのかな
HLSLとかもさっぱりだし、先はかなり長そうだ・・・

821:名前は開発中のものです。
11/03/21 11:47:38.69 KbfIo3Ze.net
楽をしたいならOgreとかirrlichtとかDXLibとか高レベルライブラリを使うべき
Directxばかりに固執するといいことは何も無い
それに良いフレームワークに触れない限り、
自分でフレームワークを組み立てることなどできないしな

822:785
11/03/23 21:00:30.42 NMGIfDjO.net
Window表示が出来たなら、次は入力回りを整備するのがよいかと思います。
DirectInputでよいですかね?(他はわからないです)

823:名前は開発中のものです。
11/03/23 21:36:41.78 iioYpWXA.net
>>822
はい、お願いします
DirectInputはまだ未着手なので勉強しておきます

824:名前は開発中のものです。
11/03/23 21:40:39.44 iioYpWXA.net
>>821
ゲーム自体をすぐに作りたいというよりは
DirectXと最近のゲームの作り方を勉強したいので
Win32API+DirectXでやっていきたいと思います
DXライブラリは便利そうですね、いずれこういうライブラリも作りたいです

825:785
11/03/23 22:48:06.18 NMGIfDjO.net
>>823
入力関連をまとめるクラスを作成しましょう。
クラス名(XXXXX)はお好みで変えてください。
class XXXXX {
public:
static bool Init( void ); // 初期化処理を記述する関数
static bool Main( void ); // 毎ループ呼び出される関数
static bool Free( void ); // 終了時処理を記述する関数
};
bool XXXXX::Init( void ){ return true; }
bool XXXXX::Free( void ){ return true; }
bool XXXXX::Main( void ){ return true; }
上記の関数はそれぞれ前述(>>805)のGameSystem系の対応する関数内で呼び出します。
InitとFreeの中身は対称(確保⇔解放)になる事が多いです。
また、Mainはどうしても記述量が多くなります。
なので、Init/Free/Mainの順に記載するとソースの見通しがよくなります。

826:名前は開発中のものです。
11/03/24 12:02:48.79 +jtjlJX2.net
入力関連なんてゲーム内で一つあればいいんだからグローバル関数でもなんでもいいよ

827:名前は開発中のものです。
11/03/24 17:44:17.05 7A5Wm0Sp.net
全部staticにするくらいなら潔くグローバル関数でいいな
シングルトンでもいいが

828:名前は開発中のものです。
11/03/25 00:33:52.87 DZniurx+.net
>>825
そこまで出来ました。
>>826-827
グローバル関数にすると、管理が面倒になりませんか?
フレームワークとかライブラリみたいな形にする時にも
メンバ関数の形の方が良いような気がしますが

829:名前は開発中のものです。
11/03/25 00:49:34.24 VJVVC59h.net
>>828
そりゃルート名前空間に直置きは最悪だが
名前空間でくくればまったく面倒ではない
むしろすべてクラスクラスと固執する思考はよくないと思われ

830:名前は開発中のものです。
11/03/25 00:51:14.65 VJVVC59h.net
とはいってもまあデザパタ使っていいならシングルトンでも使えばおk

831: ◆MBbNHCnf2M
11/03/25 01:00:08.60 DZniurx+.net
とりあえずトリップを付けてみる
>>829
C++で名前空間とか使ったこと無かったです
>>830
シングルトンってデザインパターンですか
そういうの考えてプログラム作ったこと無かったなぁ
ああ、でもMVCでObserverパターンだけ知ってたかも

832: ◆MBbNHCnf2M
11/03/25 01:03:33.95 DZniurx+.net
ところで、すごく基本的な質問ですけど
staticなメンバ関数だと何が問題なんでしょう?
特に駄目だという理由が思い付かないんですけど

833:名前は開発中のものです。
11/03/25 02:00:59.85 t5g0UlGF.net
C++ でシングルトンなんか持ち出すくらいなら素直にグローバル変数にしといたほうがよくないか?

834: ◆UUwiUCL1P6
11/03/25 08:07:59.07 iNPazjrA.net
>>828
私もゲームの作り方を勉強したいと思って、
DirectXをつい最近やり始めたという状況で、
自分のやった事を再確認的にお伝えするのが限界です。
いづれ追いつかれて飽和すると思いますので、
より抽象的な概念や高度な作法はいろいろな意見を参考にしてください。
ちなみにXXXXXの部分は何と命名しました?

835: ◆MBbNHCnf2M
11/03/25 11:19:22.92 DZniurx+.net
>>834
クラス名は GameInput としておきました

836:名前は開発中のものです。
11/03/25 17:44:09.60 VJVVC59h.net
最初からデザイン云々いいだしても進まないから、
とりあえず動くことを目的としてけばええと思う
動き始めてからいくらでもデザインは改良できるし。
最初は処理の手順を覚えるのが先、
アルゴリズムの訓練をするのが先決

837: ◆UUwiUCL1P6
11/03/26 10:36:17.74 pvmCllah.net
必要な変数(静的メンバ)を設定します。
.h
public:
enum { JOY1,JOY2,JOYMAX,};
private:
static IDirectInput8* input;
static IDirectInputDevice8* keyboard;
static IDirectInputDevice8* mouse;
static IDirectInputDevice8* joypad[];
static unsigned int joycnt;
.cpp
namespace {
IDirectInput8* GameInput::input;
IDirectInputDevice8* GameInput::keyboard;
IDirectInputDevice8* GameInput::mouse;
IDirectInputDevice8* GameInput::joypad[JOYMAX];
unsigned int GameInput::joycnt;
}

838: ◆UUwiUCL1P6
11/03/26 11:18:46.58 pvmCllah.net
DirectInputの初期化です。
GameInput::Init
input = NULL;
DirectInput8Create( GetModuleHandle( NULL ), DIRECTINPUT_VERSION, IID_IDirectInput8, reinterpret_cast< void** >( &input ), NULL );
GameInput::Free
if ( input ) {
input->Release();
input = NULL;
}
>>837
.hに#include <dinput.h>が必要でした。

839:名前は開発中のものです。
11/03/26 11:36:25.84 oFPuFWap.net
デザインとか気にするんだったら、まずはDirectInputデバイスを晒すのをやめるべき。
入力を取得する関数かクラスを作って、直接デバイスにアクセスするのはその中だけに制限する。

840: ◆MBbNHCnf2M
11/03/26 13:03:14.90 npmu6kKT.net
>>837
.cpp(GameInput.cppとしている)のnamespace内の定義は
現在のスコープでは定義できませんとなります

841: ◆UUwiUCL1P6
11/03/26 14:20:22.37 pvmCllah.net
>>840
では、namespace{}での括りは外してしまってください。


842: ◆UUwiUCL1P6
11/03/26 14:22:30.73 pvmCllah.net
keyboardの初期化です。
GameInput::Init
input->CreateDevice( GUID_SysKeyboard, &keyboard, NULL );
keyboard->SetDataFormat( &c_dfDIKeyboard );
keyboard->SetCooperativeLevel( Window.Handle(), DISCL_FOREGROUND|DISCL_NONEXCLUSIVE );
{
DIPROPDWORD dipd = {};
dipd.diph.dwSize = sizeof( DIPROPDWORD );
dipd.diph.dwHeaderSize = sizeof( DIPROPHEADER );
dipd.diph.dwObj = 0;
dipd.diph.dwHow = DIPH_DEVICE;
dipd.dwData = 8;
keyboard->SetProperty( DIPROP_BUFFERSIZE, &dipd.diph );
}
keyboard->Acquire();
GameInput::Free
if ( keyboard ) {
keyboard->Unacquire();
keyboard = NULL;
}

843: ◆MBbNHCnf2M
11/03/26 14:36:20.30 npmu6kKT.net
>>842
SetCooperativeLevelの引数、Window.Handle()って
Handleって関数作ってないみたいです

844: ◆UUwiUCL1P6
11/03/26 14:40:47.38 pvmCllah.net
WINDOWクラスに下記の関数を作成してください。
public:
const HWND Handle( void ) const { return handle; }
>>842
GameInput::Init
keyboard = NULL // ねんのため追加してください
input->CreateDevice( GUID_SysKeyboard, ...
GameInput::Free:
解放の順番は初期化と反対にしてください。
input初期化->keyboard初期化 ~ keyboard解放→input解放


845: ◆MBbNHCnf2M
11/03/26 15:28:08.48 npmu6kKT.net
変数のスコープとかよく分からなくなってきた・・・
Window.Handle()のWindowって、最初の方で定義したWindow window;の
windowっていうインスタンスだと思うんですけど
GameInput::Initが書かれているファイルGameInput.cppからアクセスするには
インスタンスを渡すしかないと思うんですけど
そこの処理はまだ書いてませんよね?
あれ、それともなんか勘違いしてるかな

846:名前は開発中のものです。
11/03/26 16:01:06.60 QDwsR5XB.net
いいかげんスレ違い
RPGのロジックに入るまでブログでやれ

847:名前は開発中のものです。
11/03/26 16:35:54.83 ai5/F2yB.net
どうせ他に使うやついないのになにいっちゃってんの?アホなの?

848: ◆UUwiUCL1P6
11/03/26 16:40:45.61 pvmCllah.net
>>845
下記を宣言してください。
extern WINDOW window;
この先いろんなところで参照するので、ヘッダに記載した方がよいです。
(>>846)のような意見も出ていますし、ソースを断片的に記載していくのは効率や誤謬が出やすいので、
別の手段を検討したほうがよいかも知れません。
ブログかアップローダを指定いただければそちらでお渡ししますんで、
ご検討ください。


849: ◆UUwiUCL1P6
11/03/26 16:53:57.96 pvmCllah.net
extern WINDOW Window; でした(最初大文字)
ソース全体でこれだけはグローバル変数にしています。
他の変数はクラスの静的メンバでprivateにしています(IDirectInput8* input等)。
ここに書いてやり取りするのは楽でいいんですけど先々難しそうですね。
スレッドのリサイクル法が適用されて日記帳扱いになればOKかも。

850: ◆MBbNHCnf2M
11/03/26 17:11:30.81 npmu6kKT.net
>>846
>>1の書き込みとスレッドの中身を見る限り、このレベルからやっても
良いように感じましたが・・・
>>1さんもC++のプログラミングは初めてって書いてますし
>>848
確かにこのままソース書いていくのは難しいと感じてました
どんどん大きくなっていきますからね
とりあえず
URLリンク(gmdev.xrea.jp)
このアップローダが、この板でプログラムを作っている方々が
使用しているアップローダのようです
今後はここにソース置きましょうか
>>849
common.hみたいなヘッダを作成して
#include "WINDOW.h"
extern Window window;
として
WINDOWクラスにアクセスする必要があるクラス全部に
インクルードしたら良いんですね

851: ◆UUwiUCL1P6
11/03/26 18:14:33.03 pvmCllah.net
>>850
gmdevにDirectInputの.h/.cppを置きました。
URLリンク(gmdev.xrea.jp)
>common.hみたいなヘッダ
そうです。自分専用のマクロとか定義とかの置き場にヘッダ作りますよね。
そこに入れておいてください。
ついでに↓もお願いします。
#define ARRAY(a) (sizeof(a)/sizeof(a[0]))
配列の要素数のマクロです。

置いたソースですが現在の自分のソースからいろいろはしょって整形しているので、
部分的に文法がおかしくなったりで、エラーがでるかも知れません。
それはすいませんがうまく直してください。


852: ◆MBbNHCnf2M
11/03/26 18:47:47.52 npmu6kKT.net
>>851
すごく見やすいソースですね、大体の感じは理解出来ました
GameInput.cppのunsigned int GameInput::index;で
静的でないメンバーはクラスの外側で定義できませんと出たので
ヘッダの宣言でstatic付けときましたけど、staticにして大丈夫ですか?
それと、DATA_MAXが未定義だったので、適当に#define DATA_MAX 256
と、とりあえずしておきました
以上でコンパイルできました
これからじっくりとソース見ていきたいと思います

853: ◆MBbNHCnf2M
11/03/26 18:59:27.28 npmu6kKT.net
今ソース眺めてたら
enum { DATAMAX = 0x100, };ってあるけど
これがDATA_MAXかな?

854: ◆UUwiUCL1P6
11/03/26 19:15:55.16 pvmCllah.net
>>852
index は static です。付け忘れました。
>>853
DATA_MAXです。記述ミス。
入力ワーク回りで間違い多いのは、現在その部分は環状リストで可変長で実装しているので、
急ごしらえで変更したためです。
一部、ヘッダにあって実装されていない関数(JoyPush等)は実際にゲーム中で使用する関数です。
これはGameInput.cppとは別ファイルにした方がよいです。
GameInput.cppはいったん完了するとほとんどいじらなくなります。
ライブラリィ化してもいいかも知れません。

855:名前は開発中のものです。
11/03/27 19:06:12.75 7F6awSJl.net
>>825
> InitとFreeの中身は対称(確保⇔解放)になる事が多いです。
なんでコンストラクタとデストラクタ使わないの?

856: ◆UUwiUCL1P6
11/03/27 22:08:40.18 In3d1Uaw.net
>>855
インスタンスを作成しないからです。メンバーは変数も関数もstaticだけです。
インスタンスを作成できないように、privateでコンストラクタを記述しておくべきですね。


857: ◆MBbNHCnf2M
11/03/27 22:25:46.92 rtEoqdWq.net
ここ二日でDirectInputについては大体理解できた気がする
今頃気が付いたけど、DirectInputって今後非推奨なのか

858:名前は開発中のものです。
11/03/27 22:49:20.93 7F6awSJl.net
>>856
いや、だからインスタンスを生成しないのはなんで?って話だったんだけど。
まぁプログラム中で1回だけしかやらないなら、 Init()/Free() 呼び忘れや2重呼び出しも
そうそう起こらないだろうから、コンストラクタやデストラクタ使ってもそんなにおいしくないの
かもね。

859: ◆UUwiUCL1P6
11/03/27 22:58:33.14 In3d1Uaw.net
>>858
Cで作り始めてからC++にしたのでグローバル関数が自分的にしっくりきたという理由です。
合理的な理由はとくになく、個人の好みの範疇を出ないです。

>>857
続きをおきました。
URLリンク(gmdev.xrea.jp)
ゲーム中で使う関数の使い方さえ変えなければ、実装はDirectInputでなくともよいかと思います。


860:名前は開発中のものです。
11/03/27 23:12:17.94 BpzKp4Cl.net
「趣味の範疇」なら何回もつっこまれないと思うけどなぁ
自分も「えー」って思ったし

861: ◆UUwiUCL1P6
11/03/27 23:39:29.93 In3d1Uaw.net
>>860
クラスのないCで作ってから、あとでclass{}で括るとこんな感じになりますよ。
そこからC++ならではの形に作り変えるまでに至らずというところです。
>◆MBbNHCnf2Mさん
この先こんな感じで趣味っぽいところが満載なので自分流に変更するなり、
他の意見を参考いただくなりで、そこは適当にやってください。
ウィンドウ表示⇒コントローラ入力と来たので、次は描画&ファイル読み込みですが、
ここから私としてはタスクシステムをご提案になります。
すごーく突っ込みが入るテーマのようなんで少々気が重いです。

862:名前は開発中のものです。
11/03/28 00:17:25.15 Dt+tXZ6j.net
>>861
わかってるならやめとけばいいのに。どうせ必要性もないんだろ?
やるなら自分でわかってる範囲の突っ込み所と、それでも敢えて押し通す意義(必要性)を
最初にひととおり明示しておけば、繰り返しツッコミが入ってグダグダになるのは避けられる、
かもしれない。

863:名前は開発中のものです。
11/03/28 00:29:53.10 iY/f3p70.net
RPGの描画や更新なんてすることもタイミングも決まりきってるのにタスクシステムなんか何に使うんだよw
上の人も言ってるけど、まずどういうものを作ろうとしててそのためにこういう技術が必要だというのを
はっきりさせてくれ

864: ◆MBbNHCnf2M
11/03/28 00:30:16.73 +ECkFPgj.net
>>861
自分的には分かりやすいので、全然問題ないです
まあ、細かい実装はそれぞれのやり方があるでしょうからね
私なんかCにしてもC++にしても言語仕様も十分に理解しないまま
やってるので、基本的に何でも参考になります
本当はちゃんと勉強した方が良いんでしょうけど
タスクシステムは、確かにこの板のスレ見ると荒れてますね
そもそも、タスクシステムの定義自体が曖昧というか
人によって微妙に違う感じですね
タスクシステムは一度勉強してみたかったので、ちょうど良かったです

865: ◆MBbNHCnf2M
11/03/29 22:24:52.26 o6OtSixI.net
どうやら風邪をひいてしまったようで、喉が痛い
ところで話は今までの流れと急に変わりますけど
今時のRPGってアイテムのデータはどのように持ってるんだろう
昔なら、アイテム番号だけを持ってて(ゲーム全体で256個までなら1バイト
65536個までなら2バイト)、その番号からアイテムデータを参照してたけれど
例えば、武器にランダム性があって、ショートソードに+1とかの強さの幅がある場合
アイテム番号1がショートソード、アイテム番号2がショートソード+1みたいな
のだと無駄にアイテムデータ増えるからあり得ないかな
昔だと、メモリも少ないし、データをセーブする媒体の容量も少ないから
アイテムのインデックスだけを持っていたけれど、今はデータ全体を
そのまま持っているのかな

866: ◆MBbNHCnf2M
11/03/29 22:28:15.54 o6OtSixI.net
多分、基本となるデータのみ存在していて、入手時にそのデータ元に
ランダムで性能を確定させて、そのデータを全部を持ってるのか

867:名前は開発中のものです。
11/03/29 23:19:08.33 W0uoKekZ.net
これだ!っていうデータ構造なんて無いんじゃないかな
ゲームごとにチューニングする必要があるわけで
パフォーマンスに余裕があればリレーショナルデータベースとか使っちゃうのかな

868:名前は開発中のものです。
11/03/30 00:26:46.80 jEpUZgct.net
アイテムのインスタンスに持たせた方がいいんじゃないかなぁ
手持ちの装備を強化できるようなシステムが追加したくなった場合とかやりやすいし

869:名前は開発中のものです。
11/03/30 01:14:37.31 fixmLHL7.net
>>865
仕様に沿って素直なコードを組むのが最強。
リソース制約が顔を出しにくくなった「今時」ならこれでいいでしょ。
"Premature optimization is the root of all evil."

870: ◆MBbNHCnf2M
11/03/30 20:18:14.12 eH7gPhm2.net
>>867-869
やっぱりデータが変化するようなものだと、インデックスだけで
管理は無理ですね。よく考えたら当たり前の事だった。
まあ、今ならアイテム程度のバイナリデータいくつ持ってても
問題無いか。携帯とかモバイル環境だと制限あるかもしれないけど
そんな環境だと、そもそもそれ程大規模のゲームも作らないだろうし。

871:名前は開発中のものです。
11/04/03 21:06:06.82 t0UP3s0y.net
しーん

872: ◆MBbNHCnf2M
11/04/03 21:10:34.12 wtGWHPRo.net
>>871
ちょうど今書こうと思ってた所です
今週は、風邪をひいてあまり集中して出来なかったので
とりあえず、ポリゴン出したりテクスチャ貼ったりというのは理解したと思う
これで音を出す以外の大体の事は何とかなるような気がする

873: ◆MBbNHCnf2M
11/04/03 21:17:09.28 wtGWHPRo.net
で、マップスクロールについて考えていたんですけど
URLリンク(d.hatena.ne.jp)
上記のサイトのRPGの項目にあるような、マップ全体を裏画面に描画して
そこから表示画面分だけ切り出すという方法が結構検索していると
見つかるのに驚いたわけです
これって結構スタンダードな方法なのかな?
いくらメモリを気にしなくてもいいPC環境とはいえ、マップ全体を描画って
あり得るのだろうか、少なくとも市販作品では無いような気がする

874: ◆MBbNHCnf2M
11/04/03 21:23:57.58 wtGWHPRo.net
昔はマップスクロールというと、RPG作成において一番の難所で
これが出来たらもうRPGは出来たも同然というような感じだった
特に私が使っていたMSXなんかだと、ハードウェアスクロール機能が
縦方向しかなかったので、1ドットスクロールは厳しかった
本当に最初の頃は、レイヤという概念も無くて(知らなかっただけかも)
そもそもレイヤをいくつも重ね合わせられるほどの処理速度もメモリも無かった

875:名前は開発中のものです。
11/04/03 21:27:16.75 /2gPwasz.net
昔とかどうでもいい話してないでDirectX使えよ。
無理ならDXライブラリでも使え

876: ◆MBbNHCnf2M
11/04/03 21:32:21.82 wtGWHPRo.net
そこで、どういう風にマップスクロールを実装していたかと言うと
裏画面に表示画面より、縦・横共にマップチップ1個分大きいマップを描画し
そこから1ドットずつずらしてコピーするという方法だった
ページフリッピングも出来ないわけではなかったけど、VRAM容量を考えると
そんなもったいない方法は許されなかった
今でも縦・横でマップチップ一個分だけの裏画面からコピーするのが
定番だと思っていたけれど、マップ全体からコピーするという方法が
多く見つかるというのは、そっちの方が定番のかな

877:名前は開発中のものです。
11/04/03 21:34:32.01 t0UP3s0y.net
>>873
256*256のマップだけで256MB消費ってのは普通じゃないと思う

878: ◆MBbNHCnf2M
11/04/03 22:04:18.84 wtGWHPRo.net
>>877
そうですか、やはり普通じゃないのか
説明しやすいからそうしているのが多いのかな
今考えている方法は
用意すべき画面
1. 表示画面分の表・裏のサーフェイス(DirectX初期標準)
2. 最終的に合成する画面、ここから1ドットずつすらして裏サーフェイスにコピー
(表示画面より縦・横1チップだけ大きい画面を確保)
3. レイヤを3つ使うとして、各レイヤ分の裏画面(これも表示画面より1チップ分だけ大きい)
4. マップチップ・キャラやNPC等のグラフィック
処理
1. まず、方向キーが押されたら、3の各レイヤ用の画面にマップ描画
2. 最下層のレイヤ分を2に画面にコピー
3. 最下層上にいるキャラクタ・NPCを2に描画
4. 2-3をレイヤ分処理
5. 2の画面から1の裏画面にコピーして裏画面を表に
6. 2-5までを1ドットずらして1チップ分処理
無駄がありそうだけれど、これでいけそうな気がする
でもテクスチャって座標指定でコピーできないから
1ドットずつコピーするのが難しそうな気が
もっとテクスチャについて勉強する必要がありそう

879:名前は開発中のものです。
11/04/03 22:06:51.98 /2gPwasz.net
あのさ?座標にマイナスを指定できるの知ってる?

880: ◆MBbNHCnf2M
11/04/03 22:36:46.84 wtGWHPRo.net
>>879
失礼、連続で5回以上書き込めないようで
テクスチャ座標に負の値が使えるのは知ってます
それをどこに使うんですか?
まだ勉強中なので教えてください

881:名前は開発中のものです。
11/04/03 23:07:20.50 mqRgK4Gz.net
あなたの文章を読んでいて思ったのだが。
まさか、一枚のテクスチャに複数のレイヤーを重ねて最終的に
画面に描画しようとしている?
DirectXのバージョンをいくつ使うか知らないけど
いくらなんでも概念が古すぎるよ。
(DirectDrawとか使おうとしてる?)
WindiwsXPターゲットのDirectX9ならポリゴンまたはスプライト使えば解決できることを
わざわざ難しい方法でやろうとしているように見える。
ここで説明するのは無理があるからいくつかサイトのURL貼っとく
DirectX8の解説サイト
URLリンク(rina.jpn.ph)
Microsoft本家のゲームプログラミング入門資料(数学の知識必須)
URLリンク(msdn.microsoft.com)
まさかとは思うがDirectX7ならこの辺り
URLリンク(rina.jpn.ph)
入門者ならDirectXと言わずDXライブラリを使うのもありだと思う。
DXライブラリを使った解説サイト
URLリンク(dixq.net)
あと、ネットの情報は色々不足な部分や整理されていないから
一冊、入門書を買うことをお勧めする。


882:879
11/04/03 23:08:21.00 mqRgK4Gz.net
あれID変ったw

883: ◆MBbNHCnf2M
11/04/03 23:49:00.27 wtGWHPRo.net
全然連続で書き込めない、この板人が少な過ぎるのか・・・

>>881
DirectX 9.0c でやろうと思ってます
つまり、DirectDrawでなくて、DirectX Graphicsですね
そのサイトも読んだんですけど、多分ポリゴンにテクスチャに貼り付けて
2Dの処理をするのがよく理解できてないんですね
特にテクスチャの扱いが多分よく分かってないので、勉強しときます
ポリゴンに単純にテクスチャ貼るところまでは理解できてる(と思う)んですが

884:名前は開発中のものです。
11/04/04 00:57:26.26 EfnOmkqq.net
だったら素直にD3DXのSprite使えばいいよ
表示範囲内のタイルを毎フレーム全て描画しなおせばいいだけ
一見効率悪そうだけど>>878よりは遥かに効率が良い

885:名前は開発中のものです。
11/04/04 01:16:24.28 EfnOmkqq.net
一つのレイヤ内で使われるタイルを一つの大きなテクスチャにまとめておいて
レイヤ全体を一つの図形とみなしてテクスチャ座標でマッピングするのが
多分一番速くて効率の良い方法
スプライトはそれと同じようなことを自動でやってくれるから
毎フレーム大量の描画を行ってもわりと速い

886:名前は開発中のものです。
11/04/23 16:35:48.28 CvPk8hGJ.net
ゲーム制作メンバーを募集しています。
スレリンク(ff板)l50
URLリンク(www31.atwiki.jp)
・最近のFFが嫌い
・昔のFFが好き
どちらかに当てはまれば誰でも結構です。
昔ながらのFFをみんなで作りましょう。


887:名前は開発中のものです。
11/04/28 16:06:00.10 odTXZLNY.net
募集要項の大雑把さにフイタ

888: 忍法帖【Lv=18,xxxPT】
11/05/05 11:29:11.77 Zs6VE70C.net
うん?

889:名前は開発中のものです。
11/07/08 21:16:59.44 nxuNDnA1.net
マップ画面から事ある事に戦闘画面に行くよくあるRPGを作ろうと思うんだけど、
戦闘画面を呼び出すのはマップ画面の中で関数呼び出す感じにするもんなの?
それともデータ保存してマップ画面終了してから戦闘画面に行くもんなの?
作る時は前者が楽だけど、メモリがちょっと心配。

890:名前は開発中のものです。
11/07/08 21:29:25.17 TDxk0CvB.net
メッセージループ内でシーン分岐

891:名前は開発中のものです。
11/07/08 21:34:45.63 nxuNDnA1.net
ああ、やっぱそれか……ありがとう。

892:名前は開発中のものです。
11/07/13 17:30:26.96 7GbeQNs3.net
> それともデータ保存してマップ画面終了してから戦闘画面に行くもんなの?
毎回状態を記憶した一時セーブデータみたいなの書き出して読み込んで、
オブジェクトの生成と破棄とリソースの読み込みと開放してまた再現するって事?
その処理を作ってテストするのが大変そうだなぁ…
所謂普通のセーブデータと共用できればマシそうだけど…
仕様にもよるけど、マップ画面でのbgmを元の位置から再生したい時とかも少し面倒だね。
イベントなんかの途中で戦闘が始まるようなのは復元するの大変そうだなぁ…
どんなゲームなのか判らないから一概には言えないけど、
メモリなんてせいぜい該当マップで利用する敵グラや音のリソースが+されるだけなんだし、
そこまで気にする程でも無いような。
昨今のPC事情で考えたらCPUやメモリの容量は異常だよね。
10万満たない簡素なPCでも凄い積んでる。
ところがHDアクセスはまだまだ遅いんだよね。
だから前者でいいんでね?
> 戦闘画面を呼び出すのはマップ画面の中で関数呼び出す感じにするもんなの?

> メッセージループ内でシーン分岐
要するにマップ画面に戦闘画面への遷移を固定化するコードを持たさないで部品化した方がいいよねって話かと。
方法はいろいろあって、FSM(有限オートマトン)やstateパターンでシーン単位で切り替えるのが有名だけど、
遷移を管理する側にごちゃごちゃさせたくないなら、マップと戦闘を保持したクラスを用意してやれば済む話だよね。
つーか別に仕様が完全固定化されてるなら戦闘からマップ直接呼んでもいいと思うよ。
あの手の技法なんて納期とか変更とかに厳しい世界の人たちが使ってる苦肉の策なんだしw
難しい事や汎用的な事は手段であって、それが目的化するよりはゲームが動くほうがいいよね。
それからこれも仕様によるけど、
所謂シーン単位での完全切り替えだとマップの上に戦闘を描くスタイルできないけどいいの?
あとエンカウントのアニメーションなんか必要な場合、マップ画面側にその処理だけが残るとかキモクない?

893:名前は開発中のものです。
11/07/14 16:32:39.19 0xB3ByY3.net
ふぅ…

894:名前は開発中のものです。
11/12/06 13:22:55.40 oDkZLgbY.net
あげ

895:名前は開発中のものです。
12/03/26 23:19:50.12 q+Fv8Yng.net
>>889
グラフィック関連はさすがに解放すると思う
でもドラクエみたいな2Dロープレなら何をどう作ってもメモリ不足なんてありえない
もう1つの質問の意図はマップ画面の下位に戦闘画面が来るか
それともマップ画面と戦闘画面を同じ立場において別途切り替える機構を作るかっていう問題だと思うけど
何らかのイベントやミニゲームなどで戦闘シーンを使う場合に上下関係が密接に関係してると
後で再利用しづらいのにで戦闘画面は独立させておいたほうがいいと思う。


896:名前は開発中のものです。
12/05/10 12:17:40.31 CvbrCj71.net
FFよりダンマスみたいなの作ってよ
いっとくけどMSX版の方じゃないよw

897:名前は開発中のものです。
12/08/23 21:04:32.49 8Fyjiw0F.net
MSXのダンジョンマスターをオンライン対応でリメイクして欲しいけど
スレ違いだし他力本願だねw

898:名前は開発中のものです。
12/09/07 19:10:16.76 M4WerZHY.net
あげ

899:名前は開発中のものです。
12/09/16 21:05:26.04 3z6vfuIt.net
ダンマスならRTC版じゃいかんのか?

900:あずにゃん ◆PaaSYgVvtw
12/11/29 18:47:56.93 T/exNI7l.net
c始めたばかりなのですが質問です。
tp//codepad.org/WsNDfYIs
これをビルドしたら実行結果が
a = 1
&a = 18ff44
*pa = 1
&pa = 18ff3c
b = 1
と表示されたんですが&aと&paが何故こう表示されるのか分かりません
16進数で表示される事は分かるんですが
printf("&pa = %04x\n",&pa); 
実行結果が18ff3c
これが特に分かりません^^;
数学的に考えるとpa=&a;でアドレスがaに代入されるからaの16進数表示に
ならないんですか?
仕組みはよく分からなくてどなたか教えて下さい。
まずは基礎から勉強してるので宜しくです。
まずはcからなのでc+はまだ先のことですが^^;
ゲ制作も遠い道のりです。。。

901:名前は開発中のものです。
12/11/29 19:15:49.60 f6gZcj+t.net
paのアドレスじゃん

902:名前は開発中のものです。
12/12/01 19:58:04.77 CrVsmJCK.net
>>900
codepad.org/qZh2vLXf

903:名前は開発中のものです。
12/12/01 20:18:25.61 CrVsmJCK.net
>>900
ごめん、やっぱこっちで
codepad.org/UB5JFPnU

904:名前は開発中のものです。
12/12/28 09:37:26.68 8KDAkRIs.net
ズルするならマップでエンカウント直前のスクリーンを保持しておいて、戦闘画面の背景にあてれば出来るね。
動くマップチップで戦闘中も動かしたいなら見えてる部分をきちんとしたデータで渡して戦闘シーンで再構築しないといけないけどたぶん難しくないか。
やっぱマップと戦闘だと載せるUI違うから分けた方が見やすくなるんじゃないかと思ってる。
背景がマップだと戦闘場面が戦闘UIという意識でマップにのっかってるって感覚が強くなりそうだから一緒に書くのが自然に思えなくもないけど、
ほかのシーンは分けてるのにマップと戦闘はくっついてるというのは汎用的ではないような気がする。
でも面倒になったら分けない。

905:名前は開発中のものです。
15/10/16 10:06:10.59 c5lx3m67.net
>>1は消息不明?
DXライブラリだけど
俺もアクション、シューティングと何作か作って来たので
そろそろRPG作ってみたいんだけど、
膨大になるゲーム中の台詞を合理的に管理する方法が思い付かないんだよね。
それが解決するなら重い腰あげられそうなんだけど。。

906:名前は開発中のものです。
15/10/23 21:15:34.15 yK+GV+yo.net
あえて一度ツクールなりウディタなり触ってみればいい

907:名前は開発中のものです。
17/01/31 20:51:48.28 D6yECHIX.net
age


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch