【问题标题】:how to pass information from one class to another如何将信息从一个类传递到另一个类
【发布时间】:2015-07-04 15:28:25
【问题描述】:

我正在使用一个函数,它将获取两个类的状态我应该如何生成该函数,现在我正在这样做

 if((b1.fxmin>s.xmin&&s.ymin==b1.fymax)&&b1.fxmin<s.xmax&&s.ymin==b1.fymax))
  { 
    collides=true;
    b1.isFiring=false;
  }
Else if((b1.fxmin>s1.xmin&&s1.ymin==b1.fymax)&&b1.fxmin<s1.xmax&&s1.ymin==b1.fymax))
 {
   collides1=true;
   b1.isFiring=false;
 }

在这个项目中,子弹会击中蜘蛛,如果它碰撞蜘蛛就会消失,b1是子弹类的对象,s1s 是蜘蛛。

我在这个游戏中有 7 个蜘蛛,我创建了 7 个碰撞变量和 7 个 if 语句,这意味着当我增加一个蜘蛛时,我需要添加这个碰撞变量和 if 语句

我尝试在子弹课上这样做,但没有成功。我应该如何将蜘蛛对象传递给子弹类?

【问题讨论】:

  • 我在类 Program 的 main 函数中做这一切
  • 欢迎来到 Stack Overflow。如果你想要一个以一个子弹和一个蜘蛛作为参数的非成员函数,那么你应该编辑标题;这是不准确的。你能告诉我们更多关于你希望这个函数做什么以及碰撞标准的信息吗?
  • 谢谢你的建议,>每次发射子弹时都会检查是否与蜘蛛重合,发射子弹时调用此函数,b1.isFiring=true,这些if语句正在检查子弹是否碰撞,如果发生碰撞,则子弹发射状态将设置为 false,collides(本地变量)将设置为 true,如果 collides 为 true,则它将从屏幕上移除蜘蛛
  • 这不能回答你的问题(我认为 benjy 做得很好),但我建议将你的子弹和蜘蛛声明为数组而不是单个变量。这将为您节省大量重复代码。然后你可以迭代:foreach (b in bullets)b.collides(s)

标签: c# c++ oop interface


【解决方案1】:

您可以将 Spider 传递给子弹类,如下所示:

// Bullet.h
class Spider;

class Bullet {
  ...
  bool isColliding(const Spider &s);
}

// Bullet.cpp
#include "Spider.h" // or whatever header you're using.
...
bool Bullet::isColliding(const Spider &s) {
  // Collision logic
}

然后您可以通过以下方式从您的 main 中调用此函数:

if(b1.isColliding(s1)) {
  // Do something.
}

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点。首先,您必须明确从两个不同的类中比较的变量是私有变量还是公共变量?

    如果它们是公共变量,则将地址对象作为输入参数传递给函数......就像这个函数(class1 * ptr1,class2 * ptr2)......并在函数内部使用->访问这些变量。 .

    但是,如果您将这些变量用作各个类的私有成员,则有一种好方法可以做到这一点..称为朋友类..您使一个班级成为另一个班级的朋友..然后您可以使用必须是一个类成员的函数访问另一个类的变量,即使它们是私有的..google 朋友类以获取更多信息。

    【讨论】:

      猜你喜欢
      • 2019-11-19
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2011-08-26
      • 1970-01-01
      相关资源
      最近更新 更多