ページ 11

シューティングの移動範囲

Posted: 2011年11月02日(水) 23:58
by わはー
はじめまして。初心者ですが最近このサイトをみながら1からシューティングを作っているのですが分割コンパイルでの移動範囲の限定ができなくて困ってます。

なにかヒントかアドバイスいだたけないでしょうか?

Re: シューティングの移動範囲

Posted: 2011年11月03日(木) 00:53
by うしお
分割コンパイルがうまくいかないのでしょうか?
それとも移動範囲の限定ができないのでしょうか?
もしくは2つとも困っているのでしょうか?
どんなロジックを書いて、どううまくいかないのか、一度整理してみることを強くオススメします。

Re: シューティングの移動範囲

Posted: 2011年11月03日(木) 00:59
by jay
これはホントに初心者にありがちな感じですね(苦笑)

フォーラムルールにも書いてあいますが、具体的にどこが分からないのか
自分はどういう方法で実装しようとしてどこで躓いたのか
などなど、質問の内容を具体的にしてくれた方がこちらとしてもアドバイスしやすいです。
今回の場合でも移動制御の部分で躓いたのか、コードを分割するところで躓いたのか全く分かりません。

制御に関しては
単純に自機の座標を随時チェックして、決められた範囲外に出ないようにしてやればいいと思います

こちらなども参考になると思います。
http://dixq.net/rp/9.html

Re: シューティングの移動範囲

Posted: 2011年11月03日(木) 09:24
by わはー
今わからないのはキャラが枠内から出ないようにすることです

コード:

// 動きを計算する
void Player_Calc(){

if(Keyboard_Get(KEY_INPUT_RIGHT)>0){
m_x++;
}

if(Keyboard_Get(KEY_INPUT_LEFT)>0){
m_x--;
}

if(Keyboard_Get(KEY_INPUT_UP)>0){
m_y--;
}

if(Keyboard_Get(KEY_INPUT_DOWN)>0){
m_y++;
}
if(m_x<10 || m_x>FIELD_MAX_X-10 || m_y<5 || m_y>FIELD_MAX_Y-5)  ←

}
矢印の範囲から出ないようにしたいんですが、MAX_X=384,MAx_Y=448です。

Re: シューティングの移動範囲

Posted: 2011年11月03日(木) 10:31
by softya(ソフト屋)
codeタグを失敗しているので、事前にプレビューして確認してくださいね。

あとで
if(m_x<10 || m_x>FIELD_MAX_X-10 || m_y<5 || m_y>FIELD_MAX_Y-5)  ←
で一気に確認するんじゃなくて、m_x++;とかの直後に範囲内か確認すれば簡単だと思います。

Re: シューティングの移動範囲

Posted: 2011年11月03日(木) 12:11
by わはー
加算や減算の直後に入れてみましたがうまくいきませんでした。どう変えればいいでしょうか?

コード:

// 動きを計算する
void Player_Calc(){

	if(Keyboard_Get(KEY_INPUT_RIGHT)>0){
		m_x++<10 && m_x++>FIELD_MAX_X-10;
	}

	if(Keyboard_Get(KEY_INPUT_LEFT)>0){
		m_x--<10 && m_x-->FIELD_MAX_X-10;
	}

	if(Keyboard_Get(KEY_INPUT_UP)>0){
        m_y--<5 && m_y-->FIELD_MAX_Y-5;
	}

	if(Keyboard_Get(KEY_INPUT_DOWN)>0){
		m_y++<10 && m_x++>FIELD_MAX_X-10;
	}
	

	
}

Re: シューティングの移動範囲

Posted: 2011年11月03日(木) 13:21
by softya(ソフト屋)
これだと期待した効果はありません。
あとこの使い方は、後置インクリメントを使うとうまく動きません。
もう少しC言語の学習をされた方が良いと思います。

参考例。

コード:

	m_x++;
	if( m_x>FIELD_MAX_X-10 ) {//この場合増える方向しかチェックしなくて良い。
		m_x--;//移動取り消す。
	}

Re: シューティングの移動範囲

Posted: 2011年11月05日(土) 12:11
by Dixq (管理人)
x++;をすると、式が評価された後すぐに、xが+1されてしまいます。
また、条件文を書くべきではないところに条件文が書かれているようです。
>や&&はif文の中などで使用する演算子です。

さらに、x++のような書き方だと、移動スピードが変更できません。
m_x += SPD; のような書き方が良いでしょう。

私もsoftyaさんのような実装になっていますが、少し違って

コード:

    m_x+=SPD;
    if( m_x > W ) {
        m_x = W;
    }
このように書いています。
こうすれば、エリア端にピッタリよせることができるでしょう。

Re: シューティングの移動範囲

Posted: 2011年11月16日(水) 06:36
by わはー
返信忘れていました。アドバイスありがとうございます。なんとか解決できました。

Re: シューティングの移動範囲

Posted: 2011年11月16日(水) 06:54
by わはー
解決チェック入れるの忘れてました。