弾の発射エフェクトの実装について
Posted: 2011年9月19日(月) 11:57
いつもお世話になっております。
弾が突然表示されるのに違和感を覚え、エフェクトをつけてから発射させたいと思っています。
過去のトピックに、Yperiaさんが投稿されたNO[49570]「 【画像処理?】東方のような発射処理」があり、まさにこれが私の実装したい内容です。
そこで、このトピックに従い、発射直後の20フレーム中に
アルファブレンド:0→255
大きさ:だいたい2.5倍→0.5倍
を、実装しようとしましたが、頭がこんがらがってコードに表せません。
私の現在の構想です。まず関数void graph_appear_bullet(double x, double y, int col)を実装します。
そして、例えばboss_shotH.cpp内で、その関数にx座標、y座標、色を渡し呼び出すと、
渡した座標に、渡した色のエフェクト(20フレームかけて、アルファブレンドアルファブレンド:0→255 、大きさ:だいたい2.5倍→0.5倍)が表示されるという方法です。
そして、関数graph_appear_bullet(double x, double y, int col)はgraph.cppに定義し、エフェクトの計算させるため、関数calc_appear_bullet()をcalc.cppに実装し・・・ようとしていますが、よく分からなくて右往左往しています。
弾の射出エフェクトの構造体appear_bullet_tを用意しました。
色は10色欲しかったので、define.hに射出エフェクト最大数としてAPPEAR_BULLET_MAX 10と宣言しています。
エフェクトの画像は、弾の画像ロードし、2.5倍から0.5倍に表示しようとしています。
宜しくお願い致します。
boss_shotH.cpp内
graph.cpp内
calc.cpp内
load.cpp内
define.h内
GV.h内
struct.h内
弾が突然表示されるのに違和感を覚え、エフェクトをつけてから発射させたいと思っています。
過去のトピックに、Yperiaさんが投稿されたNO[49570]「 【画像処理?】東方のような発射処理」があり、まさにこれが私の実装したい内容です。
そこで、このトピックに従い、発射直後の20フレーム中に
アルファブレンド:0→255
大きさ:だいたい2.5倍→0.5倍
を、実装しようとしましたが、頭がこんがらがってコードに表せません。
私の現在の構想です。まず関数void graph_appear_bullet(double x, double y, int col)を実装します。
そして、例えばboss_shotH.cpp内で、その関数にx座標、y座標、色を渡し呼び出すと、
渡した座標に、渡した色のエフェクト(20フレームかけて、アルファブレンドアルファブレンド:0→255 、大きさ:だいたい2.5倍→0.5倍)が表示されるという方法です。
そして、関数graph_appear_bullet(double x, double y, int col)はgraph.cppに定義し、エフェクトの計算させるため、関数calc_appear_bullet()をcalc.cppに実装し・・・ようとしていますが、よく分からなくて右往左往しています。
弾の射出エフェクトの構造体appear_bullet_tを用意しました。
色は10色欲しかったので、define.hに射出エフェクト最大数としてAPPEAR_BULLET_MAX 10と宣言しています。
エフェクトの画像は、弾の画像ロードし、2.5倍から0.5倍に表示しようとしています。
宜しくお願い致します。
boss_shotH.cpp内
#include "../include/GV.h"
extern int search_boss_shot();
extern double bossatan2();
extern double shotatan2(double x,double y);
extern double shotatan3(double x1, double y1, double x2, double y2);
extern int move_boss_pos(double x1,double y1,double x2,double y2,double dist, int t);
extern void input_phy_pos(double x,double y,int t);
extern void graph_appear_bullet(double x, double y, int col);//射出エフェクト関数
#include "../include/GV.h"
extern void graph_back_main();
/*・・・*/
void graph_appear_bullet(double x, double y, int col){//弾の射出エフェクト関数
for(int i=0;i<APPEAR_BULLET_MAX;i++){
SetDrawBlendMode(DX_BLENDMODE_ALPHA, (int)(appear_bullet[i].brt));//0→255
DrawRotaGraph(x, y,appear_bullet[i].scale,0,img_bullet[12][3],TRUE);//2.5倍~0.5倍
SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
}
/*・・・*/
void graph_main(){
if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
graph_back_main();//背景描画メイン
graph_effect(0);//敵が死ぬエフェクト
if(bright_set.brt!=255)SetDrawBright(255,255,255);
graph_effect(4);//喰らいボムのエフェクト
if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
graph_boss();
graph_enemy();//敵の描画
graph_cshot();//自機ショットの描画
if(bright_set.brt!=255)SetDrawBright(255,255,255);
graph_ch();//自機の描画
if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
graph_bullet();//弾の描画
if(bright_set.brt!=255)SetDrawBright(255,255,255);
graph_effect(1);//ボムのエフェクト
graph_effect(2);//ボム線のエフェクト
graph_effect(3);//ボムキャラのエフェクト
graph_board();//ボードの描画
graph_develop();
void graph_appear_bullet(double x, double y, int col);//弾の射出エフェクト関数
}
#include "../include/GV.h"
void calc_appear_bullet(){
for(int i=0;i<APPEAR_BULLET_MAX;i++){
if(appear_bullet[i].flag>0){
if(appear_bullet[i].cnt<appear_bullet[i].to_cnt){
appear_bullet[i].brt -= 255/appear_bullet[i].to_cnt;
appear_bullet[i].scale -= 0.1;
}
}
}
}
void calc_main(){
void calc_appear_bullet();
}
#include "../include/GV.h"
void load(){
/*・・・*/
LoadDivGraph( "../dat/img/bullet/b15.png" , 10, 10, 1, 25, 26, img_bullet[12] );
}
#include "../../../include/DxLib.h"
#include "define.h"
#include "math.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h"
/*・・・*/
//構造体変数宣言部
GLOBAL appear_bullet_t appear_bullet[APPEAR_BULLET_MAX];//弾の射出エフェクトの構造体