当前位置: 首页>>代码示例>>C++>>正文


C++ NPC::getPositionX方法代码示例

本文整理汇总了C++中NPC::getPositionX方法的典型用法代码示例。如果您正苦于以下问题:C++ NPC::getPositionX方法的具体用法?C++ NPC::getPositionX怎么用?C++ NPC::getPositionX使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在NPC的用法示例。


在下文中一共展示了NPC::getPositionX方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: updateMove

//定时器调用的移动处理函数
void OptionLayer::updateMove(float dt)
{
    OptionLayer *optionLayer = global->optionLayer;
    CCTMXTiledMap *tmxTileMap = global->tmxTileMap;
    DirectionControlButton *ControlWheelSprite =  optionLayer->getDirectionCrtl();
    CCPoint Direction = ControlWheelSprite->getDirection();
    Hero *heroCtrl = global->hero;	//控制的角色
    CCPoint position = heroCtrl->getPosition() + Direction;	//下一次需要移动的位置(加上偏移量)
    
    //----------------------------控制主角移动-------------------------------------------------
    //瓦片地图允许移动到该位置,且摇杆对象不为空
    if(ControlWheelSprite && global->tileAllowMove(position)){
        if(Direction.x != 0||Direction.y != 0) {
            heroCtrl->RunMovingAction();//只要偏移量不为0就执行行走动画
        }else if(heroCtrl->getActionState() == ActionStateNone){
            heroCtrl->RunIdleAction();
        }
        
        //设置英雄的zOrder,以其y轴为zOrder
        heroCtrl->setZOrder(1/heroCtrl->getPositionY()*ScreenHeight*4+1);//同Y轴 人物比NPC zOrder值大1
        
        if (heroCtrl->getAllowMove()&&(Direction.x != 0||Direction.y != 0))
        {
            CCSize size=CCDirector::sharedDirector()->getWinSize();
            //制造一个矩形框,人物只会在当前框里活动,可通过地图移动来造成更大面积的移动范围
            CCRect rect=CCRectMake(heroCtrl->getContentSize().width/2,heroCtrl->getContentSize().height/2,size.width-(heroCtrl->getContentSize().width/2),size.height-(heroCtrl->getContentSize().height/2));		//创建一个逻辑矩形,范围是屏幕的大小,用于判断边界
            if(rect.containsPoint(position)){
                float mapMaxX = 0;
                //计算是否是人移动还是地图移动,注意:地图在初始化时锚点已设为cpp(0,0)
                if(heroCtrl->getPosition().x <= SCREEN.width/2 && Direction.x>0 && position.x >  SCREEN.width/2){ //地图需要左移动,position表示人物下一帧的位置
                    //计算地图最右端x轴下一次位置
                    mapMaxX = tmxTileMap->getPositionX()+tmxTileMap->getContentSize().width-Direction.x;
                    //保证地图不会把越界部分移出来
                    if(mapMaxX > SCREEN.width){
                        global->tmxTileMap->setPositionX(global->tmxTileMap->getPositionX()-Direction.x);
                        OptionLayer::npcMoveByMap(ccp(-Direction.x,0));
                        if(Direction.y != 0){
                            heroCtrl->setPositionY(heroCtrl->getPositionY() + Direction.y);//防止地图移动时,人物Y轴不能移动
                        }
                    }else{
                        heroCtrl->setPosition(position);	//地图快要越界,人物移动即可
                    }
                }else if(heroCtrl->getPosition().x >= SCREEN.width/2 && Direction.x<0 && position.x < SCREEN.width/2){//地图需要像右移动
                    //计算地图最左端x轴下一次位置
                    mapMaxX = tmxTileMap->getPositionX()+Direction.x;
                    //保证地图不会把越界部分移出来
                    if(mapMaxX < 0){
                        global->tmxTileMap->setPositionX(global->tmxTileMap->getPositionX()-Direction.x);
                        OptionLayer::npcMoveByMap(ccp(-Direction.x,0));
                        if(Direction.y != 0){
                            heroCtrl->setPositionY(heroCtrl->getPositionY() + Direction.y);//防止地图移动时,人物Y轴不能移动
                        }
                    }else{
                        heroCtrl->setPosition(position);	//地图快要越界,人物移动
                    }
                }else{
                    heroCtrl->setPosition(position);	//人物移动即可
                }
            }
        }
        
    }
    
    //--------------------------控制怪物移动-----------------------------------
    CCArray *npcs = global->npcs;
    CCObject *pObject = NULL;
    CCARRAY_FOREACH(npcs, pObject){
        NPC* npc =(NPC*)pObject;
        npc->setZOrder(1/npc->getPositionY()*ScreenHeight*4);//设置 怪物zOrder
        //如果是非动作状态则执行idle动画
        if(npc->getActionState() == ActionStateNone){
            npc->RunIdleAction();
        }
        
        
        npc->setPosition(npc->getPosition()+npc->getVector());	//怪物移动
        CCLOG("=========npc.x=%f/npc.y=%f======",npc->getPositionX(),npc->getPositionY());
        npcMoveToHero(npc);//坐标处理函数
    }
开发者ID:HUjinshuai,项目名称:-,代码行数:80,代码来源:OptionLayer.cpp


注:本文中的NPC::getPositionX方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。