ページ 11

エフェクトについて

Posted: 2012年9月09日(日) 21:37
by げん
19章の敵消滅エフェクトで詰まっています

ビルドをしたらエラーが沢山出てきて困っております

out.cpp
(14): error C2065: 'cshot' : 定義されていない識別子です。
(14): error C2228: '.cnt' の左側はクラス、構造体、共用体でなければなりません

↑のようなエラー文が何行も出てきたのですが何をどうすれば良いのでしょうか?

out.cpp やini.cpp等が出ていたらそのソースファイルが間違っていて、(14): errorの()の数字はそのエラーの原因がある行数だと思うのですが
プログラム知識は〈やさしいC++〉一通り読んだ程度でしかもエラー数が多すぎて何をすれば良いのか分からない状況です

Re: エフェクトについて

Posted: 2012年9月09日(日) 21:52
by box
げん さんが書きました: out.cpp
(14): error C2065: 'cshot' : 定義されていない識別子です。
(14): error C2228: '.cnt' の左側はクラス、構造体、共用体でなければなりません

↑のようなエラー文が何行も出てきたのですが何をどうすれば良いのでしょうか?
とりあえず、out.cpp の中身が見たいです。

Re: エフェクトについて

Posted: 2012年9月09日(日) 21:53
by zxc
  19章で詰まっていると言われても、そちらがコピー&ペーストした結果エラーが出たのか、
参考にして自力でコードを書いた結果エラーが出たのか、誰も分からないので答えようが無いと思います。

  問題ありそうなコードとエラー文を載せてもらってもいいでしょうか。

Re: エフェクトについて

Posted: 2012年9月09日(日) 23:15
by Dixq (管理人)
cshotが定義されていないか、使用している位置から見えないのでしょう。
配布しているプロジェクトの19章とどこが違うのでしょうか?

Re: エフェクトについて

Posted: 2012年9月10日(月) 05:55
by げん
問題だと思われるコードファイルの一つであるout.cppの中身です

コード:

 #include "../include/GV.h"

#define ENEMY_RANGE_MAX 4
#define CSHOT_RANGE_MAX 2

//敵の当たり判定範囲
int enemy_range[ENEMY_RANGE_MAX]={16,30,16,50};
//自機ショットの当たり判定範囲
int cshot_range[CSHOT_RANGE_MAX]={6,};

//当たったかどうかを判定する
int out_judge_cshot(int i,int s){
        int j;
        if(cshot[i].cnt>0){//ショットの軌道が1度でも計算されていたら
                double x=cshot[i].x-enemy[s].x;//敵と自機ショットとの距離
                double y=cshot[i].y-enemy[s].y;
                //オーバーフロー対策
                if(cshot[i].knd>=CSHOT_RANGE_MAX || enemy[s].knd>=ENEMY_RANGE_MAX)
                        printfDx("out_judge_cshot内オーバーフロー");
                //敵の当たり判定と自機ショットの当たり判定の合計範囲
                double r=cshot_range[cshot[i].knd]+enemy_range[enemy[s].knd];
                //中間を計算する必要があれば
                if(cshot[i].spd>r){
                        //1フレーム前にいた位置を格納する
                        double pre_x=cshot[i].x+cos(cshot[i].angle+PI)*cshot[i].spd;
                        double pre_y=cshot[i].y+sin(cshot[i].angle+PI)*cshot[i].spd;
                        double px,py;
                        for(j=0;j<cshot[i].spd/r;j++){//進んだ分÷当たり判定分ループ
                                px=pre_x-enemy[s].x;
                                py=pre_y-enemy[s].y;
                                if(px*px+py*py<r*r)
                                        return 1;
                                pre_x+=cos(cshot[i].angle)*r;
                                pre_y+=sin(cshot[i].angle)*r;
                        }
                }
                if(x*x+y*y<r*r)//当たり判定内なら
                        return 1;//当たり
        }
        return 0;
}

//敵が死ぬかどうかの決定

extern void enter_del_effect(int);

void enemy_death_judge(int s){
        int i;
        se_flag[8]=1;//敵に当たった音
        if(enemy[s].hp<0){//敵のHPが0未満になったら
                enemy[s].flag=0;//敵を消滅させる
                se_flag[1]=1;//敵のピチュり音
                enter_del_effect(s);
                for(i=0;i<SHOT_MAX;i++){//敵総数分
                        if(shot[i].flag!=0){//登録されている弾幕データがあれば
                                if(s==shot[i].num){//その敵が登録した弾幕があれば
                                        shot[i].flag=2;//それ以上弾幕を続けないフラグを立てる
                                        break;
                                }
                        }
                }
        }
}

