代码拉取完成,页面将自动刷新
//Arrow3粒子引擎
/* 星星 */
class star
{
public:
/* 位置 */
float x;
float y;
float z;
int life; /* 生存时间,过则死亡 ,每60帧算一次时间 */
};
/* 特效粒子(有别于星星) */
class grain
{
public:
float dx, dy, dz;
float x;
float y;
float z;
color_t color;
int size;
int life;
};
vector<star> stars; /* 星星列表 */
vector<grain> grains; /* 特效粒子列表 */
/* 特效粒子引擎 */
inline void runGrain()
{
vector<grain> s_grains;
grain t_g;
int dz = 1;
int d = 0;
if ( grains.size() > MAXGRAINSNUM ) {
dz = grains.size() / MAXGRAINSNUM;
}
for ( grain & g : grains ) {
g.life--;
d++;
g.x += g.dx;
g.y += g.dy;
if ( g.life >= 0 && d % dz == 0 ) {
s_grains.push_back( g );
}
}
grains = s_grains;
s_grains.clear();
}
inline void drawGrain()
{
float px, py;
for ( grain g : grains ) {
px = g.x;
py = g.y;
if ( px - pX + getwidth() / 2 < 0 || py - pY + getheight() / 2 < 0 || px - pX + getwidth() / 2 > getwidth() || py - pY + getheight() / 2 > getheight() )
continue;
setcolor( g.color );
setfillcolor( g.color );
ege_fillellipse( px - pX - g.size / 2 + getwidth() / 2, py - pY - g.size / 2 + getheight() / 2, g.size, g.size );
}
}
/*
* 生成粒子,从左到右参数分别为
* 粒子数量、粒子位置、粒子中心发散轴线、发散范围(最左到最右) 、最小速度、最大速度、粒子最小大小、粒子最大大小 、粒子最短寿命、粒子最长寿命、粒子透明度(随机情况下使用)、粒子颜色是否随机、不随机的话粒子的统一颜色
* 参数有关度数的全部是弧度
*/
inline void summonGrains( int num, float x, float y, float r, float rf, float minV, float maxV, int minsize, int maxsize, int minlife, int maxlife, int alpha, bool rcolor, color_t color )
{
grain g;
float R;
for ( int n = 0; n < num; n++ ) {
g.x = x;
g.y = y;
R = randomf() * rf - rf / 2 + r;
J2DtoS2D( g.dx, g.dy, R, random( (float) maxV - minV ) + (float) minV );
g.size = random( maxsize - minsize ) + minsize;
g.life = random( maxlife - minlife ) + minlife;
if ( rcolor )
g.color = EGECOLORA( hsl2rgb( random( 360 ), 1, 0.5 ), alpha );
else g.color = color;
grains.push_back( g );
}
}
/* 星星引擎 */
inline void runStar()
{
vector<star> s_stars;
star t_s;
/* 自动补充 */
while ( stars.size() < STARNUM ) {
t_s.x = (pX + random( getwidth() ) - getwidth() / 2);
t_s.y = (pY + random( getheight() ) - getheight() / 2);
t_s.z = random( MAXVL );
t_s.life = STARMINLIFE + random( STARMAXLIFE - STARMINLIFE ) + STARMINLIFE;
stars.push_back( t_s );
}
for ( int i = 0; i < stars.size(); i++ ) {
t_s = stars[i];
if ( t_s.life > 0 && t_s.x - pX + getwidth() / 2 >= 0 && t_s.x - pX + getwidth() / 2 <= getwidth() && t_s.y - pY + getheight() / 2 >= 0 && t_s.y - pY + getheight() / 2 <= getheight() ) {
s_stars.push_back( t_s );
}
stars.pop_back();
}
stars = s_stars;
s_stars.clear();
}
/* mode=0绘制玩家以下,反之绘制玩家以上 */
inline void drawStars( bool mode )
{
float x, y;
setfillcolor( WHITE );
setcolor( WHITE );
for ( int i = 0; i < stars.size(); i++ ) {
if ( mode ) {
if ( stars[i].z >= ITEMZ )
continue;
perPro( stars[i].x - pX, stars[i].y - pY, stars[i].z, x, y, MAXVL );
fillellipse( (x+ getwidth() / 2), (y + getheight() / 2), 3, 3 );
} else {
if ( stars[i].z < ITEMZ )
continue;
perPro( stars[i].x - pX , stars[i].y - pY , stars[i].z, x, y, MAXVL );
putpixel( (x+ getwidth() / 2), (y+ getheight() / 2), WHITE );
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。