【发布时间】:2015-08-12 02:11:40
【问题描述】:
好的,所以对于像我这样的 C++ 相对论新手来说,我的情况真的很复杂。我正在制作一个游戏(AGK 库),并且我有一个框架类,它是所有游戏对象的基类,具有 frameEvent 等标准函数,这些函数将被子对象覆盖。
这一切都很好,花花公子,我已经通过开发获得了大约 70%,但我遇到了一个至关重要的问题。
为了在处理游戏时更轻松,作为游戏一部分的每个对象都只是 Framework* 类型向量中的一个指针。框架是基类。有人告诉我,将其设为指针允许我拥有不同类型的子对象,只要它们也是指针即可。到目前为止,它已经解决了。
每一帧,全局对象都遍历所有对象的向量,并运行它们的
frameEvent-
frameEndEvent-- 不能被覆盖 drawEvent
它们实际上只是函数。所以在敌人的子弹类中,我需要检查它是否与oPlayer发生碰撞,所以我在全局类中有一个函数(全局类在它们的帧事件中传递给对象,以便它们可以与其他对象进行通信。)抓取给定的对象。
它搜索所有对象以找到参数对象——所以如果我传递new oPlayer,它将在游戏中返回真正的oPlayer指针。
当子弹与玩家相撞时,它需要降低玩家的生命值,然后将自己摧毁。因此,在子弹的创建函数中,它创建了一个虚拟玩家,然后使用全局类函数定位真正的玩家。代码是
//Find the player
oPlayer* tempPlayer = new oPlayer;
playerChecker = ObjGlobal->classToObject(tempPlayer);
tempPlayer->objectDestroy();
该代码有效,但它需要 playerChecker 为 Framework* 类型,因为这是 classToObject 返回的内容。但是当我稍后使用该指针时,即使那是玩家的指针,我也无法访问玩家的成员。
playerChecker->hitPoints--;
hitPoints 是 oPlayer 独有的。我认为它被称为对象拼接或切片,但我认为这就是使用指针固定的。
所以我尝试让playerChecker 输入oPlayer*,但它说Framework* 无法转换为它。所以我不知道该怎么办。
非常感谢任何帮助。
【问题讨论】:
-
您应该尝试制作一个小示例程序来展示这个问题。关于您的代码,我们不得不猜测太多细节。
-
我可能完全误解了发生了什么,但是如果玩家与子弹碰撞而不是子弹与玩家碰撞,您是否能够调用函数,在这种情况下,您似乎可以在那里调整玩家的生命值。
-
这听起来很像虚拟成员函数会非常有用。可能无法完全解决您的问题,但由于您没有提到您的任何成员函数都是虚拟的,也许您没有使用它们?
标签: c++ class pointers inheritance