文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在Cocos2D-X游戏开发中多线程基础教程

lzzyok小宝贝

lzzyok小宝贝

2024-04-23 22:58

关注

  应该又部分同学试过要将Cocos2D的项目转移到Cocos2d-x上吧,在Cocos2D的多线程项目跟Cocos2D-X的实现不一样哦,本篇教程将解读Cocos2D-X中的多线程。

  最近在修改一个cocos2d的项目,要把它移植到Cocos2d-x,原来的项目中用到了多线程,但是在cocos2d-x中的实现有点不太一样。

  简单线程开启方法如下代码所示:

  头文件:

  .h

在Cocos2D-X游戏开发中多线程基础教程_Cocos2D-X线程_Cocos2D-X教程_游戏开发_编程学习网  

  cpp文件

  

  二 加载Plist

  我们可以在新开的线程中,加载资源,设置一个静态变量bool,在新线程中,当加载完所有资源后,设置bool值为真。在主线程中Update中,检测bool值,为假,可以重绘UI(例如,显示加载图片,或者模拟加载进度),为真,则加载目标场景。

  相关代码如下:

  

  成功加载且运行后,你会发现新场景中所有精灵都不显示(类似于黑屏了)。为什么呢?

  因为我们在加载plist文件时,addSpriteFramesWithFile方法里会帮我们创建plist对应Png图的Texture2D,并将其加载进缓存中。可是这里就遇到了一个OpenGl规范的问题:不能在新开的线程中,创建texture,texture必须在主线程创建.通俗点,就是所有的opengl api都必须在主线程中调用;其它的操作,比如文件,内存,plist等,可以在新线程中做,这个不是cocos2d不支持,是opengl的标准,不管你是在Android,还是Windows上使用opengl,都是这个原理。

  所以不能在新线程中创建Texture2D,导致纹理都不显示,那么该怎么办?让我们看看CCSpriteFrameCache源码,发现CCSpriteFrameCache::addSpriteFramesWithFile(const char *PszPlist, CCTexture2D *pobTexture)方法,是可以传入Texture2D参数的。是的,我们找到了解决方法:

  相关代码如下:

  

  这样解决,就不违背OpenGl规范,没有在新线程中创建Texture2D。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-游戏开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