能否提供一份用C++编写的烟花效果(图形展示)的代码示例?
时间: 2024-10-19 11:16:27 浏览: 129
在C++中,创建烟花效果通常涉及到图形库,如SFML、OpenGL等。这里我将提供一个简单的基于SFML库的二维烟花粒子系统的基础代码示例,用于演示基本概念:
```cpp
#include <SFML/Graphics.hpp>
#include <random>
class FireworkParticle {
public:
sf::CircleShape shape;
sf::Color color;
FireworkParticle(float x, float y, float radius, sf::Color col)
: shape(radius), color(col) {
shape.setPosition(x, y);
}
};
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "Fireworks");
window.setFramerateLimit(60);
std::vector<FireworkParticle> particles;
// 创建一些随机位置和颜色的粒子
for (int i = 0; i < 50; ++i) {
float x = std::rand() % 700;
float y = std::rand() % 500;
float r = std::rand() % 10 + 10;
sf::Color c = sf::Color(std::rand() % 256, std::rand() % 256, std::rand() % 256);
particles.push_back(FireworkParticle(x, y, r, c));
}
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
// 更新和绘制粒子
for (auto& particle : particles) {
particle.shape.move(particle.shape.getSpeedX(), particle.shape.getSpeedY());
if (particle.shape.getPosition().y > window.getSize().y)
particles.erase(std::remove(particles.begin(), particles.end(), particle), particles.end());
window.draw(particle.shape);
}
window.display();
}
return 0;
}
```
这个例子创建了一个包含随机位置和颜色粒子的向量,并在一个循环中更新它们的位置并清除超出屏幕底部的粒子。这只是一个基础的烟花效果,真正的烟花动画会更复杂,可能需要处理粒子的生命期、轨迹、亮度变化等因素。
阅读全文