STG:自機のショットが発射されません
Posted: 2012年8月25日(土) 04:13
初めまして。
使用しているのはVC++2010です。
今、「龍神録プログラミングの館」と「新・C言語~ゲームプログラミングの館~」を見ながらSTGを作っています。
(http://dixq.net/rp/17.html)を参考にしながら自機にショットを発射させようとしているのですが、うまくいきません。
うまくいかない、というのは、
・自機の前方から一度に二発発射させようとしている→一発のみ
・発射させたあと→一瞬で画面から消える
・一瞬で画面から消えた後→x,y座標ともに-1085862613のようなとんでもない位置に移動している
といった事になっています。
座標が変わる部分に関しては、ほぼ丸写しのようなものになっているにもかかわらず、なぜこのようになってしまうのかがわからなく、どこが間違えているのかの見当もつきません。
見づらい部分もあると思いますが、自機のショットに関するコードがありますのでよろしくお願いします
使用しているのはVC++2010です。
今、「龍神録プログラミングの館」と「新・C言語~ゲームプログラミングの館~」を見ながらSTGを作っています。
(http://dixq.net/rp/17.html)を参考にしながら自機にショットを発射させようとしているのですが、うまくいきません。
うまくいかない、というのは、
・自機の前方から一度に二発発射させようとしている→一発のみ
・発射させたあと→一瞬で画面から消える
・一瞬で画面から消えた後→x,y座標ともに-1085862613のようなとんでもない位置に移動している
といった事になっています。
座標が変わる部分に関しては、ほぼ丸写しのようなものになっているにもかかわらず、なぜこのようになってしまうのかがわからなく、どこが間違えているのかの見当もつきません。
見づらい部分もあると思いますが、自機のショットに関するコードがありますのでよろしくお願いします
#define PI 3.1415926f
#define PS_MAX 8
#define FIELD_MAX_X 450
#define FIELD_MAX_Y 440
#define FIELD_X 150
#define FIELD_Y 30
static int m_count;
static int m_pshot;
static int m_i,m_j;
static float m_dran_x,m_dran_y;
static int m_pshotpos_x[2] = {-10,10};
static int m_pshotpos_y[2] = {-30,-30};
typedef struct {
float x,y; //座標
int flag; //フラグ
} pshot_t;
pshot_t pshot[PS_MAX];
void player_shot_initalize()
{
m_pshot = LoadGraph("画像/player_shot.png");
for (m_i = 0;m_i < PS_MAX;++m_i) {
pshot[m_i].flag = 0;
}
}
void player_shot_update(float p_x,float p_y)
{
for(m_i = 0;m_i < PS_MAX; ++m_i) {
if(pshot[m_i].flag == 1) {
m_dran_x = 3 + 12 / 2;
m_dran_y = 3 + 17 / 2;
pshot[m_i].x += cos(PI / 2) * 3;
pshot[m_i].y += sin(PI / 2) * 3;
if (pshot[m_i].x <-m_dran_x || pshot[m_i].x > FIELD_MAX_X + m_dran_x ||
pshot[m_i].y <-m_dran_y || pshot[m_i].y < FIELD_MAX_Y + m_dran_y) {
pshot[m_i].flag = 0;
}
}
}
if (keyboard_get(KEY_INPUT_Z) > 0) {
++m_count;
if (m_count % 10 == 0) {
for (m_i = 0;m_i < 2;m_i++) {
for(m_j = 0;m_j < 2;++m_j) {
if (pshot[m_j].flag == 0) {
pshot[m_j].flag = 1;
pshot[m_j].x = p_x + m_pshotpos_x[m_i];
pshot[m_j].y = p_y + m_pshotpos_y[m_i];
}
}
}
}
} else {
m_count = 0;
}
}
void player_shot_draw()
{
for (m_i = 0;m_i < PS_MAX;++m_i) {
if (pshot[m_i].flag > 0) {
DrawRotaGraphF(pshot[m_i].x,pshot[m_i].y,1.0,0.0,m_pshot,true);
}
}
}
void player_shot_finalize()
{
DeleteGraph(m_pshot);
}