其实书早就印好了,只是因为遇上国庆,物流不发图书,只能等国庆之后才能陆续上架各大网店了~预计下周就能看到了。
由于之前2.0版本一书的光盘损坏的概率不够小,所以这次就不提供随书光盘了,而是采取官网下载的方式。
书里可能提示得不够清楚,这里给各位读者提示一下,源码下载地址:http://www.phei.com.cn/module/zygl/zxzyindex.jsp
找到我这本书的两个文件,下载就可以了~
另外,我自己也传了一些资料到云盘,都是些旧版本的东西,现在不好找到(2017.05.11更新):
书籍项目:http://pan.baidu.com/s/1bRUWlK
NDK R9B :http://pan.baidu.com/s/1i5hVILn
cocostudio1.2.0:http://pan.baidu.com/s/1pLF92JL
Cocos2d-x3.0:http://pan.baidu.com/s/1hsPrhGw
Android-SDK离线包:http://pan.baidu.com/s/1o7MMOrS
最后,感谢各位喜欢这本书的读者,所谓酒逢知己千杯少,知音难寻。
我能遇到这么多知音,实在是足够了。(小若:别傻了,他根本就不会喝酒,更不会弹琴~!)
对于那些不喜欢我这本书的朋友,你们放心,我不会恨你们的。
部分购买地址如下:
你好请问,要是我对一个按钮使用了addTouchEventListenr注册监听事件,然后可以在监听函数里面找到这个按钮对象吗,如果可以要怎么做呢
对不起…我已经多年没有接触cocos引擎了,我凭印象猜测一下:
1. 一般在事件触发时,会有一个叫做sender的object,这个就是触发事件的对象,也就是那个按钮
2. 订阅事件的时候可以传递参数,在触发事件时可以获取到这个参数,你可以传递这个button对象进去
我倾向于第一种,我印象中cocos是有sender参数的。
木头,你代码我已经全部跑了一遍,全部可测, 但是代码基本上没有defensive check,移植的时候稍稍修改就是一堆问题。
我最近在用你的塔防移植成一个自己设计的游戏(非塔防),所以移植的时候遇到很多问题,不继续在你网站上灌水啦,开个博客来填坑,大神你没事儿上去看看指导指导哈,谢谢谢谢。
比如今天的问题。本来我打算有一个story的时间去根据坐标动态实现八方向角色的跑动动画。本来很简单的事情,但是还是有问题。绕来绕去又跑回C++的基础了。所以,当我觉得当把自己的游戏写完的时候,不仅cocos2d-x掌握了,c++也能学到一个。
http://blog.163.com/leek_w/blog/#m=0&t=1&c=fks_085065093087081064087086082095085095081075084083083074085
加油,写博客是个好习惯(话说为什么不在CSDN写呢?)
又发现塔防移植过程中bug一枚,mark
hero的atk speed是从csv文件里读出来的,子弹的速度是hardcode为0.5.
默认csv的atk speed是1s,子弹的atk speed是0.5s,那么子弹在0.5攻击完之后,hero需要额外等0.5s发射下一颗子弹。
子弹中包含了aim的地址,在子弹arrive之后,会调用aim的hert函数减hp。
那么问题来了,下面的一个scenaro会出现segv:
1. 设置子弹的speed为1.5s,设置hero的speed为1s。
2. 英雄会在第一颗子弹没有arrive时发射下一颗子弹,这样英雄会同时发射多颗子弹。
3. 在aim死掉之后,还有子弹没有arrive。
4. SegV。
Root Cause:
子弹存了aim的地址,这个地址会在aim死掉是被erase。当aim erease时,还有子弹正在飞,arrive之后,aim已经被free,继续调用会出现非法访问地址。作者已经加了defensive check,判断指针是否为null,然并卵。
Solution:
Option1: 只要子弹的速度不大于英雄一次攻击的速度,没问题。
Option2: 子弹到达后,遍历一遍aim list,判断当前aim是否存活。
用Option1吧先,mark mark,先这样吧,先这样吧,穷举各种rainy case没完没了,没完没了
哈哈哈,好喜欢你的专研精神,实话说,在创业公司待久了,连个像样的开发者都没有(没钱招),我现在真是求贤若渴啊(但是不招人不招人…)
又发现作者bug一枚,fix花了两个小时, 啦啦啦。
基于作者塔防逻辑的移植实现一个新的逻辑,英雄检测到小怪之后,移动到小怪的点,进行攻击,攻击之后,接着按指定的路径接着走到终点。
Tollgate->heroMgr->checkAtkMonster->m_atkMonster->isDead->monsterList.eraseObject(m_atkMonster).
之后发现英雄打死小怪之后,卡在那里不动。
各种加log,发现monsterList在erase the monster of the died之后,在chooseAim里,monsterList的个数还是不变。
也就是删除没有起作用。
在checkAtkMonster的声明, checkAtkMonster(float ft, Vector monsterList), monsterList是copy的一个副本,应该声明成& monseterList).
之后调试还是不起作用。后来发现monsterList至少被嵌套了4层,从顶层一路路改成引用,终于work啦。
哈哈哈,谢谢谢谢,动手能力强的读者什么的,最让人舒心了。
cocos2dX 游戏开发之旅3.x的源码找不到了
抱歉,链接过时了。已更新最新下载链接。
链接在哪里呀?
就是这篇文章的链接,已经是更新过的了。
书籍项目:http://pan.baidu.com/s/1bRUWlK
VS2017 没有找到extionsion库怎么办。。
如果是运行3.0的引擎,还是建议和书上一样的版本的vs(有点麻烦,抱歉),新版本的vs,对旧版本的引擎似乎不太友好,总是有点错误。
那个运行显示 无法打开包括文件: “Macros.h”: No such file or directory 是什么情况
好久没折腾这引擎了,我已经看不出是什么错误了╯︿╰
为什么下载失败呢
下载失败?是打不开网址,还是下载过程中出错呢?
– 。- helloworld 的我都不能运行 不知道为什么。。。
这,由于书籍对应的引擎版本比较老了,学习书上内容的话,建议用书上一致的版本(包括UI编辑器什么的),不然可能会有很多问题。
但是HelloWorld也运行不了,我就有点尴尬了…
14章,上篇,没有白色线框,加断点调试,反现应该是没有调用darw,反复对照你的源码,发现好多错漏的地方。希望作者调整。
好,不过现在应该不会再重印了
在哪里调用draw
在哪里调用draw
是啊,我的版本是3.12, draw也没有被invoke
我在PosBase.c PosBase::init(Point pos)里自己绘制,同样的效果喽
bool PosBase::init(Point pos) {
log(“Enter PosBase init 1 parameter”);
bool bRet = false;
do {
setPos(pos);
auto rect = DrawNode::create();
rect->drawRect(Vec2(pos.x – 32, pos.y + 32), Vec2(pos.x + 32, pos.y – 32), Color4F(1.0, 0, 0, 1.0));
this->addChild(rect);
bRet = true;
} while (0);
return bRet;
}
测试works
14章接着边读边调试,还是有问题,就是monster也会调用PosBase类,需要区分rect和circle。所以把图draw在tos和monster就可以了。
画线也有问题,测试DrawPrimitives类已经不再支持,workaround是在TowerPosEditorLayer::loadConfigFile()通过DrawNode来划线。
最后感谢一下作者:)
谢谢反馈,书籍引擎版本确实太旧了。
我想问一下书里第四章的按钮监听事件,怎么我的代码在运行时总会出现写入某某某位置时发生访问冲突,而且左下方的窗口里this的值显示为null,是怎么回事?而且我运行书籍源码,游戏程序能打开,但是一点按钮就游戏卡死会跳到vs的窗口,左下角也是显示this。
具体是哪一个源码?我运行看看,项目名称告诉我一下
Chapter4_3_HelloUI
我运行没问题吖..断点停在哪句代码了?
CCScrollView.cpp,行393和HelloWorldScene.cpp,行81
81行是这个东西:}你确定是这个么?
另外,为什么你直接运行书里的项目也会报错?没修改任何东西?
刚才从书里的网站重新下了一个cocostudio重新弄了一个helloui,结果没错了,重新用之前百度的cocostudiov1.4.0.1就会出错,晕…..
网站做的好棒哦
网站棒棒哒
木头兄,我现在使用新版的cocostudio,改动比较大,发现没有专门的UI编辑器,应该是全部整合到一起了吧然后发现不知道在哪里可以导出书中的.Exporttjson文件?只看到有.csb文件,在VS里面直接编译也看到用的是这个文件,担不知道如何才能调用UI呢?麻烦告知一下啊,谢谢
我没有研究新版本啦,新版确实没有json文件了,使用方式的话,官方demo就能找到
请问下官方demo的具体下载位置是哪里啊?哎,找了官网一圈都找不到,特来求助,谢谢啊
官方demo是和引擎一起的吧?就是默认的工程
木头,你在这本书中第14章 “因为偷懒儿诞生的《卡牌塔防》游戏(上篇)”里(P331页),代码清单14-1中案例中,TowerPosEditorScene.cpp文件中的 Scene * TowerPosEditorScene::scene() { … }这个应该是Scene * TowerPosEditorScene::createScene()吧,我在TowerPosEditorScene.h文件中类的定义中只发现了state Scene* createScene()函数,没有scene()函数。
那应该是写错了,哈哈
还有啊,在P331页中bool posBase::init(Point pos){ do { setPos(pos); … }}那个setPos(pos)函数名称中,只大写P后编译器就无法识别,如果全小写setpos(pos)或者 S和P大写 SetPos(pos)则可以识别出来,这个setpos就是PosBase.h中定义的CC_SYNTHESIZE(Point, m_pos, pos);函数。
啊?你看看书籍源码有没有这个问题
有,源码中Chapter14_2_CardDefence01 ~ 08系列工程中的PosBase.cpp文件中都是setPos(pos)。
木头哥,我想问一下,解决方案资源管理器里cocos2d-win32.vc2012‘的所有项目都不可用,是哪里出了问题(我q:2498833877,我加你了,不过你没接受申请,能不能先接受我的申请,我发图给你看)
不使用QQ了。这种情况有可能是项目版本和你的vs版本不一致,只是猜测
木头哥,请问一下第一次运行你的项目文件就遇到编译错误:2>项目文件包含 ToolsVersion=”12.0″ 设置,但此工具集未知或缺失。您可以通过为此工具集安装相应的 .NET Framework 来解决此问题。将项目视为具有 ToolsVersion=”4.0″ 设置。2>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V110Microsoft.Cpp.Platform.targets(44,5): error MSB8020: The builds tools for v120 (Platform Toolset = ‘v120’) cannot be found. To build using the v120 build tools, either click the Project menu or right-click the solution, and then select “Update VC++ Projects…”. Install v120 to build using the v120 build tools.3>项目文件包含 ToolsVersion=”12.0″ 设置,但此工具集未知或缺失。您可以通过为此工具集安装相应的 .NET Framework 来解决此问题。将项目视为具有 ToolsVersion=”4.0″ 设置。1>项目文件包含 ToolsVersion=”12.0″ 设置,但此工具集未知或缺失。您可以通过为此工具集安装相应的 .NET Framework 来解决此问题。将项目视为具有 ToolsVersion=”4.0″ 设置。我是不是应该修改什么设置啊,我的是win764位系统,和vs2012,希望解答
项目是2013的,你用的是2012,所以有这些错误
木头,我买你的cocos2d.x开发之旅,光盘不见了,发份源码给我吧。445748217@qq.com
3.x版本的光盘:http://yunpan.cn/cgIg9TNm7SUQh 提取码 6bb7
木头,你好,在你的cocos2dx 2.x开发之旅中第五章102页中,判断怪物是否碰撞玩家语句里else if(monster->isCollideWithPlayer(m_player))中m_player一直提示“未定义标识符”,我也看了你的源码都没问题,引用都没错,怎么还一直报这个错啊?求教
应该是书上漏了说了,你看看书籍源码,里面是有定义m_player这个成员变量的。
2d-x2.x版本的源码有没?
http://yunpan.cn/Q7DDHKvWqDzDp (提取码:b17f)不知道版本是不是最新的
你现在3.0版本的书和现在的3.6区别大吗?
有不少的区别,最明显的是Cocostudio的API,还有3D(3.0没有3D)
木头哥,第八章的代码里有个Layer* parent = (Layer*)getParent(); 这段代码,我运行以后说parent值为空,为什么呢,不知道什么原因
你当前这个对象的父节点,类型确定是Layer么?也就是说,你的这个对象是不是addChild到一个Layer身上?
Layer* parent = (Layer*)getParent(); 这段代码在Player类里的void Player::setViewPointByPlayer()这里,TollgateScene继承了Layer,也在这里添加了addChild(player),如下 void TollgateScene::addPlayer(TMXTiledMap* map){ auto sprite = Spirte::create(“”); auto player = Player::create(); player->bindSprite(sprite); player->run(); TMXObjectGroup* objGroup = map->getObjectGroup(“”); ValueMap playerPointMap = objGroup->getObject(“”); Float pointx = playerPointMap.at(“x”).asFloat(); Float pointy = playerPointMap.at(“y”).asFloat(); player->setPosition(Point(pointx,pointy)); this->addChild(player); auto simplemovecontroller = SimpleMoveController::create(); simplemovecontroller->setSleep(2); this->addChild(simplemovecontroller); player->setController(simplemovecontroller); player->setTMXTiledMap(tmap); }通过木头哥的书在学做游戏,在mac上,应该是我在有些地方出问题,新手,求告知
addPlayer也在TollgateScene初始化里init()里添加了
这我也看不出来了,建议用“注释法”确认问题代码在哪里,也就是把大部分逻辑注释掉,看还有没有问题,有问题,就继续注释,没问题,就慢慢放开注释,直到出现问题为止。
好的,谢谢木有哥。Allocating an object of abstract class type 是不是这个类里有虚函数没有实现?virtual定义的对吗,都实现了啊?
那,检查看看有没有遗漏的…说不定就是一个小地方错了
嗯,找到了,谢谢,就是主角类继承了实体类,实体又继承了监听控制器的接口类,需要重写并实现这个接口里的方法。还有个地方不是很懂,我发现木头哥你的代码里,实体类重写了接口类里的2个方法,但是在主角类里只重写了一个,另一个并没有重写。也没有报错。可在我的代码里,我如果不把2个全重写,就会报Allocating an object of abstract class type这个错。
你的父类有实现接口的方法吗?实体类实现的是接口的方法,而主角类是继承了实体类的,它只是重写父类的方法,与接口无关了。我是这么理解的。
木哥,你认为一个游戏要做到什么程度才能在面试时拿来吹?
差不多2年前,我去一家游戏公司面试,拿着自己用Cocos2d-x做的第一个游戏(那时候我也刚研究这引擎不久)去面试。技术主管只说了一句:“哈哈,我最恨这类型的游戏了”,然后他只是随便点了几下,而我最用心制作的剧情却一眼都没有看。笔试题是C++,我做得很烂,因为那时候我对C++还很生疏,我全用Java的思维去回答。最后,我进了这家公司(虽然后来因为某些原因我还是离开了)。说了这么多,我只是想表达一个意思:我回答不了你的这个问题…因为,这完全取决于面试官是谁。如果硬是要我说一个答案的话,那,我想说的是——在你面试之前,你能做到的你所认为的最好的程度,就可以拿去吹了~【PS:我爱自己的每一个烂游戏~!
】
嗯,谢谢木哥的回答。我还是照着自己的喜好做游戏吧,想着面试都影响我发挥创造力了
木头哥,我现在还在看你2.x的书,是不是cocos3.0以后都是用c++11写的?这本书是不是都是用c++11讲解的?
不是的,只不过是用了一些C++11的语法而已,感觉大家对C++11好像有点奇特的看法….书里讲的是Cocos2d-x,与C++11没有任何直接关系,API里用了C++11的语法,那么我就会讲解到,书籍并不是以C++为重点
木头哥,有没有好一点cocos2d-x的项目全套源码分享网站,现在找不到源码学习,跪求!!
就知道一个9秒,靠不靠谱就不知道了
木头哥,看完了你的3.x,就是有个问题:网上下载的那些cocos2d3.x手游源码怎么导入vs2013,每次导入都有一大堆错误。能详细点吗?初学者,这本书快看完了,但是觉得还很不够,能不能推荐一下比较好的 书
入门之后就没什么推荐了,要看也不需要看Cocos2d-x的书了,而是看其他的技术书籍。接下来你可以写2到3个游戏,花上2个月到6个月的时间,到时候就算是对Cocos2d-x游戏开发有个不错的基础了。最重要的是掌握解决问题的能力,因为不管我们变得多牛,问题都会不断出现。导入项目有错误,就尝试去解决吧,没有固定的教程,因为问题太杂了…不要害怕问题,我从菜鸟时期开始(现在也还在努力),一直都是一个人折腾过来的,根本没人帮我
。
好羡慕你想写什么就能写什么!看完你的书之后虽然能跟着你的思维看懂代码的意思,但是我压根还不知道怎么去写一个游戏,因为我不知道从何下手,茫茫然,不知道一个游戏该用什么去联系起来,怎么去实现!木头有过这经历吗,怎么解决的呢?
我可不是想写什么就写什么,写新东西的时候还是要各种折腾了
你的经历每个人都有,而且没法解决,只能随着时间的流逝慢慢减弱,对未知的恐惧,是永远都不会消失的吧..所以,你要做的是,写自己的游戏,在写的过程中去成长,最好是所有的问题都自己解决(哪怕一个问题花一个星期)。你是看不见自己的成长的,但你会猛然发现自己变强了。
木头,对游戏的逻辑和实现要怎么锻炼?需要多久?