如何从ExitGames::Common::Object& eventContent中获取事件数据?
How to obtain event data from ExitGames::Common::Object& eventContent?
参考这个 link “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?或者指出上面代码中的错误。非常感谢!
请尝试以下代码:
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->getValue() 中获取该信息,并且它不能基于 return 类型获取该信息,因此您必须通过编写 ValueObject<type>
而不仅仅是 ValueObject 来明确指定 ValueObject 实例的预期有效负载数据的类型,因此在您的情况下 ValueObject<float>
.
参考这个 link “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?或者指出上面代码中的错误。非常感谢!
请尝试以下代码:
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->getValue() 中获取该信息,并且它不能基于 return 类型获取该信息,因此您必须通过编写 ValueObject<type>
而不仅仅是 ValueObject 来明确指定 ValueObject 实例的预期有效负载数据的类型,因此在您的情况下 ValueObject<float>
.