Cocos2d-x飞机大战教程笔记

      咳咳~跟着大神的教程学做Cocos2d-x的飞机大战...鉴于我是那种跟着教程都会出很多错的人,所以还是一路跟着做些笔记比较好。而且由于是用课余时间,所以只能断断续续地做,写下来也好让自己别忘记~

2014/4/22  Day01

      从apk解压获取素材,再用TexturePacker拼接成plist和png。话说TexturePacker是收费的啊...7天免费,还可以申请1年的使用期。之前看书还看到有个神器叫zwoptex,貌似是免费的,可惜只有Mac版...╮(╯_╰)╭However,这次用到它只是1分钟的功夫...以后的事就慢慢考虑吧。嗯,还有就是,plist和png都是放在工程的Resources目录下的,写代码获取文件的时候写文件名就可以了。如果放在Resources目录的子目录下,就把子文件夹名加上去就OK。(这句说给自己听的)记得用斜杠“/”不是反斜杠"\"...(via http://blog.csdn.net/jackystudio/article/details/11650413 )

      然后创建GameScene.h、GameScene.cpp、GameLayer.h、GameLayer.cpp。

      加载背景滚动图的时候,报了这样的错:

      ①error C2440: “=”: 无法从“cocos2d::CCLayer *”转换为“GameLayer *”
                从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast

      ②fatal error C1083: 无法打开包括文件:“GameScene.h”: No such file or directory

      一开始还真的跟着提示加了个dynamic_cast...结果没有用。上网查了才知道,原来是这样解决的....
      工程属性->配置属性->C/C++->常规->附加包含目录,把报错类的目录加进去。在这里加的就是$(ProjectDir)和$(ProjectDir)inc,根据宏定义,$(ProjectDir)就是工程下的proj.win32目录,额,inc据说是子目录。而且我试了下,两个都是要加的,只加其中一个还不让编译通过...(via http://www.cnblogs.com/txg-blog/archive/2011/03/07/1974857.html )
      按上述步骤设置之后,①②都没有了,但是!又报了这样的错:
      ③fatal error C1083: 无法打开包括文件:“AppDelegate.h”: No such file or directory
      好吧看了下,这个AppDelegate.h是Classes目录下的,所以加进去的是$(ProjectDir)..\Classes。
      终于不报错了,可是!说好的滚动背景呢!为什么只有黑乎乎的屏幕...再看了看教程里面的示例代码,发现自己的GameScene.h写少了这样一个东西:
      CREATE_FUNC(GameScene); 是调用create()函数的宏。嗯,GameLayer.h里也要写一个 CREATE_FUNC(GameLayer); 好,背景终于滚出来了,没有教程评论里说的黑边...窃喜~

      大神说将GameLayer加到GameScene里面,然后以后的PlaneLayer、EnemyLayer、BulletLayer之类的都加到GameLayer上。虽然书上也有说Layer之间可以相互调用,但我觉得我还是比较想把之后的Layer都加到GameScene里面。所以对于PlaneLayer对象,我还是在GameScene的init()里面调用create()创建并且addChild()。(via http://blog.csdn.net/jackystudio/article/details/11713197 )

      显示飞机的这一步,报了个链接错误:

      ④error LNK2001: 无法解析的外部符号 "public: static class PlaneLayer * PlaneLayer::sharedPlane" (?sharedPlane@PlaneLayer@@2PAV1@A)

      ....Plane.exe : fatal error LNK1120: 1 个无法解析的外部命令

      果断google...(基础没打好什么都要google的人真悲哀。)static变量的定义应该是这样的:

            <数据类型><类名>::<静态数据成员名>=<值>(via http://hi.baidu.com/albert02/item/8ac9464992e5ce0ac11613b5 )

      我写的是这样的:PlaneLayer* sharedPlane = NULL; ....改成PlaneLayer* PlaneLayer::sharedPlane = NULL; 之后不报错了,飞机也出现了,闪了闪之后尾巴一直在喷火\(^o^)/背景也在滚,所以还是可以在GameScene里面创建PlaneLayer的~(其实本来就可以..)好,明天继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值