当前位置: 首页 > news >正文

绍兴市工程建设网站劲松网站建设

绍兴市工程建设网站,劲松网站建设,网站建设维护费会计科目,外贸网站建设内容包括哪些目录 可能出现问题#xff08;在六部分的测试可能无法连接的问题【在末尾加上了#xff0c;怕有人没看见在这里写一下】#xff09; 自定义委托 调整位置 创建更多的委托和回调函数给菜单#xff1a; 多播和动态多播 代码#xff1a; 委托变量 代码#xff1a; 回…目录 可能出现问题在六部分的测试可能无法连接的问题【在末尾加上了怕有人没看见在这里写一下】 自定义委托 调整位置 创建更多的委托和回调函数给菜单 多播和动态多播 代码 委托变量 代码 回调函数 代码 绑定委托和动态函数 代码 头文件添加 代码 实现加入按钮 实现寻找函数 代码 实现寻找的回调函数 代码 菜单类的onfind回调函数 代码 加入会话函数 代码 加入会话的回调函数 代码 菜单内的加入回调函数 代码 防止可能出现的意外进行的添加 代码1 代码2 可能出现问题在六部分的测试可能无法连接的问题【在末尾加上了怕有人没看见在这里写一下】 打包测试发现在连接steam的情况下无法创建会话 对于这种情况我们打开 将这里改掉 自定义委托 相关内容可以查看 UE4/5CDelegate委托or代理的使用_多方通行8的博客-CSDN博客 在子系统创建自定义委托 然后在下面 这里的红线是说找不到并不需要在意如果这个时候启动或者热更新仍然是可以使用的说明这是对的如果看这个不爽老办法删除binary等文件 接下来我们来到菜单的头文件 然后声明。 因为我们要绑定到委托所以这个委托应该是在MenuSet中就进行绑定 之后我们到子系统里面 这样可以进行测试 不过我们如果在这里测试的话会发现直接就跳转到了另一个世界并没有打印出这些字。 因为在执行这里之前我们就已经跳转到另一个世界里了。 调整位置 这里我们需要将调整世界的函数换一个地方我是希望在所有回调函数执行后在执行这个所以要把这个红圈里面的ctrlx换一个地方 所以我们放在打印完毕之后狗头笑容 并且底下加一个如果创建失败的情况 测试 创建更多的委托和回调函数给菜单 因为子系统无法将相应的东西返回菜单类 所以我们在子系统里面做一些自定义委托 多播和动态多播 代码 //自定义委托用于回调到菜单类 //动态多播 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiOnCreateSessionComplete, bool, bWasSuccessful); //这里使用多播而不是动态多播 DECLARE_MULTICAST_DELEGATE_TwoParams(FMultiOnFindSessionComplete, const TArrayFOnlineSessionSearchResult SessionResult, bool bWasSuccessful); DECLARE_MULTICAST_DELEGATE_OneParam(FMultiOnJoinSessionComplete, EOnJoinSessionCompleteResult::Type Result); //动态多播 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiOnDestroySessionComplete, bool, bWasSuccessful); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiOnStartSessionComplete, bool, bWasSuccessful); 委托变量 然后在之前创建委托变量的地方 代码 FMultiOnCreateSessionComplete MultiPlayerOnCreateSessionComplete; FMultiOnFindSessionComplete MultiPlayerOnFindSessionComplete; FMultiOnJoinSessionComplete MultiPlayerOnJoinSessionComplete; FMultiOnDestroySessionComplete MultiPlayerOnDestroySessionComplete; FMultiOnStartSessionComplete MultiPlayerOnStartSessionComplete; 回调函数 然后是回调函数 代码 UFUNCTION()void onCreateSession(bool bWasSuccessful);void onFindSession(const TArrayFOnlineSessionSearchResult SessionResult, bool bWasSuccessful);void onJoinSession(EOnJoinSessionCompleteResult::Type Result);UFUNCTION()void onDestroySession(bool bWasSuccessful);UFUNCTION()void onStartSession(bool bWasSuccessful);绑定委托和动态函数 代码 MultiPlayerSessionSubsystem-MultiPlayerOnCreateSessionComplete.AddDynamic(this, ThisClass::onCreateSession);MultiPlayerSessionSubsystem-MultiPlayerOnFindSessionComplete.AddUObject(this, ThisClass::onFindSession);MultiPlayerSessionSubsystem-MultiPlayerOnJoinSessionComplete.AddUObject(this, ThisClass::onJoinSession);MultiPlayerSessionSubsystem-MultiPlayerOnDestroySessionComplete.AddDynamic(this, ThisClass::onDestroySession);MultiPlayerSessionSubsystem-MultiPlayerOnStartSessionComplete.AddDynamic(this, ThisClass::onStartSession); 头文件添加 在菜单的cpp文件中添加头文件 代码 #include OnlineSessionSettings.h #include Interfaces/OnlineSessionInterface.h 实现加入按钮 实现寻找函数 首先在子系统的头文件中做一个智能指针 制作完毕之后在cpp中开始实现这个find函数这个不是回调函数 代码 void UMultiPlayerSessionGISubsystem::FindSession(int32 findSessionMaxNum) {if (!mySessionInterface.IsValid()){return;}//会话接口委托列表添加委托然后句柄获取FindSessionsCompleteDelegateHandle mySessionInterface-AddOnFindSessionsCompleteDelegate_Handle(FindSessionsCompleteDelegate);LastSessionSearch MakeShareable(new FOnlineSessionSearch);//配对服务返回的查询的最大数目LastSessionSearch-MaxSearchResults findSessionMaxNum;//查询是否用于局域网匹配LastSessionSearch-bIsLanQuery IOnlineSubsystem::Get()-GetSubsystemName() NULL ? true : false;//SEARCH_PRESENCE :仅搜索存在会话(值为true/false)//QuerySettings :用于查找匹配服务器的查询LastSessionSearch-QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);//获取本地的玩家控制器const ULocalPlayer* playerControler GetWorld()-GetFirstLocalPlayerFromController();//搜索与指定匹配的对话//GetPreferredUniqueNetId 检索首选的唯一网id。这是为了向后兼容不使用缓存唯一网络id逻辑的游戏if (!mySessionInterface-FindSessions(*playerControler-GetPreferredUniqueNetId(), LastSessionSearch.ToSharedRef());){//寻找失败//清除mySessionInterface-ClearOnFindSessionsCompleteDelegate_Handle(FindSessionsCompleteDelegateHandle);//因为失败了所以传入的是一个空的数组和falseMultiPlayerOnFindSessionComplete.Broadcast(TArrayFOnlineSessionSearchResult(), false);} } 实现寻找的回调函数 代码 void UMultiPlayerSessionGISubsystem::onFindSessionComplete(bool bWasSuccessful) {if (mySessionInterface){//清除mySessionInterface-ClearOnFindSessionsCompleteDelegate_Handle(FindSessionsCompleteDelegateHandle);}//查找的会话数量if (LastSessionSearch-SearchResults.Num()0){//因为失败了所以传入的是一个空的数组和falseMultiPlayerOnFindSessionComplete.Broadcast(TArrayFOnlineSessionSearchResult(), false);return;}//传入菜单MultiPlayerOnFindSessionComplete.Broadcast(LastSessionSearch-SearchResults, bWasSuccessful); } 菜单类的onfind回调函数 代码 void UInPluginsMenu::onFindSession(const TArrayFOnlineSessionSearchResult SessionResult, bool bWasSuccessful) {if (MultiPlayerSessionSubsystem nullptr){return;}//遍历找到的会话数组for (auto Result : SessionResult){FString SettingsValue;//获取定义会话设置的key对应的value赋予SettingsValueResult.Session.SessionSettings.Get(FName(TEXT(MatchType)), SettingsValue);if (SettingsValue MatchType)//判断SettingsValue和MatchType是否一致即找到了会话{//加入会话在这里MultiPlayerSessionSubsystem-JoinSession(Result);return;}} } 加入会话函数 代码 void UMultiPlayerSessionGISubsystem::JoinSession(const FOnlineSessionSearchResult SessionResult) {if (!mySessionInterface.IsValid()){//无效情况下//广播到所有绑定对象UnknownErrorMultiPlayerOnJoinSessionComplete.Broadcast(EOnJoinSessionCompleteResult::UnknownError);return;}//获取句柄和委托列表添加JoinSessionCompleteDelegateHandle mySessionInterface-AddOnJoinSessionCompleteDelegate_Handle(JoinSessionCompleteDelegate);//加入会话const ULocalPlayer* localPlayer GetWorld()-GetFirstLocalPlayerFromController();if (!mySessionInterface-JoinSession(*localPlayer-GetPreferredUniqueNetId(), NAME_GameSession, SessionResult)){//加入失败//清除委托mySessionInterface-ClearOnJoinSessionCompleteDelegate_Handle(JoinSessionCompleteDelegateHandle);//广播回调函数为未知错误MultiPlayerOnJoinSessionComplete.Broadcast(EOnJoinSessionCompleteResult::UnknownError);} }加入会话的回调函数 代码 void UMultiPlayerSessionGISubsystem::onJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result) {if (mySessionInterface){//执行完成所以清除一下mySessionInterface-ClearOnJoinSessionCompleteDelegate_Handle(JoinSessionCompleteDelegateHandle);}//广播到菜单的onjoinsessionMultiPlayerOnJoinSessionComplete.Broadcast(Result); } 菜单内的加入回调函数 菜单cpp中添加头文件 #include OnlineSubsystem.h 然后 代码 void UInPluginsMenu::onJoinSession(EOnJoinSessionCompleteResult::Type Result) {IOnlineSubsystem* onlineSubsystem IOnlineSubsystem::Get();if (onlineSubsystem){//临时接口IOnlineSessionPtr TempMySessionInterface onlineSubsystem-GetSessionInterface();if (TempMySessionInterface.IsValid()){//给予tempAddress地址FString tempAddress;TempMySessionInterface-GetResolvedConnectString(NAME_GameSession,tempAddress);//从游戏实例里面获取本地的第一个玩家控制器APlayerController* playerControler GetGameInstance()-GetFirstLocalPlayerController();if (playerControler){//世界跳跃//旅行到不同的地图或IP地址。//在执行任何操作之前调用PreClientTravel事件。playerControler-ClientTravel(tempAddress, ETravelType::TRAVEL_Absolute);}}} } 防止可能出现的意外进行的添加 在菜单头文件添加这个头文件 代码1 #include Interfaces/OnlineSessionInterface.h 在子系统创建会话这里加这两个 代码2 //用于防止不同的构建在搜索期间看到彼此LastSessionSettings-BuildUniqueId 1;//支持api则使用LastSessionSettings-bUseLobbiesIfAvailable true; 测试结果是可以连接的不过创建会话的时候需要等待一会儿让steam完全连接加入会话也是一样
http://www.hkea.cn/news/14585835/

