欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【iOS-cocos2d-X 游戏开发之十一】使用New CCSprite() CCUserDefault要注意!

发布时间:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【iOS-cocos2d-X 游戏开发之十一】使用New CCSprite() CCUserDefault要注意! 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 本站文章均为 李华明Himi 原创,转载务必在明显处注明:

转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2dx/703.html

          ☞ 点击订阅 ☜
 本博客最新动态!及时将最新博文通知您!

 

本章讲解的是几个细节问题,但是此细节有可能导致一系列问题,那么今天Himi与童鞋们共同交流分享下;

一.   对于CCSprite 与 CCNode  是都很常用的类,那么基础使用方法这里不赘述,但是CCSprite 与 CCNode在进行添加子类时可能有些童鞋遇到过问题,下面我们详细看下:

  • CCSprite* sp = CCSprite::spriteWithFile("Icon.png"); 
  • sp->setPosition(ccp(200,200)); 
  • sp->addChild(CCSprite::spriteWithFile("Icon.png")); 
  • this->addChild(sp); 
  • //this 是个Layer 
  • 索引图片名直接创建个精灵A,然后A add 子类精灵,最后将A添加Layer中,没说的,eazy,不解释;

    首先给出代码段1:

    那么再看下面代码段2:

  • CCSprite* sp = new CCSprite(); 
  • sp->setPosition(ccp(200,200)); 
  • sp->addChild(CCSprite::spriteWithFile("Icon.png")); 
  • this->addChild(sp); 
  • //this 是个Layer 
  • 顺序和功能跟代码段1一样,但当你运行后发现程序异常!原因是sp 中并没有真正的初始化,而仅仅简单的申请了一块内存而已;

    解决方案:仍然调用CCSprite公开的几个构造函数即可;

  • CCSprite* sp = new CCSprite(); 
  •  //CCSprite构造下 
  •  sp->initWithFile("Icon.png"); 
  •  sp->setPosition(ccp(200,200)); 
  •  sp->addChild(CCSprite::spriteWithFile("Icon.png")); 
  •  this->addChild(sp); 
  • 此问题比较容易理解,但是当我们出现以上问题时,肯定是想不想创建一个精灵时传入资源,所以会使用new方式来使用,那么如果你想创建一个没有贴图的精灵可以按照如下方式实现:

  • CCSprite* sp = (CCSprite*)CCNode::node(); 
  • sp->setPosition(ccp(200,200)); 
  • sp->addChild(CCSprite::spriteWithFile("Icon.png")); 
  • this->addChild(sp); 
  • 利用Node::node初始化数据后强转给CCSprite子类即可;话说回来既然如此到不如使用CCNode来的方便?!没错,如果你想封装一个精灵,并往里添加子精灵,那么创建这个精灵如不想使用资源创建,那么推荐使用CCNode,(自定义类型继承CCNode),另一方面如果创建这个精灵可以索引到资源,可以继承CCSprite,没问题;

    值得注意的是:

    当你自定义A类继承精灵类CCSprite,使用new形式创建A类一个精灵后并addChild子精灵,一般不会造成程序异常,而且正常运行在iOS上,但是当你编译后运行Android上之后会发现精灵都是白色块的情况,如下前后对比图:

    iOS运行截图:

    编译Android运行截图:

     

    二.  在cocos2dx中使用CCUserDefault的时候要注意,官方微薄也已提示,在当你setStringxxx、setBoolxxx等数据后要调用CCUserDefault的flush()函数,只有当你flush()了,才会将数据以xml格式保存本地App->Documents目录中!

    三. 在cocos2dx中使用pvr.ccz格式的图片时候跟cocos2d的使用有一点区别,在cocos2d中加载pvr.ccz的图片资源不用去管大小和尺寸(当然为了兼容老代机器,推荐1024*1024),但是在Cocos2dx中当你的pvr.ccz的资源大小宽高不是正方形的话(2 的N次幂),会在控制台提示警告,并且!虽然程序能正常运行,但是在编译后Android上无法正常显示,是显示图片为白色块!所以这点也要注意;

    转载于:https://blog.51cto.com/xiaominghimi/863417

    《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

    总结

    以上是生活随笔为你收集整理的【iOS-cocos2d-X 游戏开发之十一】使用New CCSprite() CCUserDefault要注意!的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。