C++ SFML 对象不会绘制
C++ SFML object won't draw
在下面的代码中,我试图在复合对象中绘制一个圆形对象,但它无法绘制。我不知道为什么。此代码永远不会到达圆形绘制方法。
如果我直接调用main.cpp中circle的draw()方法,它会绘制。。
可提取.h
#pragma once
#include <SFML/Graphics.hpp>
class drawable{
public:
drawable(sf::Vector2f position);
virtual void draw(sf::RenderWindow & window){};
sf::Vector2f position;
};
class circle : public drawable{
public:
circle(sf::Vector2f position);
void draw(sf::RenderWindow & window) override;
};
class composite : public drawable{
public:
composite(sf::Vector2f position, drawable part);
void draw(sf::RenderWindow & window) override;
private:
int count = 0;
drawable part;
};
可提取.cpp
#include "drawable.h"
#include <iostream>
using namespace std;
drawable::drawable(sf::Vector2f position) : position{ position } {
}
circle::circle(sf::Vector2f position) : drawable{ position } {
}
composite::composite(sf::Vector2f position, drawable part) : drawable(position), part{ part }{
}
void circle::draw(sf::RenderWindow & window) {
sf::CircleShape circle;
circle.setPosition(position);
circle.setRadius(30);
window.draw(circle);
}
void composite::draw(sf::RenderWindow & window) {
this->part.position.x = this->position.x + part.position.x;
this->part.position.y = this->position.y + part.position.y;
this->part.draw(window);
}
main.cpp
#include <SFML/Graphics.hpp>
#include "drawable.h"
int main()
{
sf::RenderWindow window = sf::RenderWindow{ sf::VideoMode{ 640, 480 }, "SFML window" };
circle circle{ sf::Vector2f{ 100, 200 } };
composite composite(sf::Vector2f{ 200, 200 }, circle);
window.clear();
composite.draw(window);
window.display();
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)){
if (event.type == sf::Event::Closed){
window.close();
}
}
sf::sleep(sf::milliseconds(20));
}
return 0;
}
Composite
按值取drawable
。这意味着在composite
中,您只能得到drawable
对象;关于混凝土类型的所有信息都将丢失。如果你想支持多态对象,你需要使用指针或引用。
相关文章:
- 无法使用VAO和EBO(openGL)绘制多个对象
- 绘制一个对象,比较模具缓冲区的两个不同值
- 在 Vulkan 中绘制多个对象
- 当我尝试绘制 sf::Text 对象时,SFML 中的分段错误
- Opencv,在图像中的对象周围绘制一个框
- 将自定义可绘制对象存储在数组中会导致绘制时出现分割错误
- 使用OpenGL绘制更多对象时,性能会降低
- 如何在调用函数时将对象绘制到 sfml 窗口上
- SFML 2.4.2 在绘制 sf::Text 对象之前获取本地边界
- 如何确定我跟踪的对象球是否越过我绘制的线
- SFML 对象在重新初始化其父类时不会绘制
- SFML在另一个对象上方绘制对象
- 添加可绘制对象层以将逻辑与图形分离
- 为什么 OpenGL 不从 std::vector 绘制对象?
- 无法在C++图形中绘制对象
- QOpenGLWidget绘制对象
- 使用glDrawElements从WRL(VRML)文件中绘制对象
- 使用Qt和C++连续绘制对象
- 如何编辑SFML源代码来添加一个新的可绘制对象
- 在while (window.isOpen())循环之外绘制对象