さて、9月になりましたね。
あーどっか旅行に行ってリフレッシュしたい。
でもどこも行きたいわけではないという。
だってお金を使ってまでしてどこに行けばいいんだよう(´・ε・`)
弾の管理にlistを使うことにしました。
理由は描画順がいったりきたりして見栄えが良くないからです。
そしてここで思ったんですが、弾はサイズの大きい順に描画しています。ということは、発射した順でかつサイズの大きい順に描画しなければなりません。
そのため、描画の際には、
①半径が大きい順に全弾についてループを回し、描画する
(半径が1、2、5の弾があれば、弾の最大数*3回サイズについて判定することになる)
②stable_sort()を毎フレーム使ってループを1度だけ回し、描画する
(描画時は楽だがソートのコストが不明)
のどちらかを考えています。
現在は配列で管理しているので①なのですが、あまり頭のいい方法とは言えない気がします。
そんなわけで実際に動かしてみて、コストが安いようなら②を使ってみる予定です。
と、思ったのですが!!
御津凪さん、roxionさん、Bugさん、そして沖さん(癒し担当)にツイッターでさまざまなアドバイスをしていただきました!
本当にありがとうございました。
その結果、
結局配列を使うことにしました!
ちょっと工夫すれば見栄えが悪くなるということもなくなるので。
しかし変更したコードを戻すのは早いなー(涙)
今までの苦労は勉強だったと思うことにしますw
でもアイテムの管理にはvectorだかlistだかを使った方が圧倒的に管理しやすそうですね。
お願いだから、エフェクトの期待はしないで!!がっかりするから!!(´;ω;`)
[nico]
http://www.nicovideo.jp/watch/sm15481956[/nico]
え?どれのこと?
って思ったら泣く。
弾幕のコードも一応載せますが、関数が意味不明のような気がする!
解読したい!って人なんていないと思うので関数についてはふーん程度に見てやってください。
ノリですノリ。(イミフ)
► スポイラーを表示
CODE:
double k=PI2*Boss.getcount()/61;
static double x=MAXX-10;
static double y=MINY+10;
static int Flag=1;
static int count=0; //曲がったカウント
if(Boss.getcount()==0)
{
x=MAXX-10;
y=MINY+10;
Flag=1;
count=0;
}
if(Flag==1) //左へ
{
x-=2;
if(xMAXX-10)
Flag=3;
}
else if(Flag==3)//下へ
{
y+=2;
if(y>MAXY-10)
Flag=4;
}
else if(Flag==4 || Flag==5)//反時計
{
int c=count%4;
if(c==0)
{
y-=2;
if(yMAXX-10)
count++;
}
}
else if(c==2)
{
y+=2;
if(y>MAXY-10)
count++;
}
else
{
if(Flag==4)
{
x+=2;
if(x>MAXX-10)
count++;
}
else
{
x-=2;
if(x0 && STGtama[i].getspd()60)
{
STGtama[i].plusspd(0.01);
STGtama[i].setv();
}
}
► スポイラーを表示
CODE:
static int PM=-1;
static double k=0;
int t=Boss.getcount()%300;
int r=20;
int way=20;
if(Boss.getcount()==0)
{
PM=-1;
k=Drand(0,PI2);
}
if(t>=0 && t0)
{
if(STGtama[i].getIval()==1)
{
STGtama[i].setIval(0,2);
}
}
}
}
for(int i=0; i 0)
{
if(t==STGtama[i].getIval(1)+50)
{
STGtama[i].setgraph(Kome);
switch(STGtama[i].getIval(2))
{
case 0: STGtama[i].setshotcolor(Blue);break;
case 1: STGtama[i].setshotcolor(Red); break;
case 2: STGtama[i].setshotcolor(Green); break;
case 3: STGtama[i].setshotcolor(Yellow); break;
case 4: STGtama[i].setshotcolor(Aqua); break;
default: printfDx("何代入しとるんじゃボケ");
}
sound(1,9);
}
if(STGtama[i].getIval()==2)
{
if(t>=60 || t=140 && t<170)
{
STGtama[i].setkacdo(STGtama[i].getDval()+getrad(160)*sin(PI/2*(t-140)/30)*STGtama[i].getIval(3)*-1);
STGtama[i].setv();
if(t==169)
{
STGtama[i].setIval(0,3);
}
}
}
else if(STGtama[i].getIval()==3)
{
if(STGtama[i].getspd()<2.5)
{
STGtama[i].plusspd(0.025);
STGtama[i].setv();
}
}
}
}