sfml - 是否可以在 sfml 中创建一个由平行四边形、一个矩形和两个轮子组成的汽车对象?
问题描述
我用 C++ 和 sfml 创建了一辆汽车:
方法如下:
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
using namespace std;
using namespace sf;
int main()
{
RenderWindow window(VideoMode(1500, 600), "SFML Window", Style::Default);
window.setVerticalSyncEnabled(true);
cout << "haha" << endl;
VertexArray curve(LinesStrip);
for (int x = 0; x <= 1500; x+=50)
{
curve.append(Vertex(Vector2f(x, 300 - cos(x)*200)));
}
ConvexShape carRoof;
RectangleShape carBody;
CircleShape backWheel, frontWheel;
carRoof.setPointCount(4);
carRoof.setOutlineThickness(4);
carRoof.setPoint(0, Vector2f(38, 55));
carRoof.setPoint(1, Vector2f(50, 45));
carRoof.setPoint(2, Vector2f(80, 45));
carRoof.setPoint(3, Vector2f(92, 55));
carRoof.setOrigin(0, 0);
carRoof.setFillColor(Color::Black);
carRoof.setPosition(0, -4.0f);
carBody.setOutlineThickness(4);
carBody.setSize(Vector2f(90, 14));
carBody.setPosition(20, 58.5);
carBody.setFillColor(Color::Black);
backWheel.setRadius(8);
backWheel.setPointCount(100);
backWheel.setPosition(35, 75);
backWheel.setOrigin(4, 4);
backWheel.setOutlineThickness(4);
backWheel.setFillColor(sf::Color::Black);
frontWheel.setRadius(8);
frontWheel.setPointCount(100);
frontWheel.setPosition(80, 75);
frontWheel.setOrigin(4, 4);
frontWheel.setOutlineThickness(4);
frontWheel.setFillColor(sf::Color::Black);
Event event;
while (window.isOpen())
{
while(window.pollEvent(event))
{
if (event.type == Event::Closed)
{
window.close();
}
}
window.clear();
window.draw(curve);
window.draw(carRoof);
window.draw(carBody);
window.draw(backWheel);
window.draw(frontWheel);
window.display();
}
return 0;
}
我想知道如何创建一个类 Car 以便将这 4 个对象组合成一个对象,这样它甚至可以像单个形状一样具有自己的移动功能,而且它应该是可绘制的。我花了几天时间试图解决这个问题,但无济于事。
解决方案
您可以创建一个Car
继承sf::Drawable
和重载该draw()
函数的类。然后,您可以添加您的自定义功能,例如move()
您可以从汽车中获得的任何东西。这样,您可以根据需要实例化Car
任意数量的 s 并像使用任何其他 SFML 形状一样绘制它们。
这是. _sf::Drawable
推荐阅读
- r - R包安装失败:ld:找不到框架CoreFoundation clang-7:错误:链接器命令失败,退出代码为1
- python - 如何在打印结果中没有元素本身的情况下执行循环
- javascript - 在JS中取出Object的子属性
- python - 如何使动态对象名称分配给一个类?/ 如何创建多个对象名称不同的窗口 Tkinter
- django - vimeo 从 django 上传私人视频
- sql-server - 如何解决 Azure CD 中的 SQL 数据库数据移动错误
- excel - Application.Onkey 的问题
- python - python中的偏斜t分布
- r - 为什么 `pivot_wider` 不能在 `data.table` 上工作
- azure - 具有存储服务终结点策略的 VNET 中的 Azure Batch