ページ 11

新ゲームプログラミングの館のd.5について

Posted: 2014年4月22日(火) 18:20
by leaf8429
初めまして,leaf8429と申します。

ゆめにっき派生(RPGツクール製のフリーゲーム「ゆめにっき」を模倣したファンゲームの事。以下派生)をツクールではなく
プログラミングで作りたいので少しづつですが勉強しようと思っております。(あくまで趣味ですので期限はありません。)

ゆめにっきおよび派生とは関係なく,ツクール製のRPGでは複数のNPCにあたるキャラクターがPCの動きとは別に移動しているのですが,
その処理をどうしたら実装できるかがよくわかりません。
複数のオブジェクトを処理するプログラムが資料d.5にありますが,それをそのまま使うと
すべてのオブジェクトがプレイヤーのキー操作によって同じように動いてしまいます。

恐らく資料d.5内のプログラムでは二つのオブジェクトの移動処理に同じ関数を用いる為にすべてのオブジェクトがプレイヤーに支配されるのであって,
それをバラバラに動かすためには資料内のplayer.hの

コード:

// 初期化をする
void Player_Initialize( Player_t *Player, int y );

// 動きを計算する
void Player_Update( Player_t *Player );
を,

コード:

// 初期化をする
void Player_Initialize( PC *pc, int y );
void NoPlayer_initialize(NPC *npc,int x,int y);    //構造体PC,NPC,および*pc,*npcは別の場所で定義
// 動きを計算する
void Player_Update( PC *pc );
void NoPlayer_Update(NPC *npc);
の様にまずはPCとNPCの初期化と計算の処理を分けたうえで,構造体PCおよびNPCでPCの初期位置及びNPCの移動の仕方と初期位置を定義して,
Player.cpp,Player.h,Main.cppのを適宜改変すればよいのでしょうか?
また,NPCの定義はプログラム内で行うのと,csvファイルで定義して読み込みのとではどちらが良いのでしょうか?

複数のNPCとPCがバラバラに移動する処理を作れるようになってから作成に乗り出したいと思っておりますので,ご回答及びアドバイスを
頂けると有難いです。

Re: 新ゲームプログラミングの館のd.5について

Posted: 2014年4月22日(火) 18:31
by Dixq (管理人)
> の様にまずはPCとNPCの初期化と計算の処理を分けたうえで,構造体PCおよびNPCでPCの初期位置及びNPCの移動の仕方と初期位置を定義して,
> Player.cpp,Player.h,Main.cppのを適宜改変すればよいのでしょうか?

まず、NoPlayer.hとNoPlayer.cppを作るべきです。
一つのファイルに
モジュール名_Initialize
モジュール名_UPdate
モジュール名_Draw
モジュール名_Finalize
の4つが一組になっていると思ってください。
一つのファイルに
void Player_Initialize( PC *pc, int y );
void NoPlayer_initialize(NPC *npc,int x,int y); //構造体PC,NPC,および*pc,*npcは別の場所で定義
のように複数のInitializeが混在することはありません。

NPCがバラバラの動きをするには、Initializeで初期値をバラバラにし、
Updateでバラバラの動きを実装すればOKです。

ただ、作りとしてはNPCの動きを管理するNPCManagerモジュールがNoPlayerの上のモジュールに必要になりそうです。

Re: 新ゲームプログラミングの館のd.5について

Posted: 2014年4月22日(火) 22:26
by leaf8429
素早いご回答有難うございます。

Playerのモジュールに無理やりNoPlayer用の処理を埋め込むのではなく,
PC用,NPC用にモジュールを分けた方が良いということですね。

一先ずは何をすればよいかがはっきりわかりました。また資料を読んでいて行き詰っていたところも理解できました。
NPCManagerモジュールは質問のところで書いた処理を作った後でどうすればよいか考えたいと思います。
初歩的で拙い質問でしたが、親切にご回答いただきありがとうございました。