首页 > 解决方案 > 是否可以在 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 个对象组合成一个对象,这样它甚至可以像单个形状一样具有自己的移动功能,而且它应该是可绘制的。我花了几天时间试图解决这个问题,但无济于事。

标签: sfml

解决方案


您可以创建一个Car继承sf::Drawable和重载该draw()函数的类。然后,您可以添加您的自定义功能,例如move()您可以从汽车中获得的任何东西。这样,您可以根据需要实例化Car任意数量的 s 并像使用任何其他 SFML 形状一样绘制它们。
这是. _sf::Drawable


推荐阅读