c++ - 我应该如何将对象传递给类以检查碰撞?

标签 c++ class oop breakout data-members

我正在使用 SFML 库在 C++ 中制作 Breakout 游戏,我有一个“桨”类和一个“球”类,它们都在使用渲染窗口的“游戏”类中更新和渲染来自“窗口”类。

我的问题是,为了确定 Ball 对象是否与 Paddle 对象发生碰撞,我显然需要访问 Paddle 对象的 x/y 位置数据成员。我正在为每个对象使用一个更新(或滴答)函数,我不想只将对 Paddle 对象的引用传递给 Ball 的更新函数。

实现我想要的功能的公认方法是什么?

这是我的 Ball 标题:

class Ball
{
public:
    Ball(float x, float y, int size, sf::Vector2f moveSpeed);
    ~Ball();

    void Tick();
    void Move();
    void Render(sf::RenderWindow& window);
    void Reset();

    sf::Vector2f GetMoveSpeed() { return m_moveSpeed; }

private:
    void CheckCollision();

    int m_size;
    sf::Vector2f m_moveSpeed;
    sf::Vector2f m_position;
    sf::CircleShape m_ballCircle;
};

这是我的游戏更新函数:

void Game::Update()
{
    m_window.Update();
    m_ball.Tick();
    m_paddle.Tick();
}

最佳答案

使用单独的对象实现更新球的算法。该对象了解您的所有数据:球和桨,并计算新位置。

您可以将算法注入(inject)到您的游戏类中,该类将包含指向接口(interface)的指针。这允许您在不更改 Game、Ball 或 Paddle 类的情况下更改算法。

关于c++ - 我应该如何将对象传递给类以检查碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49192946/

相关文章:

c++ - 为什么 INTEGRAL_MAX_BITS 会返回小于 64 的值?

C++ Solaris 特殊字符的大写转换不起作用

c++ - 类 C++ 黑白棋程序的问题

c# - 在 C# 中模拟基数分配有多接近

c++ - Windows编程教程中未解析的外部符号__RTC_*

c++ - 在哪里可以找到带有源代码的简约 WDM 驱动程序模板?

C++ 覆盖基本成员值

java - 检查父类(super class)的智能方法

java - 使用 JDBC 将 RDBMS 转换为 OOP,将 SQL 转换为 Java

java - 我可以使用超过 32 GB 的堆和压缩 oops