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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
わはー

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

#1

投稿記事 by わはー » 13年前

はじめまして。初心者ですが最近このサイトをみながら1からシューティングを作っているのですが分割コンパイルでの移動範囲の限定ができなくて困ってます。

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

アバター
うしお
記事: 56
登録日時: 14年前

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

#2

投稿記事 by うしお » 13年前

分割コンパイルがうまくいかないのでしょうか?
それとも移動範囲の限定ができないのでしょうか?
もしくは2つとも困っているのでしょうか?
どんなロジックを書いて、どううまくいかないのか、一度整理してみることを強くオススメします。

jay
記事: 314
登録日時: 14年前
住所: 大阪市
連絡を取る:

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

#3

投稿記事 by jay » 13年前

これはホントに初心者にありがちな感じですね(苦笑)

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

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

こちらなども参考になると思います。
http://dixq.net/rp/9.html
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

わはー

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

#4

投稿記事 by わはー » 13年前

今わからないのはキャラが枠内から出ないようにすることです

コード:

// 動きを計算する
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です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 13年前

codeタグを失敗しているので、事前にプレビューして確認してくださいね。

あとで
if(m_x<10 || m_x>FIELD_MAX_X-10 || m_y<5 || m_y>FIELD_MAX_Y-5)  ←
で一気に確認するんじゃなくて、m_x++;とかの直後に範囲内か確認すれば簡単だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

わはー

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

#6

投稿記事 by わはー » 13年前

加算や減算の直後に入れてみましたがうまくいきませんでした。どう変えればいいでしょうか?

コード:

// 動きを計算する
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;
	}
	

	
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#7

投稿記事 by softya(ソフト屋) » 13年前

これだと期待した効果はありません。
あとこの使い方は、後置インクリメントを使うとうまく動きません。
もう少しC言語の学習をされた方が良いと思います。

参考例。

コード:

	m_x++;
	if( m_x>FIELD_MAX_X-10 ) {//この場合増える方向しかチェックしなくて良い。
		m_x--;//移動取り消す。
	}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

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

#8

投稿記事 by Dixq (管理人) » 13年前

x++;をすると、式が評価された後すぐに、xが+1されてしまいます。
また、条件文を書くべきではないところに条件文が書かれているようです。
>や&&はif文の中などで使用する演算子です。

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

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

コード:

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

わはー

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

#9

投稿記事 by わはー » 13年前

返信忘れていました。アドバイスありがとうございます。なんとか解決できました。

わはー

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

#10

投稿記事 by わはー » 13年前

解決チェック入れるの忘れてました。

閉鎖

“C言語何でも質問掲示板” へ戻る