装甲逆袭-玩家移动处理

玩家移动目前采取的是摇杆方式,A星会在后期开始加入,后期会专门写一篇关于在游戏中加入A星。

摇杆的部分代码是用HIMI的那个,然后稍微修改。

#include "HRocker.h" 
#include "RpgGameScene.h"
#include "PlayerSprite.h"
#include "CommonUtil.h"
#include "MoveNPCSprite.h"
#include "CommonCollisonUtil.h"


//委托,处理地图上的一些事件,包括玩家移动,检测碰撞等。
void HRocker::updatePos(float dt){ 
if (!active)
return ;
CCNode *playernode=CommonUtil::getPlayerNode();
if (playernode!=NULL)
nowPlayerStand=playernode->getPosition();
jsSprite->setPosition(ccpAdd(jsSprite->getPosition(),ccpMult(ccpSub(currentPoint, jsSprite->getPosition()),0.5))); 
int fangxiang=CommonCollisonUtil::calculationDirection(centerPoint,currentPoint);
CommonCollisonUtil::isPlayerCollidesWithOther(fangxiang);
CommonCollisonUtil::isNPCCollidesWithPlayer();
CommonCollisonUtil::showDialogByPlayer();
if (CommonCollisonUtil::isCollidesWithDoor())
return;



//启动摇杆 
void HRocker::Active() 

if (!active) { 
flag=0;
currentPoint = centerPoint; 
active=true; 
schedule(schedule_selector(HRocker::updatePos));//添加刷新函数 
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority,false);//添加触摸委托 
}else { 
}



//解除摇杆 
void HRocker::Inactive() 

if (active) { 
flag=0;
currentPoint = centerPoint; 
active=false; 
this->unschedule(schedule_selector(HRocker::updatePos));//删除刷新 
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);//删除委托 
}else { 




//初始化 aPoint是摇杆中心 aRadius是摇杆半径 aJsSprite是摇杆控制点 aJsBg是摇杆背景 
HRocker* HRocker:: HRockerWithCenter(CCPoint aPoint ,float aRadius ,CCSprite* aJsSprite,CCSprite* aJsBg,bool _isFollowRole){ 
HRocker *jstick=HRocker::create(); 
jstick->initWithCenter(aPoint,aRadius,aJsSprite,aJsBg,_isFollowRole); 


return jstick; 



bool HRocker::ccTouchBegan(CCTouch* touch, CCEvent* event) 

if (!active)
{
return false;
}
CCPoint touchPoint = touch->getLocationInView(); 
touchPoint = CCDirector:: sharedDirector()->convertToGL(touchPoint); 
if (ccpDistance(touchPoint, centerPoint) > radius){ 
return false; 
}
currentPoint = touchPoint; 
return true; 



void  HRocker::ccTouchMoved(CCTouch* touch, CCEvent* event) 



CCPoint touchPoint = touch->getLocationInView(); 
touchPoint = CCDirector:: sharedDirector()->convertToGL(touchPoint); 
if (ccpDistance(touchPoint, centerPoint) > radius) 

currentPoint =ccpAdd(centerPoint,ccpMult(ccpNormalize(ccpSub(touchPoint, centerPoint)), radius)); 


}else { 
currentPoint = touchPoint; 





void  HRocker::ccTouchEnded(CCTouch* touch, CCEvent* event) 

currentPoint = centerPoint; 




void  HRocker::ccTouchCancelled(CCTouch* touch, CCEvent* event) 

currentPoint = centerPoint; 


}


HRocker* HRocker::initWithCenter(CCPoint aPoint ,float aRadius ,CCSprite* aJsSprite,CCSprite* aJsBg,bool _isFollowRole){ 
active = false; 
radius = aRadius; 
centerPoint =aPoint; 
currentPoint = centerPoint; 
jsSprite = aJsSprite; 
jsSprite->setPosition(centerPoint); 
aJsBg->setPosition(centerPoint); 
aJsBg->setTag(88); 
this->addChild(aJsBg); 
this->addChild(jsSprite); 


this->Active();//激活摇杆 




return this; 


效果图




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值