//当たり判定メイン
void out_main(){
        int i,s;
        for(i=0;i<CSHOT_MAX;i++){//自機ショット総数
                if(cshot[i].flag>0){
                        for(s=0;s<ENEMY_MAX;s++){//敵総数
                                if(enemy[s].flag>0){
                                        if(out_judge_cshot(i,s)){//自機ショットと敵が当たっていれば
                                                cshot[i].flag=0;//その自機ショットを消す
                                                enemy[s].hp-=cshot[i].power;//弾の持つパワー分HPを減らす
                                                enemy_death_judge(s);//敵が死ぬかどうかを決める
                                        }
                                }
                        }
                }
        }
} 
プログラムは19章のコピペです

Re: エフェクトについて

Posted: 2012年9月10日(月) 10:50
by zxc
  おそらく自機弾の構造体cshotが見つからないのだと思います。
「自機にショットを撃たせてみよう」ページ内にある

コード:

//キャラクターショットに関する構造体
typedef struct{
        int flag,power,cnt,knd;//フラグ、パワー、カウンタ、種類
        double x,y,angle,spd;//座標、角度、スピード
}cshot_t;

//---- GV.h に以下を追加 ----

GLOBAL cshot_t cshot[CSHOT_MAX];//自機ショット登録用変数
この処理のどちらかがされていないのではないですか。
最初から19章まで全部コピーなら多分この辺りかと思います。

Re: エフェクトについて

Posted: 2012年9月12日(水) 02:51
by げん
zxcさんの言うとおりにしたらエラーは消えたのですが

c1xx : fatal error C1083: ソース ファイルを開けません。'effect.cpp': No such file or directory

が出たのですがenemyにあるhit_effectの場所が悪いのでしょうか?試しに一回effectのフォルダに移動したのですが変わらなかったので
同じエラーが出ている人たちの質問を見て試しているのですがエラーが消えてくれません

Re: エフェクトについて

Posted: 2012年9月12日(水) 05:07
by へにっくす
げん さんが書きました:zxcさんの言うとおりにしたらエラーは消えたのですが

c1xx : fatal error C1083: ソース ファイルを開けません。'effect.cpp': No such file or directory

が出たのですがenemyにあるhit_effectの場所が悪いのでしょうか?試しに一回effectのフォルダに移動したのですが変わらなかったので
同じエラーが出ている人たちの質問を見て試しているのですがエラーが消えてくれません
関数云々でなく、effect.cppというファイルがないよ、と言ってるだけですよ?
ファイルはどこに存在していますか?

Re: エフェクトについて

Posted: 2012年9月12日(水) 07:29
by げん
effect.cppは龍神録のフォルダにあります。厳密に行ったら1章と2章の間に挟まれていますね


このeffect.cppフォルダを別の場所に移動させれば良いのでしょうか?

Re: エフェクトについて

Posted: 2012年9月14日(金) 04:56
by へにっくす
げん さんが書きました:effect.cppは龍神録のフォルダにあります。厳密に行ったら1章と2章の間に挟まれていますね
このeffect.cppフォルダを別の場所に移動させれば良いのでしょうか?
19章で悩んでたんじゃないの?
なんですか1章と2章の間って
out.cppと同じフォルダにあるかを聞いていたんですが、そんな答えじゃ分かりませんよ。

Re: エフェクトについて

Posted: 2012年9月15日(土) 15:59
by zxc
げん さんが書きました:   effect.cppは龍神録のフォルダにあります。
厳密に行ったら1章と2章の間に挟まれていますね
このeffect.cppフォルダを別の場所に移動させれば良いのでしょうか?
  この説明からそちらがどのような状況なのか、分かることはほとんどありません。
龍神録のフォルダと言っても、そちらの自作かダウンロードしたものか分かりませんし、
1章と2章と言われてもフォルダかファイルかで解決策は多少異なるでしょう。
具体的にどのような階層構造をとっているのかを説明してくださいね。

  自分があまり見ないエラーですので良く分かりませんが、「effect.cpp」が
そもそも存在していないのか、もしくは適切な場所に存在していないのだと思います。