关于cocos2d x官网-x开发wp游戏的问题

主题 : wp8环境问题?徐玉涛-基于Cocos2d-X&forXNA的WP游戏开发pgjk
3月31日新闻,微软技术平台经理徐玉涛在第四届Cocoachina开发者大会发表题为“基于Cocos2d-X
forXNA的Windows Phone游戏开发”的主题演讲。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="//Img.jpg" ALT="" ALIGN="middle"
TITLE="徐玉涛-基于Cocos2d-X&forXNA的WP游戏开发pgjk" />微软技巧平台经理徐玉涛
以下是演讲实录:
各位开发者大家好!
很愉快今天在这样一个特别的日子来到Cocos2d开发者大会,为什么今天特殊呢?由于我们介绍完Cocos2d-XforXNA以后,大家可以找到电信厅,就可以购置Windows
Phone手机了,今天是Windows Phone在中国上市的第一天。
作为一个新的平台我们有哪些新的货色?咱们会为开发者筹备什么样好的干货,我会用5页的PPT给大家介绍。Cocos2d-X社区的开发者做了大批的工作,我盼望把后面的时光还给他们,让他们更多的给大家先容一下这个引擎到底是什么样的情形。我叫徐玉涛,我在微软开发工具与平台事业部,大家对开发有兴致的能够随时跟我接洽。
我报告的主题叫“全新全易”,微软这样一个很关怀游戏开发的公司,我们在后期作为游戏开发者,可以在三屏一云的策略下我们的PC端、手机端,甚至当前可能会进入中国的电视端会看到同一的用户体验。对游戏开发者的利益是,你可以让你的游戏在三不同的平台上,在三个不同的用户休会场景下取得一样的游戏体验,所以我们在不同的装备上,通过一致的用户体验衔接了花费者渝开发者,同时我们也为开发者提供了一套统一的开发平台,你可以把你的游戏发送到不同的设备上去。
我们看一段小的视频。Windows
Phone,全新全易,开发者怎么懂得它?全新而言我们带来了市场机遇,在两周前我去了上海,我见了一个做挪动游戏开发的搭档,他告知了一个数据,欧洲市场在从前三个月里面,每个月的增长率到达了90%,在Windows
Phone的平台上,带来了可观的增加。假如在座的开发者感到自己的游戏品德无比好可以联系我们,在Windows
Phone里面有一个打着标签的游戏,这类游戏是要通过认证的。如果你对本人的游戏品质很有信心,你对海外市场也比拟有信念,你可以找我们,通过我们可以跟他们树立联系,在线客服,他会有一套方式帮你的游戏做审核,你的游戏是否达到品质。
作为一个开发者,在六年前我也是做开发,做开发最苦楚的是要一直地保护代码,考虑不同的环境,不同的设备。Windows
Phone在这款操作体系设计之时就想到了这个问题,大家在做Windows
Phone游戏开发的时候,你只须要关注好你自己的代码、游戏创意、内容,不用斟酌这款游戏做出来会不会在不同品牌手机上运行会有问题,大家不用关心。以后大家在市道上买这么多Phone的手机,固然有不同物理屏幕的尺寸,然而辨别率是统一的,对开发者来说不必更多的考虑适配。在权利方面,我们也带来了两个维度,一个是MSDN,我们已经把所有的各种各样的开发文档,包含SPK都发到MSDN上,大家可以去分享。
说一下Cocos2d-X for XNA的身世,去年Cocos2d找到我们,愿望我们在Windows
Phone上做开发。通过我们配合,大家相互支持,这个版本已经停当了。我们做过一些评估,工作量一下降落了50%,是十分可观的,目前已经开发下载了,同时也是开源免费的。在开发者运动上,我们有一个网站,在这里大家可以看到我们有哪些开发者支撑规划,甚至有一个SDK跟中国电信协作,大家可以到中国电信的游戏核心,我们还给开发者供给开发者打算。
客服360可提升并优化所有营销、售后服务阶段。
这使得您可以使用更少的时间,跟踪更多的销售机会,做出更加准确的营销,更加准确的售后服务,并实现销售业绩的持续增长。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置 & &
& Cocos2d-x for XNA游戏引擎全面支持WP7
Cocos2d-x for XNA游戏引擎全面支持WP7
17:27:20&&
编辑:wang2 &&)
让小伙伴们也看看:
文章观点支持
当前平均分:0(0 次打分)
[04-04][04-04][04-03][04-02][04-02][04-02][04-01][04-01][03-31][03-31]
登录驱动之家
没有帐号?
用合作网站帐户直接登录&如何使用cocos2d-x3.0制作一个打地鼠的游戏:第一部分
如何使用cocos2d-x3.0制作一个打地鼠的游戏:第一部分
程序截图:
  目前,网上有许多关于cocos2d的教程了,但是,却没有一个教程把制作一个游戏相关的所有细节都放在一起来开发一个游戏。因此,这个教程应运而生了。
  这是一个非常好的机会来介绍一个新的话题:如何制作一个游戏,让它同时在iphone、ipad和支持高清(retina)显示的iphone上面运行。对于其他平台而言就是怎样做多套图让游戏自适应不同分辨率屏幕。
  这个教程建立在下列教程的基础之上:
  如果你还没有阅读上面这些教程,强烈建议你先读一读。
  这是一个两部分的教程。在第一部分中,我们将会创建基本的游戏框架--有一些可爱的地鼠从洞里面钻出来。我们将会花费大量的时候来讨论如何组织图片资源和坐标计算,以便于你的游戏能够同时运行在不同分辨率上面,同时还要保证游戏性能!
