初心者ですが、DxLibを利用してC++でSTG製作しています。
Init()した後にMove()とDraw()等をループさせています。
(簡略化はしています)
GameMain::Init(){
PLAYER =new Player
ENEMY =new Enemy
}
GameMain::Move(){
Player->PLmove();//操作キャラの移動、プレイヤのショット
Enemy->ENmove(Player->GetX(),Player->GetY());//敵キャラの移動、敵ショット
//↑で操作キャラの場所に寄っていく敵、ホーミングする弾を作りたいので、操作キャラのX,Y座標を引数にしている。
Collision(???);//ここで操作キャラ、敵キャラ、プレイヤショット、敵ショットの当たり判定を行いたい
}
GameMain::Draw(){
Player->PLDraw();
Enemy->ENDraw();
ざっくり上記のようなことをやっていますが、二点疑問があります。
一点目ですが、
Enemy->ENmove(Player->GetX(),Player->GetY());//敵キャラの移動、敵ショット
//↑で操作キャラの場所に寄っていく敵、ホーミングする弾を作りたいので、操作キャラのX,Y座標を引数にしている。
視覚的には で、操作キャラクタをグローバル変数?にして指定しなくても座標を取得したい気持ちなのですが
恐らくそれは良くないことなのでは。とも思います。
どうするのが一般的なのでしょうか。
二点目は
当たり判定について考え始めたところで
Collision();という関数を作ろうと考えています。
当たり判定には
PLAYER =new Player
ENEMY =new Enemy
両方の座標が欲しいのですが Collision(PLAYER *,ENEMY *);のようにしてもよいものなのでしょうか。
そしてこれはクラス化するべきなのでしょうか。
無駄があるような気もしつつよくわからなくなってきています。
まだよくわかってない点等かなりあります。
プレイヤが動いた、敵が動いた、プレイヤがショット撃てた のように順に作っているため、
どこかで破綻するのかもしれません。
根本的に考え方が間違ってましたらそのあたりも含めご教授くださると助かります。
以上よろしくおねがいたします。