参考此链接" http://recruit.gmo.jp/engineer/jisedai/blog/cocos2d-x_photon/",我尝试使用cocos2dx 2.2.6和photon sdk v4-0-0-运行显示简单网络功能的示例5。该指南建议以这种方式实现customEventAction:
void NetworkLogic::customEventAction(int playerNr, nByte eventCode, const ExitGames::Common::Object& eventContent)
{
ExitGames::Common::Hashtable* event;
switch (eventCode) {
case 1:
event = ExitGames::Common::ValueObject<ExitGames::Common::Hashtable*>(eventContent).getDataCopy();
float x = ExitGames::Common::ValueObject(event->getValue(1)).getDataCopy();
float y = ExitGames::Common::ValueObject(event->getValue(2)).getDataCopy();
eventQueue.push({static_cast(playerNr), x, y});
break;
}
}
Xcode给出的错误是:
Cannot refer to class template "ValueObject" without a template argument list
我自己不熟悉模板,是否有人可以提出一个合适的方法,可以让我提取事件数据,以便将其推送到eventQueue?或者指出上面代码中出了什么问题。非常感谢提前!
答案 0 :(得分:1)
请尝试以下代码:
void NetworkLogic::customEventAction(int playerNr, nByte eventCode, const ExitGames::Common::Object& eventContent)
{
ExitGames::Common::Hashtable* event;
switch (eventCode) {
case 1:
event = ExitGames::Common::ValueObject<ExitGames::Common::Hashtable*>(eventContent).getDataCopy();
float x = ExitGames::Common::ValueObject<float>(event->getValue(1)).getDataCopy();
float y = ExitGames::Common::ValueObject<float>(event->getValue(2)).getDataCopy();
eventQueue.push({static_cast(playerNr), x, y});
break;
}
}
对于x和y,我刚刚将ExitGames::Common::ValueObject
更改为ExitGames::Common::ValueObject<float>
。
使用模板,编译器需要一种方法来找出它应该创建模板的类型。
由于编译器无法从参数 event-&gt; getValue()获取该信息,并且因为它无法根据返回类型执行此操作,因此您必须指定通过编写ValueObject<type>
而不仅仅是ValueObject显式地显示ValueObject实例的预期有效内容数据的类型,因此在您的情况下ValueObject<float>
。