本文整理汇总了C++中NPC::getPositionY方法的典型用法代码示例。如果您正苦于以下问题:C++ NPC::getPositionY方法的具体用法?C++ NPC::getPositionY怎么用?C++ NPC::getPositionY使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NPC
的用法示例。
在下文中一共展示了NPC::getPositionY方法的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);//坐标处理函数
}