首页 > 其他 > 详细

cocos2d-x 3.0笔记

时间:2014-03-07 11:45:36      阅读:404      评论:0      收藏:0      [点我收藏+]

横版游戏的场景移动可以采用人物和主角所在的layer移动的方式来完成,背景不需要移动,这样能比较方便的实现缩放,固定粒子等效果,原理是cocos2d的父节点移动不会使子节点位置发生变动,不过需要注意的是触摸响应区的位置是以游戏窗口的相对位置来计算的,即使游戏元素的坐标没有跟着父节点改变,响应区的位置始终是固定的。

玩家超过屏幕一半位置后修正摄像机位置代码:

bubuko.com,布布扣
void GameLayer::setviewPointCenter(Point position)
{
    Size winsize = Director::getInstance()->getWinSize();

    int x = MAX(position.x, winsize.width / 2);
    int y = MAX(position.y, winsize.height / 2);
    x = MIN(x, (_tileMap->getMapSize().width * _tileMap->getTileSize().width) - winsize.width / 2);
    y = MIN(y, (_tileMap->getMapSize().height * _tileMap->getTileSize().height) - winsize.height / 2);
    Point actualPosition = ccp(x, y);

    Point centerOfView = ccp(winsize.width / 2, winsize.height / 2);
    Point viewPoint = ccpSub(centerOfView, actualPosition);
    this->setPosition(viewPoint);
}
bubuko.com,布布扣

玩家人物移动代码:(getDesirePosition()为角色的每帧目标位置, 统一由gamelayer的updateSchedule函数调用(包括NPC的移动,摄像机的移动),深度排序等)

bubuko.com,布布扣
float posX = MIN(_tileMap->getMapSize().width * _tileMap->getTileSize().width - _hero->getCenterToSides(),
        MAX(_hero->getCenterToSides(), _hero->getDesirePosition().x));
    float posY = MIN(3 * _tileMap->getTileSize().height + _hero->getCenterToBottom() ,
        MAX(_hero->getCenterToBottom(), _hero->getDesirePosition().y));
    _hero->setPosition(ccp(posX, posY));
bubuko.com,布布扣

cocos2d 3.0修改了以前版本的触摸响应方式,个人认为更科学了,也方便管理,给个例子代码:(_eventDispatcher为Node类的成员变量)

bubuko.com,布布扣
EventListenerTouchAllAtOnce *listener = EventListenerTouchAllAtOnce::create();
    listener->onTouchesBegan = CC_CALLBACK_2(GameLayer::myTouchBegin, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
bubuko.com,布布扣

深度排序代码(_actors为SpriteBatchNode类的实例,测试代码中主角跟敌人都在一张纹理贴图中,所以能这么干>.<)

bubuko.com,布布扣
for (int i = 0; i < _actors->getChildren().size(); i++)
    {
        Node *node = _actors->getChildren().at(i);
        ActionSprite *as = (ActionSprite*)node;
        _actors->reorderChild(as, (_tileMap->getMapSize().height * _tileMap->getTileSize().height) - as->getPositionY());
    }
bubuko.com,布布扣

 

PS: 3.0版本目前声音引擎的音效设置音量还未添加实现。。。 。。。

cocos2d-x 3.0笔记,布布扣,bubuko.com

cocos2d-x 3.0笔记

原文:http://www.cnblogs.com/tiduswj/p/3585526.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!