您的位置:首页 > 移动开发 > Cocos引擎

督主cocos2d学习笔记

2015-12-23 19:26 471 查看
这篇博客是督主学习cocos2d的学习笔记,内容是一些编写cocos时的小技巧,留作以后查阅~

督主先给大家献上自己学习cocos的参考资料:

1、Cocos2d-x 3 移动游戏编程 【韩】印孜健 著 武传海 译  人民邮电出版社Cocos2d-x 3 移动游戏编程



这本书内容条理清晰,没讲一些知识点都会用实例去巩固复习,非常适合入门哦~

2、cocos官网www.cocos2d-x.org的programmers
guide

一本英文手册,内容也很好,与1互为补充,可以下载电子书版和pdf版~

进入正题啦~

一、屏幕适配

在AppDelegate.cpp文件的applicationDidFinishLaunching()方法中调用setDesignResolutionSize()方法设置分辨率大小,从而固定画面

setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)
width:设计分辨率宽度

height:设计分辨率高度

ResolutionPolicy:分辨率规则高度

例:

glview->setDesignResolutionSize(480, 320, ResolutionPolicy::EXACT_FIT);

EXACT_FIT:不考虑画面宽高比例,按固定大小显示画面
NO_BORDER:考虑画面宽高比例,对游戏画面进行放大或缩小。根据画面宽高比例不同,有时会不显示到画面。

SHOW_ALL:考虑画面宽高比例,对游戏画面进行放大或缩小,但不会超出画面之外。这保持了游戏画面的宽高比,也显示了全部内容,但画面的左右或上下两侧会留下无法使用的黑边。

FIXED_WIDTH:固定游戏画面宽度,根据画面宽高比例动态处理高度。常用于制作纵版游戏。

FIXED_HEIGHT:固定游戏画面高度,根据画面宽高比例动态处理宽度。常用于制作横版游戏。

二、菜单

auto menu=Menu::create(item_1, item_2, item_3, NULL);
menu->alignItemsVertically();

菜单项

MenuItemFont

MenuItemLabel

MenuItemImage

MenuItemSprite

MenuItemToggle(初次显示第一个菜单项,单击显示第二个菜单项,以此类推,最后一个菜单项出现,单击再次出现第一个菜单项)

auto item_1=MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuCallback, this), item_1_1, item_1_2, NULL);
alignItemsVerticallyWithPadding() alignItemsHorizontallyWithPadding() 设置间隔

三、复合动作&CallFunc

auto action=Sequence::create(MoveBy::create(1.0, Point(0, 50)), CallFuncN::create(CC_CALLBACK_1(GameScene::resetMissile, this)), NULL);

四、画面切换

replaceScene()

pushScene()  popScene()

五、TAG

可以通过setTag()为对象创建一个tag,之后在其他方法中,通过getTag()、getChildByTag()获取对象进行操作

六、循环创建对象

用相同语句编码时,可是使用循环减少代码量

<span style="font-size:14px;">StringUtils::format("LIFE: %d", life)</span>

七、背景滚动

单一图像:

创建层;注意截取一段背景,防止断裂;先MoveBy 再Place::create(Point::ZERO) 最后RepeatForever

多重图像:

使用ParallaxNode类

void addChild(Node* child, int z, const Point& parallaxRatio, const Point& positionOffset)
Node* child:该参数与以前的addChild()方法相同,指定要添加的Node
int z:设置Z轴顺序(z-order)

const Point& parallaxRatio:设置精灵相对于ParallaxNode的移动比例

const Point& positionOffset:指定节点添加到ParallaxNode的坐标

八、随机

<span style="font-size:14px;">srand(time(NULL));</span>

为了每次运行时生成不同随机数,通过srand()方法将生成随机数时使用的基准值初始化为当前时间

<span style="font-size:14px;">rand()%4</span>

即在0~4之间随机生成数

九、Vector

在.h文件中声明

<span style="font-size:14px;">Vector<Sprite*> smiles;</span>

初始化

<span style="font-size:14px;">smiles.clear();</span>

将对象放入vector

<span style="font-size:14px;">smiles.pushBack(spr);</span>

遍历vector

<span style="font-size:14px;">for(Sprite* spr:smiles){}</span>

是否存在对象和删除对象

<span style="font-size:14px;">if(smiles.contains(removeSpr))
{
smiles.eraseOblect(removeSpr);
}</span>

十、UserDefault保存数据

<span style="font-size:14px;">UserDefault::getInstance()->set~ForKey(const char *pKey, bool value) </span>
<span style="font-size:14px;">UserDefault::getInstance()->get~ForKey(const char *pKey<u>, bool value</u>)(bool value可以没有)</span>
<span style="font-size:14px;">UserDefault::getInstance()->flush();</span>

UserDefault以XML格式保存数据,pKey是一个键,flush()可以在游戏退出后仍旧保存数据

<span style="font-size:14px;">UserDefault::getInstance()->setIntegerForKey("HIGHSCORE", highscore);
UserDefault::getInstance()->flush();</span>

十一、定时器

<span style="font-size:14px;">this->schedule(schedule_selector(HelloWorld::scheduleCallback), 1.0);</span>

1秒调用一次HelloWorld::scheduleCallback,但其实跟AppDelegate.cpp中setAnimationInteval()有关

<span style="font-size:14px;">this->schedule(schedule_selector(HelloWorld::scheduleCallback), 1.0, 5, 5.0);
</span>

先等待5秒,然后调用1次回调方法,再每隔1秒调用5次回调方法,最终回调方法比设定的多调用1次

<span style="font-size:14px;">this->scheduleUpdate();</span>

会自动调用Update()方法,所以一定要实现Update()

unscheduled(schedule_seletor(回调方法名)):仅停止对1个回调方法的调用。

unscheduleAllSeletors():停止对所有回调方法的调用。

unscheduleUpdate():仅停止对update()方法的调用。

十二、退出游戏

<span style="font-size:14px;">Director::getInstance()->end();
exit(0);</span>

十三、动画

创建基准精灵(通常为第一帧)

<span style="font-size:14px;">auto spr=Sprite::create("1.png");
this->addChild(spr);</span>

创建Animation对象,并设置帧间隔时间

<span style="font-size:14px;">auto animation=Animation::create();
animation->setDelayPerUnit(0.3);</span>

将Sprite Frame添加到动画

<span style="font-size:14px;">animation->addSpriteFrameWithFile("");</span>

创建Animate对象

<span style="font-size:14px;">auto animate=Animate::create(animation);</span>


执行Animate动画动作

<span style="font-size:14px;">spr->runAction(animate);</span>

如果循环执行动画

<span style="font-size:14px;">auto action=RepeatForever::create(animate);</span>
<span style="font-size:14px;">spr->runAction(action);</span



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: