21xrx.com
2025-06-11 11:49:27 Wednesday
文章检索 我的文章 写文章
用C++编写简单烟花特效代码
2023-07-05 13:00:24 深夜i     82     0
C++ 烟花 特效 编写 简单

烟花特效是一种非常常见的视觉效果,可以用来增强游戏场景,或者在网页动画中增加互动性。本文将介绍使用C++编写简单的烟花特效代码。

首先,我们需要了解烟花特效的原理。一般来说,烟花特效可以通过模拟粒子的运动来实现。具体来说,我们可以先在屏幕中生成一些小颗粒(即粒子),然后给它们一些随机的速度,让它们向不同的方向运动。当粒子到达屏幕某一位置时,我们就可以让它“爆炸”,即发射出一些新的粒子,模拟烟花爆炸的效果。

接下来,我们就可以开始编写代码了。为了简化代码,我们采用了SFML库来进行图形绘制。代码如下:

#include <SFML/Graphics.hpp>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <ctime>
const int WIDTH = 800;
const int HEIGHT = 600;
struct Particle
  float x;
void spawnParticle(std::vector<Particle>& particles, float x, float y, sf::Color color) {
  int num = rand() % 30 + 30;
  for (int i = 0; i < num; i++) {
    Particle p;
    p.x = x;
    p.y = y;
    float angle = rand() * 2 * M_PI / RAND_MAX;
    float speed = rand() % 50 + 50;
    p.vx = speed * std::cos(angle);
    p.vy = speed * std::sin(angle);
    p.dead = false;
    p.color = color;
    particles.push_back(p);
  }
}
int main() {
  sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Fireworks");
  
  std::srand(std::time(nullptr));
  
  std::vector<Particle> particles;
  bool running = true;
  while (running) {
    window.clear();
    
    for (auto& p : particles) {
      if (p.dead) continue;
      
      p.x += p.vx;
      p.y += p.vy;
      p.vy += 0.1;
      
      if (p.y > HEIGHT) {
        spawnParticle(particles, p.x, p.y, p.color);
        p.dead = true;
      }
      
      sf::RectangleShape rect(sf::Vector2f(3, 3));
      rect.setPosition(p.x, p.y);
      rect.setFillColor(p.color);
      window.draw(rect);
    }
    
    if (rand() % 500 == 0) {
      float x = rand() % WIDTH;
      float y = HEIGHT;
      sf::Color color = sf::Color::White;
      spawnParticle(particles, x, y, color);
    }
    
    window.display();
    
    sf::Event event;
    while (window.pollEvent(event)) {
      if (event.type == sf::Event::Closed)
        running = false;
      
    }
  }
  
  return 0;
}

在这个代码中,我们定义了一个结构体`Particle`,来表示每一个小颗粒的状态。在`spawnParticle`函数中,我们根据传入的坐标和颜色,生成一些新的小颗粒。具体来说,我们生成的小颗粒数量在30至60之间,速度和方向都是随机的。

在主循环中,我们不断更新每一个小颗粒的位置,同时检测它们是否已经到达了屏幕的底端。如果是的话,我们就会让它“爆炸”,即生成一些新的小颗粒。此外,我们还会每隔一段时间,随机生成一些新的小颗粒,模拟烟花爆炸的效果。

最后,我们使用SFML库中的函数来显示每一个小颗粒和烟花特效的效果。

总之,本文介绍了如何使用C++和SFML库来编写简单的烟花特效代码,希望对大家有所帮助。如果您感兴趣,可以自己尝试改进代码,实现更加丰富的特效。

  
  

评论区