【发布时间】:2014-03-03 21:56:24
【问题描述】:
好的,经过几次不同的尝试,我一直在为这个问题而烦恼。为了提供一些背景知识并希望对这个问题有适当的了解,我将解释我的代码是如何设置的。
- 我有一个指向 player_ 的指针列表,其中包含两个 HumanPlayer 类对象。
- 每个 HumanPlayer 都包含一个 Snake_List 列表属性,这些列表的片段包含 x 和 y 数据。我想对照第二个 HumanPlayer 的 Snake_List 的 x 和 y 坐标的每一部分检查第一个 HumanPlayer 的 Snake_List 的 x 和 y 坐标的前面。
我当前的代码在应该执行此操作的函数中看起来有点像这样:
for(Entity* player : entityList)
{
Player* p = dynamic_cast<Player*>(player);
Player* p2 = dynamic_cast<Player*>(player++);
if(p)
{
i=p->Snake_List.begin();
for(m=p2->Snake_List.begin(); m != p2->Snake_List.end(); m++)
{
if (i!=m)
{
if ((i->x == m->x) && i->y == m->y)
{
p->respawn();
return;
}
}
}
}
}
这编译并运行良好,但碰撞并没有给我想要的效果。实际上什么也没发生。我真的认为我没有正确引用第二个 HumanPlayer 的列表,但如果有人可以帮助照亮它,我将不胜感激:)
【问题讨论】:
-
您意识到
p和p2具有相同的值吗?您为什么要无缘无故地使用晦涩的增量运算符来欺骗自己? -
你知道
p和p2一开始都指向同一个玩家吗? -
@KerrekSB 这是我的问题,我不知道如何指向列表中的第二个玩家
-
@JonathanPotter 这就是我遇到的问题,我实际上不知道指向列表中的下一个玩家。声明它的列表行(它在另一个链接文件中)看起来像这样 std::list
player_ { new HumanPlayer( "Solid Snake"), new HumanPlayer ( "Liquid Ocelot")};我一直有这个问题,感谢您的回复,因为我不确定它是否指向同一件事,尽管我有疑问 -
不要使用基于范围的
for循环。
标签: c++ list class pointers comparison