ページ 1 / 1
ファイル分割について
Posted: 2008年8月06日(水) 23:23
by ROL
今晩は。ROLです。DXライブラリ本家にスレを立てさせていただいたのですが、
こちらの話がたくさんでそうなので、本家に迷惑かと思ってスレッド作成しました。
マルチだからダメ~と言われればそれまでですが、私的にものすごく気が引けるので^^;
本家のスレッド↓
http://hpcgi2.nifty.com/natupaji/bbs/pa ... iew&no=952
先日のココのスレッド↓
http://dixq.net/board/
いろんなサイトを見て回りましたがファイル分割をどうすればいいか、わかりません。
もちろん一番初めにSDG館・龍神録館のファイル分割の説明は読みました。
ですが、実際ゲームではどのように使われているのか全く理解ができません。
構造体・計算部・描画などの処理をメインの.ccpからはずして見やすくするのが
ファイル分割と言うことは、理解できたのですが;
見よう見真似で自分のコードにも試しましたがエラーがいっぱいで;
やり方もいまいちわかっていません。
管理人様のサンプルも理解できませんでした;
どなたか助けていただけませんでしょうか。よろしくお願いします。
管理人様のサンプルです↓
---- main.cpp ----
#include <stdio.h>
#define MAX 3
extern void input();
int a;
int main(void) {
a=1;
input();
printf("main関数で最後にaは%d、MAXは%d\n",a,MAX);
return 0;
}
-------------------
---- main2.cpp ----
#include <stdio.h>
#define MAX 3
extern int a;
void input(){
printf("input関数内で最初にaは%d、MAXは%d\n",a,MAX);
a=3;
}
-------------------
実行結果
input関数内で最初にaは1、MAXは3
main関数で最後にaは3、MAXは3
-------------------
追伸
龍神録のパッケージですか・・・・・・・
パッケージと言うものがいまいちわかりませんがゲームの表紙みたい
なものなのでしょうかね?龍神録はプレイさせていただきましたが
今までやってきたゲームの中で一番難しいです。ちゃんとプレイしないと
イメージつかめないから描けないんですよね^^;
迷惑でなければ、製作した絵をメール添付で遅らせてください><⁾₎
Re:ファイル分割について
Posted: 2008年8月06日(水) 23:30
by ROL
あと、キャラクターがゴールに向かう計算を入れたとたんに
ありえないスピードで枠やキャラクターが動きます。
これは、キー入力の取得時間を取らないからなのでしょうか?
また、スピードの制御とかできるものなのでしょうか?
Re:ファイル分割について
Posted: 2008年8月06日(水) 23:31
by 管理人
なんか、誘導してしまったようですみませんm(_ _)m
一応ここは相互リンクすればマルチOKという事になっています。
DXライブラリの掲示板にも特に取り決めがないので、いいとは思いますが、
一応両方に相互リンクしておくのがベストかと思います。
で、とりあえず、何がわかりませんか?
上のサンプル、そしてSTGのサンプル、龍神録のサンプルでわからなければ、
分割したいソースコードを送ってor投稿して下さい。
分割してお渡しします。
ただ、その前に出来るだけ一つ一つご自分でやってみて下さい。
なるべくローカル変数を利用しつつ、
グローバル変数を使わなければ成らない場合はextern宣言でつかえるようにする。
関数についてもそうです。
前と重複しますが、インクルードと定義は両方でしなければなりません。
少しずつやっていけばエラーが出たらそこが悪いわけですから、
にっちもさっちも行かなくなることは無いと思いますが、どうでしょうか?
>迷惑でなければ、製作した絵をメール添付で遅らせてください><⁾₎
おぉ、是非♪
名前クリックしてもらえたらメルアド出ますb
Re:ファイル分割について
Posted: 2008年8月06日(水) 23:36
by 管理人
ちなみに、そのサンプルはこれを分割したものです。
#include <stdio.h>
#define MAX 3
int a;
void input(){
printf("input関数内で最初にaは%d、MAXは%d\n",a,MAX);
a=3;
}
int main(void) {
a=1;
input();
printf("main関数で最後にaは%d、MAXは%d\n",a,MAX);
return 0;
}
・他のファイルで宣言したものを使うときにはextern宣言をする
・インクルードと定義はそのファイルごとにする
を考えて見比べてみるとわかると思うのですが、どうでしょう?
Re:ファイル分割について
Posted: 2008年8月07日(木) 00:15
by ROL
んっとですね・・・・・コレならなんとかわかるかな;
上記の分割していないソースの部分の↓
void input(){
printf("input関数内で最初にaは%d、MAXは%d\n",a,MAX);
a=3;
}
コレをマルマル全部、main2.ccpに移して
int a;
を宣言して使用されるプログラムの一番初めにextern宣言する。
main.ccpは上のmain2.ccpに切り取られた部分を書かないで変わりに
externを宣言すると言う考えでいいのでしょうか^^;
ですがmain.ccpの、void input();の前にextern宣言するのがいまいち
わかりません。コレがif文だった場合とかどうなるんでしょう?^^;
>・インクルードと定義はそのファイルごとにする
これはmain2.ccpに使われている変数を両方で示すと言うことですか?
今回の場合int aのような変数の部分かな?また、インクドールの意味がわかりません;
なんせ、管理人様のゲーム館でしか勉強してきませんでしたから;
関数の意味や構造体の使い方などは他のサイトさんを見に行ったりしていましたが
インクドールの説明は特に関係無いのかなと思ってました。勉強してきた方がよさそうですね^^;
>>迷惑でなければ、製作した絵をメール添付で遅らせてください><⁾₎
>おぉ、是非♪
>名前クリックしてもらえたらメルアド出ますb
ちょっと安心しました。まだまだ修行中の身なのでお気に召されるかどうか
わかりませんが。とりあえず、ラフ絵を1枚、カラーが1枚の計2枚を^^
なぜ2枚かと言うと、フリーのペイントソフトだと特殊効果(光源、影)機能
などが無いからです。また、ペンタブをもってないので;
ソフトは1万ぐらいのでいいのですが、ペンタブ、半端なく高いんですよね^^;
今から構想練って、ネーム書き始めてみます。
Re:ファイル分割について
Posted: 2008年8月07日(木) 00:29
by 管理人
>コレがif文だった場合とかどうなるんでしょう?^^;
if文をextern宣言するってことですか?
extern宣言出来るのは変数か関数です。
ファイル分割しないとき、他の関数の中のif文を参照できるでしょうか?
分割してない時に出来ないことは分割しても出来ないです。
今のトコROLさんがどの程度理解されているのかわからないので、アドバイスがあいまいですが、
関数の自作とかは出来ますか?
まずはそれが出来ないと分割は難しいかと思います。
とりあえずウェブにある入門サイトを一通りお読みになる事をお勧めします。
>ペンタブ
高いですよね~・・・。
わたしも3900円のペンタブ持ってるんですが、
ケチって逆に使い物になりません・・orz
絵を描くときは基本いつもマウスです;
お金が出来たら3万位出していいの欲しいですね~・・。
Re:ファイル分割について
Posted: 2008年8月07日(木) 00:55
by ROL
自作関数ですか・・・・・・;;;;;;;;;;;;
つまり、if文で作った式など関数の中に入れて(自作関数)
それを呼び出すと言う形に取れたのですがあっているのでしょうか?
とにかくがんばって今のを仕上げながら入門サイトで勉強します。
勉強し終わったらまた、質問させていただきます。
>>ペンタブ
>高いですよね~・・・。
>わたしも3900円のペンタブ持ってるんですが、
>ケチって逆に使い物になりません・・orz
そんなに安い物があったニャンて^^;
私が買おうとしているのは2万程度だったと思いますが
その前にアルバイトの件で恐喝しなければ^^
そしたらペンタブ即買いに行きます(半分冗談;)
でも、管理人様が絵を描かれるとは、驚きです。
絵を書く方が友達にいらっしゃるように言われていたものですから;
やっぱり道具はいい物をそろえなければ!ですね|*゜∀`*)ノ笑
Re:ファイル分割について
Posted: 2008年8月07日(木) 01:10
by ROL
関数を自分で作る意味がわかりました。
サンプルなどでよく出てくるメイン関数は
void main(){}
と書くんですよね^^
で、voidは無を表すので何も値を持たないと言う関数の型。
mainと言うのは関数の名前。
なので計算などを{}の中に書き込めば
main();
とすればいつでも呼び出すことができる。
と言う考えに至りましたがどうでしょう?
今日はこれ以上勉強しても頭に入りそうも無いので寝ます。
ありがとうございました。お先です。おやすみなさ~い^^
Re:ファイル分割について
Posted: 2008年8月07日(木) 04:43
by 管理人
絵師が書いてくれてるのはアイシャとリリアの立ち絵だけです・・。
後の絵は私がちまちまと。
>関数
mainはint関数が正しいです。で、最後はreturn 0と。
>main();
>とすればいつでも呼び出すことができる。
まぁメイン関数を呼ぶ事はないでしょうけど、
自作関数ならそういう感じで呼びますね。
引数と返り値についても抑えておくとgoodです。
Re:ファイル分割について
Posted: 2008年8月07日(木) 12:20
by ROL
コレであってるのでしょうか?
昨日、3時間ほど寝てから勉強を再開しました^^;
まず、計算の自作関数を作るなら当然int型になる。
その後に関数名(){}で自作関数の基本が完成。
その次に値の自作関数の中に呼ばなければならないと思います。
その部分が詳しく載っていても型がちがったり、よく意味がわかりません;
でも、ポインタが関係していると言うことだけは、わかりました。
あと、関数を試しにコンパイルしてみると、定義されていない識別子です。と出るのは
引き渡していないから当然なのですが、ローカル関数の定義が正しくありせん。
と表示されています。それの理由がまったく;
何度も解答させてしまい、申し訳ないのですがよろしくお願いします。
P.S
龍神館のファイルを見ながらキャラの基本を書いています。
ですが、バックが見えないのが難点ですね;あの杖?はいったい
どうやってくっついているんでしょう;(背中に)また、横顔は
今まで見てきた絵の中でアイシャに一番近い描き方の絵の横顔を
参考にしました。
リリアの絵が全くなかったのでプレイでたどり着くしか無いんですかね;
普通レベルでも、2面のボスが倒せるぐらいです。ムツカシイ:^^:
>絵師が書いてくれてるのはアイシャとリリアの立ち絵だけです・・。
管理人様がビット絵を描いたんですね。私はビット絵苦手です。
どうしてもラインを減らしたりする作業がうまく行かないで別のキャラに~~
名前の件、ご迷惑をおかけしているみたいで、申し訳ないです><
そのせいで他の方からの解答が無いのかな~と思います^^;
それでますます管理人様に負荷をかけてますね↴
そのうち皆さんも理解されるのでは無いかと思います。辛抱あるのみですね^^b
Re:ファイル分割について
Posted: 2008年8月07日(木) 12:54
by 御津凪
突然ですが割り込んで返答してみます。
> まず、計算の自作関数を作るなら当然int型になる。
必ずしもそうではありません。
> その後に関数名(){}で自作関数の基本が完成。
> その次に値の自作関数の中に呼ばなければならないと思います。
> その部分が詳しく載っていても型がちがったり、よく意味がわかりません;
自作関数は自分で機能を作るものなので、
関数に渡す引数や関数から返される値は自由に決められます。(double等)
たとえば、
double mul(double a,double b){return a * b;}
とか。
(a と b を掛け算した結果を返す自作関数です)
> でも、ポインタが関係していると言うことだけは、わかりました。
関数ポインタというものがありますが、
ここでは意識する必要は無いと思います。
> あと、関数を試しにコンパイルしてみると、定義されていない識別子です。と出るのは
> 引き渡していないから当然なのですが、ローカル関数の定義が正しくありせん。
> と表示されています。それの理由がまったく;
ソースを提示しないとなんともいえませんが、
「定義されていない識別子」というのは、型を指定するところに関係の無い名前を使っていたり、
抜けていた場合に出ます。
例として下記に書いておきます。
int a; // グローバル宣言
int get_a(){return a;} // OK
a get_a(){return a;} // エラー。(aは変数の名前で型ではない)
get_a(){return a;} // エラー。(aは変数の名前で型ではない)
// もし、単に処理を分ける場合は
// ↓のように関数を書くとよい。
void myfunc(){
// ココに処理を書く
}
こんな感じでよろしいでしょうか。
Re:ファイル分割について
Posted: 2008年8月07日(木) 13:47
by 管理人
どこで勉強しています?
http://www.google.co.jp/search?hl=ja&q= ... %96%80&lr=
この辺で参考になるサイト山ほど出てきますね。
私はこの一番上のサイトで勉強しました。
>計算の自作関数を作るなら当然int型になる。
No。
「計算の」という意味がよくわからないですが、関数の型ってどういう意味かを勉強すれば疑問も晴れるはず。
答えを先に言ってしまえば返り値の型なんですね。
>その次に値の自作関数の中に呼ばなければならないと思います。
値の自作関数の中って何でしょう?
>ポインタが関係していると言うことだけは、わかりました。
関係しないことも多いです。
まぁ関数ポインタとかって視点なら関係ありますが。
>定義されていない識別子です。と出るのは引き渡していないから当然なのですが
引き渡しってなんでしょう?
変数の引数のことですか?
単に関数のスペル間違いではないですか?
>ローカル関数の定義が正しくありせん
書き方が違うか、カッコの対応がおかしいのでしょう。
いずれにしてもコードを見ないことにははっきり言えません。
>杖
どうやってくっついてるんでしょうね・・。
>リリアの絵が全くなかったので
龍神録の公式HPの絵ではだめですか?
>管理人様がビット絵を描いたんですね。
ドット絵もそうですが、必要な画像は立ち絵なんて全体のほんの一部ですからね・・。
背景とかエフェクトとか作らないといけない画像は他にも山ほど・・。
私の技量ではあの程度が限界です;