规划图片资源: 了解
  因为,我们想让这个应用能够同时运行在不同分辨率从设备上面,所以,我们需要花点时间来仔细考虑一下,如何制作图片,主要是图片的尺寸!
  为了理解到底多大的尺寸合适,首先,我们要弄清楚cocos2d-x的多分辨率适配,本来我是想要摘取部分,但发现作者写得太好了,又讲的是原理,确实不好简写,所以请大家直接阅读完上面链接再继续吧。由于这篇文章比较新,函数和用法基本与现在一致,唯一说明一下的是文中提到的kResolutionExactFi变成了ResolutionPolicy::EXACT_FIT,同理其他四个都更名了,自己查看定义或者官方文档了解新名字,换个马甲而已。
规划图片资源:规划
  好,基于上面的了解,下面是这篇教程的图片资源规划:
设计分辨率定为512X384,会自动转换到不同分辨率显示,从设计分辨率到设备分辨率我们指定策略ResolutionPolicy::NO_BORDER,然后让cocos2d-x自动帮我们转换。
高清图片可以通过TexturePacker转换成普清的,并且生成相应的spritesheet。
高清的图片在hd文件夹下,而普清的图片则载sd文件夹下。cocos2d会根据当前的分辨率而加载相应的图片。
  首先,下载这篇教程的,解压,然后看看里面有什么:
在“foreground”文件夹中,前景大小为(也就是iPad的大小),但是,它实际上被划分为两个部分:上半部和下半部。因为我们将在这两个部分当中放置三个“地鼠洞“,这样就会看起来,地鼠真的是从地底下钻出来的。
在”background“文件夹中,iPad的纵横比是1.33,所以一半是512X384.这是因为,背景实际上是看不到的,只有通过3个地鼠洞才可以看到背景。这么小的范围,完全没有必要加载一张的图片。相反,我们加载一张小图片,然后放大。
在"sprites”文件夹中,所有的精灵都被设置成可以放到960X640的“可玩区域”内。注意,还有一个地鼠图片,二个地鼠动画(一个笑的动画,一个被打中时的动画)。
  好了,有足够的背景信息了--是时候开始动手了!
Getting Started
  直接在终端运行“python cocos目录/tools/project-creator/create_project.py”。在图形化界面里创建工程WhackAMole,单击create。
  接下来,确保你已经安装了TexturePacker。如果你还不知道怎么使用它,可以查看。
MAC + Xcode
  这里遵照原文特点把在mac+xcode环境下用脚本自动生成SpriteSheet过程说明,如果是windows环境或者下面在给xcode集成脚本遇到问题。请直接跳过
  接下来,把你刚刚下载下来的图片资源文件夹全部拷到工程目录下面。它的位置应该是Classes文件夹的兄弟,如下图所示: 
  你可以打开TexturePacker工具,并为这个项目创建所有的sprite sheet。你也可以使用TexturePacker的命令行工具,它可以和XCode集成,并且处理起来更加高效!
  右击Resources,选择”New File...“,选择Mac OS X\Other\Shell Script,再点Next。取名为PackTextures.sh,然后点Create。
  然后把PackTextures.sh里面的内容替换成下面的代码:
TP="/usr/local/bin/TexturePacker"
SRC="/Cocos/projects/WhackAMole/Art"
echo "building..."
${TP} --smart-update \
--format cocos2d \
--data resources/hd/background.plist \
--sheet resources/hd/background.pvr.ccz \
--dither-fs \
--opt RGB565 \
${SRC}/background/*.png
${TP} --smart-update \
--format cocos2d \
--data resources/sd/background.plist \
--sheet resources/sd/background.pvr.ccz \
--dither-fs \
--scale 0.5 \
--opt RGB565 \
${SRC}/background/*.png
${TP} --smart-update \
--format cocos2d \
--data resources/hd/foreground.plist \
--sheet resources/hd/foreground.pvr.ccz \
--dither-fs-alpha \
--opt RGBA4444 \
${SRC}/foreground/*.png
${TP} --smart-update \
--format cocos2d \
--data resources/sd/foreground.plist \
--sheet resources/sd/foreground.pvr.ccz \
--dither-fs-alpha \
--scale 0.5 \
--opt RGBA4444 \
${SRC}/foreground/*.png
${TP} --smart-update \
--format cocos2d \
--data resources/hd/sprites.plist \
--sheet resources/hd/sprites.pvr.ccz \
--dither-fs-alpha \
--opt RGBA4444 \
${SRC}/sprites/*.png
${TP} --smart-update \
--format cocos2d \
--data resources/sd/sprites.plist \
--sheet resources/sd/sprites.pvr.ccz \
--dither-fs-alpha \
--scale 0.5 \
--opt RGBA4444 \
${SRC}/sprites/*.png
  注意:编者上面使用的是绝对路径,请大家自己根据自己的情况设置。
  这个脚本运行TexturePacker来为背景图片、前景图片和精灵图片创建相应的精灵表单(sprite sheet)--同时包含高清的和普清的。
  注意,每一个图片都被保存为pvr.cca格式,因为,这是一种磁盘占用空间小,并且内存消耗也少的图片格式。当然,像素格式和抖动选项也被设置了,这是一个折中,综合考虑内存消耗和图片显示质量。
  如果你对TexturePacker的这些选项的功能不是很清楚,你可以打开终端(Terminal),然后输入TexturePacker,那么就会有完整的选项功能列表。
  接下来,你需要做一些设置,在你的工程每次编译的时候,可以运行这个shell脚本。如下图所示顺序点击Add Target:
  然后选择OS X\Other\External Build System\Next:
  创建target,填好后选finish:
  设置TexturePacker。(这里编者使用的绝对路径,请大家自己根据情况修改,上面那个是我们的sh文件路径,下面这是工程目录)。
  最后一步,就是为你的程序设置target依赖。照着下图顺序点完后,添加TexturePacker这个target:
  编译你的工程,如果输出结果如下图所示,那么就证明你的配置OK。
  上面配置个环境很麻烦吧。但是配置好了后你就会很方便,长痛不如短痛嘛。所以读者根据自己的情况修改。如果大家实在配置不好,或者是其他平台的,看后面的教程手动导吧。
  接下来,把刚刚生成的精灵表单和相应的属性列表增加到项目中。右击Resources,选择“Add Files...”,然后选择hd和sd文件(总共有12个文件),再点Add.如果做完后,那么看起来会是下图这个样子:
  如果你愿意,你可以双击任何一个.pvr.ccz文件,打开看看,里面到底有什么。你就会发现TexturePacker有多么方便了!
windows + vs
  这里我们只举一个例子,其他的请自己弄。
${TP} --smart-update \
--format cocos2d \
--data resources/sd/foreground.plist \
--sheet resources/sd/foreground.pvr.ccz \
--dither-fs-alpha \
--scale 0.5 \
--opt RGBA4444 \
${SRC}/foreground/*.png
  上面是截取文章前面部分的脚本里的一段代码。功能是正在导出foreground的低分辨率图。我们先把foreground文件夹下的两张图片拖到TexturePacker里面。
  上面列出了各行代码对应的图形界面如何选择参数。需要说明的是,上面的date和sheet的路径TexturePacker必须要大写HD和SD,这个回头我们自己把文件夹名字改过来就是。上面的选项少列了一行代码,即为scale选项。我们如下图选择AutoSD ——>
cocos2d-x HD/SD。选择Apply。
  好了现在我们选择Publish就可以了。TexturePacker会自动帮我们生成HD和SD文件夹,同时把高分辨率和低分辨率的data和sheet分别放在里面。
  在三个都生成完后,把HD和SD文件夹改成小写的hd和sd的(编者爱好改,你们随意)。然后把两文件夹放在resource目录下去。
设置分辨率
  打开"AppDelegate.cpp"文件,在创建scene之前,添加如下代码:
//get device resolution
Size frameSize = eglView->getFrameSize();
auto designSize = Size(512, 384);
eglView->setDesignResolutionSize(designSize.width, designSize.height, ResolutionPolicy::NO_BORDER);
std::vector searchP
if (frameSize.height > 480)
searchPaths.push_back("hd");
Size resourceSize = Size();
director->setContentScaleFactor(MIN(resourceSize.height/designSize.height,
resourceSize.width/designSize.width));
searchPaths.push_back("sd");
FileUtils::getInstance()->setSearchPaths(searchPaths);
  上面的代码就是判断设备的实际分辨率,如果大于高度大于480我们就选择高清图片(搜索路径为hd),小于等于480我们就采用低分辨率的图片(搜索路径为sd)。
  接下来,HelloWorldScene.cpp文件并找到init方法。删掉自动生成的那一堆代码。同时,用下面的代码替换掉:
bool HelloWorld::init()
if ( !Layer::init() )
Size winSize = Director::getInstance()->getWinSize();
// Determine names of sprite sheets and plists to load
std::string bgSheet = "background.pvr.ccz";
std::string bgPlist = "background.plist";
std::string fgSheet = "foreground.pvr.ccz";
std::string fgPlist = "foreground.plist";
std::string sSheet
= "sprites.pvr.ccz";
std::string sPlist
= "sprites.plist";
// Load background and foreground
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(bgPlist);
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(fgPlist);
// Add background
Sprite *dirt = Sprite::createWithSpriteFrame(
SpriteFrameCache::getInstance()->getSpriteFrameByName("bg_dirt.png"));
dirt->setScale(2.0);
dirt->setPosition(winSize.width/2, winSize.height/2);
this->addChild(dirt, -2);
// Add foreground
Sprite *lower = Sprite::createWithSpriteFrame(
SpriteFrameCache::getInstance()->getSpriteFrameByName("grass_lower.png"));
lower->setAnchorPoint(Point(0.5, 1));
lower->setPosition(winSize.width/2, winSize.height/2);
this->addChild(lower, 1);
Sprite *upper = Sprite::createWithSpriteFrame(
SpriteFrameCache::getInstance()->getSpriteFrameByName("grass_upper.png"));
upper->setAnchorPoint(Point(0.5, 0));
upper->setPosition(winSize.width/2, winSize.height/2);
this->addChild(upper, -1);
// Add more here later...
  好,让我们一个一个来讲解,因为,这里面有许多新的东西。
决定加载的精灵表单和plist文件的名字。这个部分,把TexturePacker生成的精灵表单和plist文件,按照某种方式加载进来了。当然会根据设备分辨率不同自动加载不同分辨率的图片。
加载背景和前景。接下来就是把背景、前景还有精灵都加载到精灵帧缓冲(sprite frame cache)中,以便后面可以使用。注意,目前精灵并没有加载到SpriteBatchNode中。
添加背景。背景图片作为当前层的一个孩子被加进去。(Z=-2的话,就可以使任何对象都在它上面,除非其它对象的Z小于-2)。接下来,把这张图片放大两倍,因为,之前,我们为了节约内存,只使用了一半大小的图片。之后,再把图片放置到屏幕中间。
前加前景。前景是当作两个部分加上去的。这里用了一种非常简单的设置精灵图片坐标点的方式,通过设置精灵的锚点为图片的中点,或者底部,或者顶部。通过这种方式,假如你要把一张图片的左下角设置为屏幕的左下角,你只需要先把图片的锚点设置为(0,0),然后设置position为0,0就好了。非常方便!而且,这个坐标值,在所有的设备上都通用。注意,背景部分超出屏幕之外了,但是,这并没有关系,因为用户看不到。还要注意的是,图片增加的时候,使用了不同的Z值,最后面的图片使用最小的Z值。
  编译并运行,你会看到如下的输出。看看效果到底如何^^。
  在win32文件夹下的main.cpp修改下面这行代码可以任意选择分辨率调试,我这里选择的是:
eglView.init("TestCPP",);
  现在我们选择分辨率调试,可以发现高清低清图片是正常加载的。
  对于这个游戏来说,你将会在场景中添加3只地鼠--每个洞一个地鼠。地鼠会躲在草的下面,但是,会突然从某个洞里冒出来,这样你就可以打它了。
  首先,让我们为每个洞的下面添加一只地鼠。我们会先让它们在所有的图片上面,这样,可以确保位置对了,然后通过修改Z值,就能够把它们隐藏到草地后面去了。
  打开HelloWorldScene.h,然后增加一个数组来保存当前关卡的地鼠,如下所示:
cocos2d::Vector molesV
  通过保存地鼠的vector数组,我们可以很容易地遍历每一只地鼠。
  接下来,在init方法中添加一些代码来放置地鼠(添加位置位于 “Add more here later…”注释后面),如下所示:
// Add more here later...
SpriteBatchNode *spriteNode = SpriteBatchNode::create(sSheet);
this->addChild(spriteNode, 999);
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(sPlist);
// Load sprites
Sprite *mole1 = Sprite::createWithSpriteFrameName("mole_1.png");
mole1->setPosition(99, winSize.height / 2 - 75);
spriteNode->addChild(mole1);
molesVector.pushBack(mole1);
Sprite *mole2 = Sprite::createWithSpriteFrameName("mole_1.png");
mole2->setPosition(winSize.width / 2, winSize.height / 2 - 75);
spriteNode->addChild(mole2);
molesVector.pushBack(mole2);
Sprite *mole3 = Sprite::createWithSpriteFrameName("mole_1.png");
mole3->setPosition(winSize.width - 102, winSize.height / 2 - 75);
spriteNode->addChild(mole3);
molesVector.pushBack(mole3);
  首先,为精灵创建一个SpriteBatchNode,这样就可以更加高效地渲染这三只地鼠了。(每次只需要一个OpenGL call),并把batchNode当作当前层的一个孩子加进去。注意,Z值被临时设置成999,因此,地鼠就会显示在所有的图片之前,那样我们就可以判断地鼠位置是否正确。
  然后从精灵帧缓冲中加载所有的精灵。接着,为每一个地鼠创建一个精灵,把它们放置在场景中,同时添加到数组里面。
  编译并运行,你将看到3只地鼠放置在正确的位置上了!
  现在,我们确定地鼠的位置没有问题了,接下来,让我们添加一些代码,让他们能够从地下钻出来吧!
  第一件事,把Z值,从999改成0,这样的话,地鼠就会在地底下了。
  改完之后,在init方法的后面添加下面的代码:
this->schedule(schedule_selector(HelloWorld::tryPopMoles), 0.5);
  如果之前你没有见过这样的用法,你可以调用其它的方法,比如schedelUpdate。但是,这个例子中,我们只想让地鼠每隔0.5秒钻出一个。
  接下来,增加tryPopMoles方法(声明就自己在头文件添加了):
void HelloWorld::tryPopMoles(float dt)
for (Sprite *mole : molesVector)
int temp = CCRANDOM_0_1()*10000;
if ( temp % 3 == 0)
if (mole->getNumberOfRunningActions() == 0)
this->popMole(mole);
  这个方法会每隔0.5秒调用一次,每一次它都会循环判断每一个地鼠,让它有1/3的机会从洞里面钻出来。但是,如果它已经钻出来,也就是运行的action的个数不等于0的话,那么也不会再钻了。
  最后,实现popMole:方法:
void HelloWorld::popMole(Sprite *mole)
auto moveUp = MoveBy::create(0.2f, Point(0, mole->getContentSize().height));
auto easeMoveUp = EaseInOut::create(moveUp, 3.0f); // 2
auto easeMoveDown = easeMoveUp->reverse(); // 3
auto delay = DelayTime::create(0.5f); // 4
mole->runAction(Sequence::create(easeMoveUp, delay, easeMoveDown, NULL)); // 5
  这个代码,使用cocos2d的action来制作弹出洞的效果,先弹出来,然后暂停半秒,再钻回去。让我们一行一行地解释:
创建一个action,让地鼠沿着Y轴钻洞来。因为,之前我们放置地鼠的位置是正确的,所以看起来,就像是从洞下面钻出来一样。
为了使得移动更加真实,上面的action用一个CCEaseInOut action包装起来了。这会得钻洞的动作在开始和结束的时候速度比较慢,看起来,就好像地鼠在加速和减速一样。
创建一个action,使地鼠能够钻回来。这里通过调用action的reverse方法,能得到相反的action.
创建一个action,在地鼠钻出来以后,能够暂停1秒。
现在,action可以运行了。通过用CCSequence把这3个action包装起来,那样它们就可以按顺序执行了。
  就这么多!编译并运行代码,你将会看到3只地鼠交替地钻出洞来,cool吧?
  本教程。
  期待这个教程的后续吧,在那个教程里,我们会添加很酷的动画,同时会添加一些游戏逻辑,使得你可以打地鼠并且得分。当然,还有非常好听的音乐。如何在WP8上搭建cocos2d-x的游戏开发环境
Cocos2d-x 可能是目前最流行的2D手机游戏引擎,它是开源的
Cocos2d-iphone项目的C++版本;支持多平台,包括iOS、Android、Windows Phone8、BlackBerry等,并还在不断更新和发展中;
WP8是微软公司最新一代的手机操作系统,由于采用和Win8相同的NT内核并拥有多项有别于iOS、Android的优点,使得它发展迅速。目前已拥有超过17万个应用,并且数量还在不断增加中。现在看来越来越多的开发者包括游戏开发者正向WP8平台迁移,想在这个平台上一显身手。
所以采用cocos2d-x引擎开发WP8手机游戏是一件顺理成章的事。鉴于这种趋势,笔者提供这个示例。希望通过本示例,能让各位学习到如何在WP8平台上搭建cocos2d-x的游戏开发环境,并预先告知搭建平台可能会遇到的一些问题及其解决办法。握起你手中的windows phone,我们开始吧!
使自己能够开发Windows
注册成为windows
phone的开发者
访问以下MSDN的windows phone 开发用户注册页
/en-us/library/windowsphone/help/jj206719(v=vs.105)
/zh-cn/library/windowsphone/help/jj206719(v=vs.105)
按步骤填写windows账号和注册Windows phone开发者账号
Windows 账号说明:就是Hotmail、SkyDrive、Xbox LIVE的用户
开发者账号的费用:$19一年;学生账号免费但不能发布收费应用
安装编译环境
安装visual
studio 2003
安装windows
phone SDK 8.0
/en-US/downloadsdk
/zh-cn/downloadsdk
cocos2d-x项目的创建
获取最新的cocos2d-x的代码(本文以2.2版本为例)
从官网下载最新代码:
把下载的zip包解压后就是cocos2d-x的整个工程:
整个工程的各个目录大致包含如下内容:
cocosDenshion
封装了声音引擎的代码(SimpleAudioEngine、OpenAL)
extensions
扩展库代码
包含了很多外部库代码(Box2D、chipmunk等)
4个示例代码:
研究TestCpp代码是个学习cocos2d-x很好的方法
跨平台模板代码
各种工具脚本
创建自己的cocos2d-x的HelloWorld:
下载并安装Python,注意不要安装3.0版本以上的【Tip1】
设置电脑的环境变量,加入Python的安装路径:
我的电脑→右键→属性→高级→环境变量→系统变量→path→加入你的python安装目录
进入cmd,在任意目录下,输入python,不会提示“不是外部或内部命令”就OK。
创建HelloWorld工程:
Python create_project.py project
#PROJECT_NAME –package #PACKAGE_NAME –language #PROGRAMING_LANGUAGE
进入cocos2d-x-2.2.0\tools\project-creator目录,在cmd下执行:
Note:上面的脚本中有三个变量需要根据自己的情况替换
#PROJECT_NAME :工程的名称
#PACKAGE_NAME:包名称(格式:com.mycompany.mygame)
#PROGRAMING_LANGUAGE:编程语言(cpp, lua, javascript)
如果看到如下界面,表示工程创建成功,恭喜!
把HelloWorld从cocos2d-x的大工程中独立出来:
刚才的HelloWorld在cocos2d-x-2.2.0\projects\目录下,可以根据自己的情况新建一个目录,把HelloWorld代码和cocos2d-x必要的文件拷贝过去,做一个干净的工程,注意目录结构不能破坏。做好的工程大致如下所示:
进一步简化工程创建的步骤
笔者建议开发者可以自己写一个bat文件,把创建和工程独立合二为一,做到一步完成。这里给出一个bat的例子供大家参考【TIP2】:
set /p directoryName=Please Input Directory Name:
if "%directoryName%"=="" goto inputError
set /p projectName=Please Input Project Name:
if "%projectName%"=="" goto inputError
set /p packageName=Please Input Package Name:
if "%packageName%"=="" goto inputError
create_project.py -project %projectName% -package %packageName% -language cpp
xcopy ..\..\projects\%projectName% d:\%directoryName%\projects\%projectName% /s/e/i/y
xcopy ..\..\cocos2dx d:\%directoryName%\cocos2dx /s/e/i/y
xcopy ..\..\cocosDenshion d:\%directoryName%\cocosDenshion /s/e/i/y
xcopy ..\..\extensions d:\%directoryName%\extensions /s/e/i/y
xcopy ..\..\external d:\%directoryName%\external /s/e/i/y
@echo Create Project OK!
goto finish
:inputError
@echo Need Directory & Project & Package Name!
按上述方法,创建工程(MyDemo),观察一下工程的目录结构
硬盘上的目录结构见下左图
点击proj.wp8目录下的.sln文件,打开WP8的工程
目录结构见下右图
&通过观察,我们可以得出几点结论:
以Proj.开头的目录存放的是和各个平台相关的代码和工程文件还有资源(比如Splash)
Class目录存放的是和平台无关的代码即用cocos2d-x写的游戏代码部分(AppDelegate, HelloWorldScene.cpp)。大家开发游戏的时候也应该把代码放在此目录下。
IFrameworkView^ Direct3DApplicationSource::CreateView()
return ref new MyDemo();
[Platform::MTAThread]
int main(Platform::Array^)
auto direct3DApplicationSource = ref new Direct3DApplicationSource();
CoreApplication::Run(direct3DApplicationSource);
ref class MyDemo sealed : public Windows::ApplicationModel::Core::IFrameworkView
// The AppDelegate for the Cocos2D app
通过如下代码可以了解引擎是如何把AppDelegate加到WP项目中去的
跨平台特性的体现:
AppDelegate.cpp, HelloWorldScene.cpp等代码在任何平台的工程里都是一样的
Resources目录存放的是游戏资源,各个平台都是统一的一份
扩充HelloWorld工程
查看工程目录可以看到,引擎只给我们导入了基本的库(libcocos2d),而比如声音库CocosDenshion,物理库Box2D等并没有导入,所以我们需要手动将这些库导入。笔者以导入CocosDenshion为例,介绍如何加入这些库。具体步骤如下:
添加库项目到工程里:选中解决方案 右键,选择 “现有项目”
cocos2d-x-2.2\CocosDenshion\proj.wp8目录下的 .vcxproj文件,加入工程
增加项目依赖:选中解决方案右键,选择“项目依赖项”
勾选我们刚才添加的库,记得esUtil_phone也勾选
添加引用:选中项目名(MyDemo)右键,选择“属性”,在“框架和引用”里面
点击 “添加新引用”,勾选新添加的库
为了更方便使用添加的库,最好增加新库的包含路径【Tip3】:
选中项目名(MyDemo)右键,选择“属性”,在“C/C++通用”里面,选择“附加包含目录”,增添新路径( $(ProjectDir)..\..\..\CocosDenshion\include
至此HelloWorld工程正式建立起来了。
按下图所示设置VS的调试选项,编译并运行。
哇,出现了模拟器画面,恭喜啊,成功了!
ASSETS详解
认识XAP文件和Assets
看一下上述工程编译成功后的输出(中间省略了一些输出)
XAP文件就是windows phone的包文件格式,相当于Android的APK和iOS的APP。它是一个标准的zip压缩文件,包括了WP应用程序所需的一切文件,如程序集、资源文件等。通过项目的“输出路径”,我们可以找到生成的XAP的文件。
我们试着把XAP文件的后缀改为zip,然后解压,看一下里面包含的内容:
左图是XAP文件包含的内容,看上去和Android有点类似,包括程序文件(exe)、应用配置文件WMAppManifest.xml(类似于安卓的AndroidManifest.xml)、一些dll和一个Assets目录。中图是Assets目录、右图是Assets/Resources目录包含的内容,可以看到主要是游戏资源。
由此可见,和Android一样,WP的程序会把需要用到的资源放在Assets目录下。
进一步认识Assets目录(本节内容可以跳过)
利用cocos2d-x的跨平台特性,我们可以做一个实验
分别编译并运行MyDemo的proj.win32和proj.wp8工程,成功后分别出现如下画面
在整个工程的Resource目录下,找到HelloWorld.png图片,把这张图片的文件名改为
“Helloworld1.png”
打开HelloWorldScene.cpp,找到bool
HelloWorld::init()函数做如下修改
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
CCSprite* pSprite = CCSprite::create("HelloWorld1.png");
(此文件在两个工程内都被调用,只要在任一个工程修改,另一个工程内会自动更新)
分别编译并运行,出现如下画面
很明显,Win32成功了,WP8失败了。Debug一下就会知道pSprite的指针是空的。也就是没有拿到刚才已经改名的HelloWorld1.png这张图。为什么会这样呢?我们打开新生成的XAP文件看一下。结果发现XAP包里的Assets/Resources目录下还是原来那张HelloWorld.png的贴图,根本没有HelloWorld1.png的贴图。所以仅仅修改代码和工程的Resources目录下的资源,是无法影响XAP包里的资源的,正确方法请看第3点。
(win32工程不会错误的原因请读者自己研究)
学习如何把资源加入到Assets目录中
我们打开MyDemo的WP8工程,在VS的Solution Explorer下可以发现有Assets目录,见下图,这个目录下存放的就是打入XAP包里Assets目录下的所有资源
选择Assets下任意一张png图片,我们查看一下它所在的硬盘位置
怎么样,吃惊了吧。这个资源并不在我们之前一直提到的工程的Resources目录里。看不清的读者,可以看下图。
工程的Resources目录:(HelloWorld1.png是经过第2点实验后改过名的图片)
WP8工程里的Assets/Resources目录:
(原来的HelloWorld.png和改过名的HelloWorld1.png都在)
把”MyDemo/Resources”
目录定义为A目录,
把”MyDemo/proj.wp8/Assets/Resources”目录定义为B目录。
我们得出如下结论:
VS里面引用的都是B目录下的资源,即真正打入到XAP包的是B目录下的资源;
VS编译时会把A目录下的资源拷贝到B目录下;只会增加、覆盖,不会删除;
为了证实有拷贝这个过程,再次仔细查看编译后的输出,发现有如下提示
(读者也可以在A目录下增加一个文件,然后编译工程,去查看B目录)
根据以上结论,我们可以用如下顺序来处理资源【Tip4】:
在A目录下增加、删除、修改资源
打开并编译工程,确保A拷贝到B
在打开工程的Assets下引用B目录的资源,并做修改
(如果引用A目录下的资源情况会是怎样呢?读者可以自己去测试一下)
再次编译并生成XAP
我们用上述方法,请读者试着增加HelloWorld1.png、删除HelloWorld.png,并创建加入一个文本文件1.txt。成功后VS工程的Assets内容和XAP/Assets/Resources内容应如下所示:
我们再创建一个文本文件1.txt,把它改名为1.123,然后按照上面的步骤,最后引入到Assets下。编译后,查看一下XAP文件,看看1.123有没有。
结果如上所示,虽然我们放入了1.123,但是却没有打入XAP/Assets/Resources/。
这是因为引入到Assets目录下的资源,VS只将认识的资源类型,默认打包进XAP。如果不是的话,则不会打进XAP。这个可以设置,设置方法:对资源右击,选择属性
“内容”这个属性选择 :是
编译后,查看一下XAP文件,1.123果然有了。
恭喜,相信你已经完全了解Assets了!
推荐一些常用的游戏资源转换工具
利用TexturePacker软件来组合、整理图片【Tip5】
/texturepacker
利用格式工厂等软件转换声音文件
利用plistEditor等软件在win8系统上编辑plist文件
有了以上知识的铺垫,读者应该可以真正用cocos2d-x的语句来编写游戏代码了。关于如何用cocos2d-x开发游戏,请参考官网介绍,此处笔者不做详细展开:
作为试验,在上述已经搭好的环境下,笔者参考下面的网址,把里面的cocos2d-x的代码直接拿到了MyDemo工程里,非常方便:
/33752/cocos2d-x-tutorial-for-ios-and-android-space-game
这是完成的游戏界面,很酷吧。
在WindowsPhone手机上运行游戏
目前为止我们都是在模拟器上运行游戏,如何在真机上运行呢?很简单。
使用Windows
Phone SDK自带的注册工具,注册手机
详细步骤请参考MSDN上的介绍:
/library/windowsphone/develop/ff769508(v=vs.105).aspx
把WP手机用USB线连接到电脑,按下图所示设置VS的调试选项进行真机调试
使用Windows
Phone SDK自带的部署工具,部署XAP到手机
详细步骤请参考MSDN上的介绍:
/zh-cn/library/windowsphone/develop/ff928362(v=vs.105).aspx
笔者希望通过这篇文章,能让各位读者以最快的速度熟悉在Windows Phone上使用cocos2d-x。当然由于篇幅和时间有限,这篇文章还有很多不足之处。欢迎各位技术大牛指摘。当然更希望这篇文章能起到一个抛砖引玉的作用,希望大家都来开发Windows Phone游戏,成为游戏发展的弄潮儿,谢谢!
微软中国有限公司 开发工具及平台事业部
开发技术顾问
另两篇文章:
其它微软站点

我要回帖

更多关于 cocos2d x开发 的文章

 

随机推荐