相关文章:

  • 六安做网站公司北京形势紧张
  • 做网站怎么租个空间wordpress子网站
  • 建设项目环境影响登记表备案系统网站最佳品牌营销策划公司
  • 珠海做公司网站遵义网站优化
  • 怎么做网站zwnetppt内容素材大全
  • 网站分页设计深圳网站建设品牌策划
  • 制作网站的软件公司网站怎么关闭
  • 英文网站设计方案网络营销书籍排行榜前十名
  • 杭州网站关键词推广sem是什么岗位
  • 韩国网站模板武安 制作网站
  • wordpress文章美化某网站搜索引擎优化
  • 镇江网站排名公司番禺移动网站建设
  • 微建站平台溧阳市建设网站
  • 建设家装网站国内设计师个人网页
  • 国内做优秀的农业信息网站wordpress 侧边导航菜单
  • 北京建设项目管理有限公司网站唐山做网站哪家好
  • dw课设做网站顺义制作网站
  • 问答系统网站模板网站界面类型
  • 微网站和app的区别公司管理系统有哪些
  • 自己做网站怎么维护承德网站建设怎么建设的
  • 杭州网站建设杭州手机网站建设初学者wordpress商城模板
  • discuz图片网站模板游戏网站开发推广计划书
  • 企业网站开发时间长春网站制作培训
  • 至高建设集团 网站商城网站wordpress
  • 甜品店网站建设的目的山西新冠最新消息今天
  • 营销网站建设平台公司网站建设费用怎么入账
  • 加油站项目建设背景wordpress设置邮箱
  • 织梦修改网站背景颜色深圳网站建设补助
  • wordpress 地址跳转网站自动seo
  • 河北住房和建设厅官方网站ie的常用网站