ページ 11

10回に1回方向を変える

Posted: 2012年12月17日(月) 13:01
by みじんこ
ループ{

コード:

if(tama.tag == 2){
        int rand = arc4random() % 10;
        float x;
        
        if(rand == 1){
            x = -1 * x;
        }

        tama.position = ccp(tama.position.x - x, tama.position.y - 5.0f);

    }
}

1/10の確率でxの方向を変えたいのですが、xにローカル変数を使うと毎回値が更新されうまくいきません。
グローバル変数を使えばできるのは分かるですが、なんか納得いきません。
上手な書き方を教えてください。よろしくお願いします。

(objective-c,xcode)

Re: 10回に1回方向を変える

Posted: 2012年12月17日(月) 13:17
by softya(ソフト屋)
tamaの構造体に保存してはどうでしょうか?

Re: 10回に1回方向を変える

Posted: 2012年12月17日(月) 16:04
by みじんこ
構造体に保存とは初期化の時にするのですか?
このif文内でしか使わないので、できればこの中だけの変数ですませたいです。

Re: 10回に1回方向を変える

Posted: 2012年12月17日(月) 16:12
by softya(ソフト屋)
コードの使い回しが制限されますが、変数xをstaticする手はあると思います。
初期値は与えて下さい。

【補足】
この方法は、後でYuOさんが書いているように上手な書き方とは言えない方法だと私は思います。

Re: 10回に1回方向を変える

Posted: 2012年12月17日(月) 17:09
by YuO
みじんこ さんが書きました:構造体に保存とは初期化の時にするのですか?
初期値の設定は初期化で行いますが,方向転換はこの関数内で行います。
みじんこ さんが書きました:このif文内でしか使わないので、できればこの中だけの変数ですませたいです。
そもそも,このベクトル値 (-x, -5.0f) は「tama」というインスタンスの持っている,例えば「speed」という属性ではないのですか。
そういう考え方に立てば,tamaというインスタンスが持つ方が自然に思えます。

Re: 10回に1回方向を変える

Posted: 2012年12月17日(月) 18:38
by みじんこ
お二方、ありがとうございます。

-(id)init{
tama.speed = 5.0f;
}

(void)a{
if(tama.tag == 2){
int rand = arc4random() % 10;

if(rand == 1){
tama.speed = -1 * tama.speed;
}

tama.position = ccp(tama.position.x - tama.speed, tama.position.y - 5.0f);

}
}

こういう解釈であってますか?

Re: 10回に1回方向を変える

Posted: 2012年12月17日(月) 18:45
by softya(ソフト屋)
codeタグを使ってくださいね。
みじんこ さんが書きました:お二方、ありがとうございます。

コード:

-(id)init{
       tama.speed = 5.0f;
}

(void)a{
if(tama.tag == 2){
        int rand = arc4random() % 10;
        
        if(rand == 1){
            tama.speed = -1 * tama.speed;
        }
 
        tama.position = ccp(tama.position.x - tama.speed, tama.position.y - 5.0f);
 
    }
}
こういう解釈であってますか?
はい。
綺麗に書くなら、以下のように書くと統一性が取れると思います。
※ インデントも直しました。

コード:

-( id )init {
	tama.vx = 5.0f;
	tama.vy = 5.0f;
}

( void )a {
	if( tama.tag == 2 ) {
		int rand = arc4random() % 10;
		if( rand == 1 ) {
			tama.vx = -1 * tama.vx;
		}

		tama.position = ccp( tama.position.x - tama.vx, tama.position.y - tama.vy );
	}
}
ところでObjective-Cって
tama.vx = -tama.vx;
と書けないんでしたっけ?

Re: 10回に1回方向を変える

Posted: 2012年12月18日(火) 23:59
by みじんこ
とても見やすいです。
みじんこ さんが書きました:ところでObjective-Cって
tama.vx = -tama.vx;
と書けないんでしたっけ?
その書き方忘れていました!
何度もありがとうございました。またお願いします。