开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開(kāi)APP
          userphoto
          未登錄

          開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

          開(kāi)通VIP
          用粒子系統(tǒng)模擬煙花效果
          //定義粒子系統(tǒng)狀態(tài)#define PARTICLE_STATE_DEAD 0#define PARTICLE_STATE_ALIVE 1//定義粒子的類(lèi)型#define PARTICLE_TYPE_FLICKER 0#define PARTICLE_TYPE_FADE 1//定義粒子顏色#define PARTICLE_COLOR_RED 0#define PARTICLE_COLOR_GREEN 1#define PARTICLE_COLOR_BLUE 2#define PARTICLE_COLOR_WHITE 3//定義粒子數(shù)#define MAX_PARTICLES 512//顏色調(diào)色板索引范圍#define COLOR_RED_START 32#define COLOR_RED_END 47#define COLOR_GREEN_START 96#define COLOR_GREEN_END 111#define COLOR_BLUE_START 144#define COLOR_BLUE_END 159#define COLOR_WHITE_START 16#define COLOR_WHITE_END 31//風(fēng)力與重力影響x軸和y軸上速度大小const float particle_wind = 0.0f;const float particle_gravity = 0.0f;typedef struct tagPARTCLE { int state; //粒子狀態(tài) int type; //粒子效果類(lèi)型 int x,y; //位置 int xv,yv; //粒子速度 int curr_color; //當(dāng)前顏色 int start_color; //開(kāi)始顏色調(diào)色板索引 int end_color; //結(jié)束顏色調(diào)色板索引 int counter; //生命周期,幀數(shù) int max_count; //最大生命周數(shù)}PARTICLE, *PARTICLE_PTR;class Particle {public: PARTICLE particles[MAX_PARTICLES]; Particle() { Init_Reset_Particles(); }public: void Init_Reset_Particles(void); void Start_Particle(int type, int color, int count, float x, float y, float xv, float yv); void Process_Particles(void); void Draw_Particles(void); //模擬粒子爆炸效果 void Start_Particle_Explosion(int type, int color, int count, int x, int y, int xv, int yv, int num_particles); void Start_Particle_Ring(int type, int color, int count, int x, int y, int xv, int yv, int num_particles);};


          #include 'particle.h'void Particle::Init_Reset_Particles(void){ for (int index=0; index< max_particles;="" index++)="" {="" if="" (particles[index].state="=" particle_state_dead)="" {="" set="" index="" pindex="index;" break;="" }="" end="" if="" }="" did="" we="" find="" one="" if="" (pindex="=-1)" return;="" set="" general="" state="" info="" particles[pindex].state="PARTICLE_STATE_ALIVE;" particles[pindex].type="type;" particles[pindex].x="x;" particles[pindex].y="y;" particles[pindex].xv="xv;" particles[pindex].yv="yv;" particles[pindex].counter="0;" particles[pindex].max_count="count;" set="" color="" ranges,="" always="" the="" same="" switch(color)="" {="" case="" particle_color_red:="" {="" particles[pindex].start_color="COLOR_RED_START;" particles[pindex].end_color="COLOR_RED_END;" }="" break;="" case="" particle_color_green:="" {="" particles[pindex].start_color="COLOR_GREEN_START;" particles[pindex].end_color="COLOR_GREEN_END;" }="" break;="" case="" particle_color_blue:="" {="" particles[pindex].start_color="COLOR_BLUE_START;" particles[pindex].end_color="COLOR_BLUE_END;" }="" break;="" case="" particle_color_white:="" {="" particles[pindex].start_color="COLOR_WHITE_START;" particles[pindex].end_color="COLOR_WHITE_END;" }="" break;="" break;="" }="" end="" switch="" what="" type="" of="" particle="" is="" being="" requested="" if="" (type="=" particle_type_flicker)="" {="" set="" current="" color="" particles[pindex].curr_color="RAND_RANGE(particles[pindex].start_color," particles[pindex].end_color);="" }="" end="" if="" else="" {="" particle="" is="" fade="" type="" set="" current="" color="" particles[pindex].curr_color="particles[pindex].start_color;" }="" end="" if="" }void="" particle::process_particles(void){="" for="" (int="" index="0;">= particles[index].max_count) { particles[index].state = PARTICLE_STATE_DEAD; } } else { if (++particles[index].counter >= particles[index].max_count) { particles[index].counter = 0; if (++particles[index].curr_color>particles[index].end_color) { particles[index].state = PARTICLE_STATE_DEAD; } } } //屏幕邊界測(cè)試 if (particles[index].x>SCREEN_WIDTH || particles[index].x<0 ||="" particles[index].y="">SCREEN_HEIGHT|| particles[index].y<0) {="" particles[index].state="PARTICLE_STATE_DEAD;" }="" }="" }}void="" particle::draw_particles(void){="" ddraw_lock_back_surface();="" for="" (int="" index="0;">=SCREEN_WIDTH || x<0 ||="" y="">=SCREEN_HEIGHT || y<0) continue;="" draw_pixel(x,y,particles[index].curr_color,back_buffer,="" back_lpitch);="" }="" }="" ddraw_unlock_back_surface();}void="" particle::start_particle_explosion(int="" type,="" int="" color,="" int="" count,="" int="" x,="" int="" y,="" int="" xv,="" int="" yv,="" int="" num_particles){="" while(--num_particles="">=0) { int ang=rand()%360; float vel = 2+rand()%4; Start_Particle(type, color, count, x+RAND_RANGE(-50,50), y+RAND_RANGE(-50,50), xv+cos_look[ang]*vel, yv+sin_look[ang]*vel); }}void Particle::Start_Particle_Ring(int type, int color, int count, int x, int y, int xv, int yv, int num_particles){ // this function starts a particle explosion at the given position and velocity // note the use of look up tables for sin,cos // compute random velocity on outside of loop float vel = 200+rand()%4; while(--num_particles >=0) { // compute random trajectory angle int ang = rand()%360; // start the particle Start_Particle(type,color,count, x,y, xv+cos_look[ang]*vel, yv+sin_look[ang]*vel); } // end while}


          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
          打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
          猜你喜歡
          類(lèi)似文章
          用Javascript打造粒子引擎(第一部分)
          houdini 官方2小時(shí)超詳細(xì)逼真瀑布流體制作教程(解算篇)
          ZedGraph怎樣在生成曲線時(shí)隨機(jī)生成不一樣的顏色
          NeHe OpenGL第十九課:粒子系統(tǒng)
          粒子群算法
          歸并排序,快速排序,堆排序,冒泡排序 c語(yǔ)言源代碼
          更多類(lèi)似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服