当前位置: 首页 > news >正文

装甲逆袭-玩家移动处理

玩家移动目前采取的是摇杆方式,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; 


效果图





http://www.taodudu.cc/news/show-6105768.html

相关文章:

  • 开机后我的计算机打不开,电脑开机后图标打不开怎么办
  • 电脑开不了机的原因和解决办法
  • Proe转Solidworks
  • proe5.0插件在windows7 64系统预览模型
  • proe常用c语言语句,proe关系式(大全).doc
  • proe5.0启动失败,光标转了几圈后没有任何反应
  • proe常用c语言语句,Proe如何使用if条件语句?
  • proe常用c语言语句,带你轻松搞懂Proe条件语句
  • 【MFC】基于OpenCV的魔镜
  • 魔镜魔镜告诉我谁是世界上最美的人 语音唤醒,百度语音识别。从装系统开始
  • 制作魔镜页
  • 魔镜连接本地mysql_打造属于你的树莓派“魔镜”—硬件篇
  • 旧电脑利用:windows网页版魔镜【不需树莓派】
  • 笔记1 第11课 贪心初步 ——柠檬水找零,分发饼干,跳跃游戏,完成所有任务所需最小能量——极客时间算法
  • 学完教程,不知道接下去从哪里开始做自己的第一个APP,怎么办?酷课堂iOS交流群问答(201902期)
  • 贪心相关:柠檬水找零、买卖股票的最佳时机、分发饼干、跳跃游戏 ...
  • 干货来了 | SQL 进阶技巧
  • 干货 | SQL 进阶技巧
  • 【LeetCode】两道贪心算法题目-455分发饼干,860柠檬水找零
  • LeetCode455分发饼干
  • 柠檬模拟群面复盘
  • 7-7 快速求和
  • 1.神奇的字符串之快速求和
  • 奔波真是辛苦啊,然而生命终将逝去,只希望当一切都结束的时候,能够没有遗憾吧。
  • 热爱可抵岁月漫长,温柔可挡艰难时光—2020年终总结
  • 经典S Q L语句大全
  • 最美的时光在飞逝,为什么还在努力的路上蹒跚?
  • 时光飞逝,思考,实践,伴我一生的经验
  • 315编辑器
  • 039.简单的文本编辑器