我应该如何将对象传递给类以检查冲突?

时间:2018-03-09 11:39:20

标签: c++ class oop breakout data-members

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

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

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

这是我的Ball标题:

$this->findModel($v)

这是我的游戏更新功能:

$selectEmployee = "SELECT employeeId FROM employee WHERE status='ACTIVE'";
$queryEmployee = mysqli_query($conn, $selectEmployee);
if(mysqli_num_rows($queryEmployee) > 0){
   while($employeeRow = mysqli_fetch_assoc($queryEmployee)){
         $employeeId = $employeeRow['employeeId'];
         $insert = "INSERT INTO attendace (employeeId, inTime, outTime, date)
         VALUES ('$employeeId', '$inTime', '$outTime', '$date')";
         $query = mysqli_query($conn, $insert);
        }
  }

2 个答案:

答案 0 :(得分:1)

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

您可以将算法注入您的游戏类,该游戏类将保存指向界面的指针。这允许您在不改变Game,Ball或Paddle类的情况下更改算法。

答案 1 :(得分:0)

让你的Game检查碰撞并妥善处理它们:

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

    if(areColliding(m_ball, m_paddle))
    {
        resolveCollision(m_ball, m_paddle);
    }
}

在这种情况下,areCollidingresolveCollision可以是private的{​​{1}}成员函数。