Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(初心者 シューティング)
閲覧数:880
掲示板(初心者 シューティング)
名前
匿名
題名 初心者 シューティング
質問内容

質問を評価する
(0ポイント)
現在、シューティングを他のサイト等を参考に
作成しているのですが、敵からの攻撃の挙動についての
質問です。

敵からの攻撃で複数の弾を発射forループを用いて発射
させたいのですが、どうも処理が速すぎて複数の弾が
重なってしまい1つの弾の様に見えてしまうのですが
どのようにしたら上手くいくのでしょうか?


お見苦しいながら弾丸の処理のソースコードをはらして頂きます。
よろしくお願いします。
teki.num=行動乱数

    ////////////敵の攻撃///////////////////////////////////////////
        if (count%20==0)
        {
            switch(teki.num)
            {   
                case 0: //適当撃ち
                {
                    for(i=0; i<4; i++)
                    {   
                        Eshotw = new Shot();
                        Eshotw.Set((int)teki.x,(int)teki.y,0,0);
                        Eshotw.ougi(rad,8);
                        tekilist.add(Eshotw);
                    }
                    count=0;
                }
                    break;
                case 1: //右回りに発射
                {
                    for(i=0;i<1800;i++)
                    {    
                        if(i%100==0)
                        {
                            Eshotw = new Shot();
                            Eshotw.Set((int)teki.x+10,(int)teki.y+10,0,0);
                            Eshotw.Rot(i/100*20,7);
                            tekilist.add(Eshotw);
                        }
                    }
                    count=0;
                }
                        break;
                    
                case 2: //5ショット
                {
                    for(i=0; i<1000; i++)
                    {   
                        if(i%200==0)
                        {
                        Eshotw = new Shot();
                        //shotw.Set(3,i*20+40,i*10*50,i*4,i*4+8);
                        //Eshotw.Set(i*40+(int)teki.x-160,(int)teki.y+50-i*10,i*2,10-i);
                        Eshotw.Set((int)teki.x+10,(int)teki.y+10,0,0);
                        Eshotw.ougi(rad,10-shotspeed);
                        tekilist.add(Eshotw);
                        shotspeed++;
                        }
                   }
                    count=0;
                }
                    break;
                case 3://ばらまき
                {
                 for(i=0;    i<10000; i++)
                    {   
                        if(i%1000==0)
                        {
                        Eshotw = new Shot();
                        //shotw.Set(3,i*20+40,i*10*50,i*4,i*4+8);
                        //Eshotw.Set(i*40+(int)teki.x-160,(int)teki.y+50-i*10,i*2,10-i);
                        Eshotw.Set((int)teki.x+10,(int)teki.y+10,0,0);
                        Eshotw.ougi(rad,5);
                        tekilist.add(Eshotw);
                        }
                    }
                    count=0;
                }
                    break;
            }
            teki.num=(int)((4)*Math.random( ));
        }
質問日時 2013-01-13 14:38:53
名前
匿名
回答内容

回答を評価する
(0ポイント)
>処理が速すぎて
一回の移動距離を減らすか、n回に一回移動のnを増やすか、タイマーを遅くするか。
速いなら遅くすればいい。
回答日時 2013-01-13 18:09:34
名前
匿名
回答内容

回答を評価する
(0ポイント)
ご回答ありがとうございます。
ご指摘通り処理自体を取りあえず遅くしました。
しかしcase0での適当撃ちとなっているところで
予定では弾を4発等間隔で適当に撃ちたいのですが
1つしか発射されず当たり判定を調べてみたところ
4つが重なっている事がわかりました。
これはどのようにして直せばいいのでしょうか

System.currentTimeMillis()を
使って時間をはかり0.2秒ぐらいの間隔で発射しようとしましたが
上手くいきませんでした。
回答日時 2013-01-16 23:17:17
名前
匿名
回答内容

回答を評価する
(0ポイント)
だって一度で4回、同じ位置にnewしてるじゃん。
そりゃ重なるよ。
回答日時 2013-01-16 23:51:06

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道