cocos2dx学习笔记(1)

久仰cocos2dx的大名想要研习一下一直苦于没有时间,最近不是很忙想起这茬,准备恶补一番,先上网大致查了下资料,发现cocos2dx开发环境的搭建貌似还挺麻烦的(可能与多平台支持有关),在官网下载了最新的cocos2dx
3.0 rc 版,配置方式参考了这篇文章http://blog.csdn.net/star530/article/details/21483729,貌似cocos2dx游戏开发都是通过平台开发在移植的模式,再加上“据称”eclipse
CDT+NDK的android开发模式调试困难+打包加密安全性不太好?(小白请轻拍,后续会自己尝试一下,没有实践就没有发言权嘛~~),抱着方便学习的心态先搭建了win平台开发环境----VS2012+python2.7.6(最新官方标配),听说2.x时期还需要安装cygwin等,想来目前版本算是轻松了许多。

搭建好环境之后,官网推荐的是“HelloWorld”的cocos工程(of course),利用python创建好工程之后用VS打开运行,可以看到一个简单的cocos2dx游戏界面

我们来看下源码HelloWordScene.cpp


#include "HelloWorldScene.h"

USING_NS_CC;

Scene* HelloWorld::createScene()
{
// ‘scene‘ is an autorelease object
auto scene = Scene::create();

// ‘layer‘ is an autorelease object
auto layer = HelloWorld::create();

// add layer as a child to scene
scene->addChild(layer);

// return the scene
return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}

Size visibleSize = Director::getInstance()->getVisibleSize();

Point origin = Director::getInstance()->getVisibleOrigin();

/////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.

// add a "close" icon to exit the progress. it‘s an autorelease object
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
origin.y + closeItem->getContentSize().height/2));

// create menu, it‘s an autorelease object
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Point::ZERO);
this->addChild(menu, 1);

/////////////////////////////
// 3. add your codes below...

// add a label shows "Hello World"
// create and initialize a label

auto label = LabelTTF::create("Hello World", "Arial", 24);

// position the label on the center of the screen
label->setPosition(Point(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - label->getContentSize().height));

// add the label as a child to this layer
this->addChild(label, 1);

//add "HelloWorld" splash screen"
auto sprite = Sprite::create("HelloWorld.png");

// position the sprite on the center of the screen
sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

// add the sprite as a child to this layer
this->addChild(sprite, 0);

return true;
}

void HelloWorld::menuCloseCallback(Ref* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
#endif

Director::getInstance()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}

可以看到当前场景是由一个sprite对象(cocos图标),"Hello
world"的label,关机按钮(推出程序按钮和回调处理函数)组成,注意这句sprite->setPosition(Point(visibleSize.width/2
+ origin.x, visibleSize.height/2 +
origin.y));因为sprite对象锚点为图像几何中心点,而坐标原点在左上角,因此居中对齐时需要平移屏幕中心点坐标的距离,想要拉伸sprite对象到全屏,我们可以通过

    Size spriteSzie = sprite->getContentSize();
float scaleX = spriteSzie.width/visibleSize.width;
float scaleY = spriteSzie.height/visibleSize.height;
//log("scaleX = %f, scaleY = %f",scaleX,scaleY);
sprite->setScale(1/scaleX, 1/scaleY);

重新设置sprite对象的长宽比以适配屏幕,如果我们想要sprite对象拥有一定的效果,以达到类似开机动画的东东,我们可以利用cocos的CCAnimation对象实现动画效果,以下是一个缩放的效果


//    ccscaleto   作用:创建一个缩放的动作
// 参数1:达到缩放大小所需的时间
// 参数2 :缩放的比例

//CCAnimation* animation = CCAnimation::create();
CCActionInterval* scaleto = CCScaleTo::create(2,2);
sprite->runAction(scaleto);

这样,在启动helloworld工程时sprite对象会出现一个缩放的动画,如图

时间: 2024-11-08 17:26:51

cocos2dx学习笔记(1)的相关文章

【Cocos2D-X 学习笔记】为精灵添加单点触控

由于Cocos2d-x处于新学的阶段,因此最近也无法进行系统地更新,只会选择一些典型的Demo贴上来,一来是与大家分享,而来也可以作为以后回顾时的参考. 今天介绍一下Cocos2d-x的触摸事件处理,了解Android开发的朋友们知道,Android里会用一个OnClickListener()进行事件监听,而在J2SE中也会有Event类实现专门的监听处理.在Cocos2d-x中,因为是游戏引擎,用户在玩游戏时总是要通过屏幕与游戏进行交互,可想而知触摸事件是主要处理的事件.这里主要讲一下如何为精

cocos2dx学习笔记(2)

昨天尝试了cocos2dx在win下的开发环境配置,并且运行了cocos的helloword程序,晚上想要尝试一下android开发环境配置,顺便学习cocos在eclipse下的JNI机制,按照cocoa中文论坛的android环境配置弄了NDK,并配置了环境变量,由于想要学习cocos的luabind机制(这个我们公司游戏的引擎用的很多,确实比较有兴趣),一切搞定不明就里的用eclipse导入了cocos3.0rc中的tests目录下的cpp-tests工程(这算android开发久了的毛病

Cocos2dx 学习笔记整理----场景切换

据说Cocos2dx场景切换的方法有32种:cocos2dx 常见的32种切换场景的动画 无需一一求证,只需要知道切换场景需要怎么做就行了. 作为导演CCDirector,切换场景的事情当然归它管了. 切换场景的接口如下: ? 1 CCDirector::sharedDirector()->replaceScene(cocos2d:CCScene * pScene); 所以,我们只要把需要切换的场景实例传进去就可以了. ? 1 2 CCScene * pScene = GameMain::sce

Cocos2dx 学习笔记整理----第一个项目

接上一节, 进入新建的项目下面的proj.win32下面,找到项目名.sln文件(我的是game001.sln),双击会通过VS2010打开.(当然,你装了VS什么版本就是什么版本) 将你的项目设为启动项目, 切换到解决方案视图, 然后邮件点击解决方案, 选择生成解决方案. 第一次生成根据个人机器性能会消耗大概1-3分钟,呵呵. 但是以后会快很多的. 生成成功的话会在输出窗口显示如下: 一般都会生成成功,但是我生成的时候失败了很多次,后来发现是这个问题:http://www.cnblogs.co

Cocos2dx 学习笔记整理----开发环境搭建

最近在学习cocos2dx,预备将学习过程整理成笔记. 需要的工具和环境整理一下: 使用的版本 cocos2dx目前已经出到了v3.1.1,学习和项目的话还是用2.2.3为宜,毕竟不大想做小白鼠,并且学习了几天之后才发出3.X版本的,版本内容变动比较大. 开发环境 1 jdk 1.6以上 2 python 2.7为宜(创建项目要用的) 3 NDT+Android SDK 4 Cygwin或者MinGW 开发工具 1 Eclipse + CDT + ADT 2 VS2010 3 Sublime T

Cocos2dx 学习笔记整理----在项目中使用图片(初)

cocos2dx有多种使用图片的方法,先来个最简单的:用CCSprite直接使用图片. 首先,进入到之前建立的项目,把你将要使用的图片放入到目录下的Resources文件夹里面.项目中以相对路径使用资源皆是以Resources文件夹为根目录参考的. 然后进入到HelloWorldScene.cpp的init方法的最后面加入以下代码: ? 1 2 3 CCSprite * sprite = CCSprite::create("bl_24.png"); sprite->setPosi

Cocos2dx学习笔记10:cocos2dx序列帧动画(1)

在cocos2dx里是不支持gif动画的,所以我们无法给精灵设置gif格式的图片.但是如果我们想实现动画效果呢?那么我们就要自己通过大量的静态图来组成播放成动画. 在cocos2dx里提供了序列帧动画的概念来实现这个功能,动画由帧组成,每一帧都是一个纹理,我们可以使用一个纹理序列来创建动画. 首先找一张动图的gif图,这里QQ群里最近动图的逗逼图太多,我就随便找了一张,把图片另存到桌面,打开ps软件,把图片拖进去,这样gif图会被拆分许多的图层.我们把图层一个一个图层的保存成png的静态图,命名

cocos2dx 学习笔记

1. 动作类: CAction : CActionInterval(持续性) 和 CActionInstant(瞬时性) 帧动画 CAnimate,  帧动画序列 CAnimation 2. Cocos2dx 中所有对象都创建在堆上,然后通过指针引用: 创建方法: 1) new 对象 -> init方法, 需要使用者进行释放: 2)静态的工厂方法,不需要使用者进行释放: 3. 选择器 selector, 类似于函数指针 shedule_selector(SELECTOR) callfunc_se

Cocos2d-x学习笔记(3)

Cocos2d-x有一个包括全部其它头文件的cocos2d.h,仅仅要在使用时包括这个头文件,就能够使用引擎的全部功能.Cocos2d-x的类都放置于cocos2d的命名空间下,如引擎下的"actions/CCAction.h"中在文件首尾使用NC_CC_BEGIN和NS_CC_END来将全部类型包括在cocos2d命名空间下.在游戏中使用#define USING_NS_CC using namespace cocos2d定义的宏USING_NS_CC来说明命名空间. 1.构造函数与

cocos2dx学习笔记(4)——VS2010中的中文乱码问题

当你想使用中文时,你是否有这样的一个困惑. 把样例中的HelloWorld改成中文的 "你好,世界!". 然后编译运行,发现居然是个乱码!!! 因为cocos2dx中使用的是UTF-8字符集,而VS中确实ANSI. 所以我们需要对其进行字符集转换. 然后纵里寻它求百度,终于找到了解决方案. 一个函数搞定! #include "cocos2d.h" char* toUTF(const char* strGB2312) { int iLen = MultiByteToW