コンボの計算とかは順調に実装できている中、1つだけどうしても自分では作れないものが出て来ました、それがドロップが落ちてくるアニメーションです
[nico]http://www.nicovideo.jp/watch/sm18787729[/nico]
本家パズドラでは、ドロップ(動画の画面で操作している丸い玉のこと)を3つ以上揃えると、それらのドロップを消します
ドロップが消えた場所には、上のドロップを下に落とさせるようにしていて、そのアニメーションはとてもなめらかです
そして、これが私が書いてみたドロップが下に落ちてくるアニメーションの部分のコードです
#include<DxLib.h>
typedef struct{
//int color;
int flag;
}drop_t;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
drop_t drop[10];
//flag=0の場所が、ドロップが消えてなくなっている場所
drop[0].flag = 1;
drop[1].flag = 1;
drop[2].flag = 0;
drop[3].flag = 0;
drop[4].flag = 0;
drop[5].flag = 1;
drop[6].flag = 1;
drop[7].flag = 0;
drop[8].flag = 0;
drop[9].flag = 0;
int count = 1;
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
//ここと下の部分のコメントを外すと、マウスが押されている時だけ動かせます
//if(GetMouseInput() & MOUSE_INPUT_LEFT){
if(count % 10 == 0){
for(int i=0;i<10;i++){
if(drop[i].flag == 0){
if(i==0){
drop[0].flag = 1;
i=10;
}
else {
int tmp = drop[i].flag;
drop[i].flag = drop[i-1].flag;
drop[i-1].flag = tmp;
}
}
}
}
count++;
//}
for(int i=0;i<10;i++){
DrawCircle(100,30*i+15,15,(drop[i].flag == 1) ? GetColor(255,0,0) : GetColor(0,0,0),TRUE);
}
}
DxLib_End();
return 0;
}
ボトッ、ボトッ、っとドロップが落ちてきて、全然なめらかではありません
本当は、drop_tのメンバにx,yなど直接座標を指すものを作って、それで管理したいのですが、そうするとドロップが3つ以上つながっているかの判定ができなくなってしまいます
ここしばらくずっとこれで悩んでいるのですが、まったく解決策が浮かびません
なにかいい方法はないでしょうか?