cocos2d-x 3.2 移动游戏背景和精灵
来源:互联网 发布:椭圆机品牌 知乎 编辑:程序博客网 时间:2024/04/30 05:56
1,先新增监听事件
1
2
3
4
5
6
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(
true
);
listener->onTouchBegan = CC_CALLBACK_2(StartGame::onTouchBegan,
this
);
listener->onTouchMoved = CC_CALLBACK_2(StartGame::onTouchMoved,
this
);
listener->onTouchEnded = CC_CALLBACK_2(StartGame::onTouchEnded,
this
);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,
this
);
2,监听的方法回调函数实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool StartGame::onTouchBegan(Touch* touch, Event* event)
{
Point touchLocation =
this
->convertTouchToNodeSpace(touch);
this
->selectSpriteForTouch(touchLocation);
return
true
;
}
void
StartGame::onTouchMoved(Touch* touch, Event* event)
{
Point touchLocation =
this
->convertTouchToNodeSpace(touch);
Point oldTouchLocation = touch->getPreviousLocation();
oldTouchLocation =
this
->convertToNodeSpace(oldTouchLocation);
Point translation = touchLocation - oldTouchLocation;
//获取移动的距离
CCLog(
"touchLocation--------------------%d-------%d"
,touchLocation.x,touchLocation.y);
CCLog(
"oldTouchLocation--------------------%d-------%d"
,oldTouchLocation.x,oldTouchLocation.y);
CCLog(
"translation--------------------%d-------%d"
,translation.x,translation.y);
this
->boundLayerPos(translation);
//背景移动函数
1
2
3
4
5
6
7
//this->panForTranslation(translation);//精灵移动函数
}
void
StartGame::onTouchEnded(Touch* touch, Event* event)
{
}
这个事背景事件,在init里面加载一张背景图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void
StartGame::boundLayerPos(Point newtouch)
{
Size winSize = Director::getInstance()->getWinSize();
Point newPos =
this
->getPosition() + newtouch;
auto map = getChildByTag(
102
);
//这里获取背景图片
newPos.x = MIN(newPos.x,
0
);
newPos.x = MAX(newPos.x, -map->getContentSize().width+winSize.width);
newPos.y = MIN(newPos.y,
0
);
newPos.y = MAX(newPos.y, -map->getContentSize().height + winSize.height);
this
->setPosition(newPos);
}
精灵移动方法实现
在init里面加载一个精灵
1
2
3
4
5
6
7
void
StartGame::panForTranslation(Point translation)
{
auto sprite = getChildByTag(
101
);
//获取精灵
Point newPos = sprite->getPosition() + translation;
sprite->setPosition(newPos);
}
这就ok了
精灵或者是背景图片移动都是在触屏监听事件的onTouchMoved(Touch* touch,Event * event)里面获取原触屏点和移动以后的触屏点,得到他们的差值,给精灵或者背景图片重新定位setPosition(Point * point),就完成了背景和精灵的移动(背景图片要判断边界值得)
注意,Node可通过函数getBoundingBox返回精灵的边界矩形。这比你自己手动计算精灵的边界矩形要好多了。因为,第一,它更简单;第二,它考虑了精灵的位置坐标变换。(比如锚点变了,要执行相应的矩阵变换,具体可以参考源代码,这些就不再细说了。)
点击选中的时候可以先让精灵做一些动作,这里是闪烁
1
2
3
4
5
6
7
8
9
10
11
12
void
StartGame::selectSpriteForTouch(Point touchLocation)
{
auto sprite = getChildByTag(
101
);
if
( sprite->getBoundingBox().containsPoint(touchLocation) )
{
auto blink = CCBlink::create(
2
.0f,
5
);
sprite->runAction(blink);
}
}
0 0
- cocos2d-x 3.2 移动游戏背景和精灵
- cocos2d-x 3.2 移动游戏背景和精灵
- Cocos2d-x 精灵移动
- cocos2d-x精灵的添加和移动
- cocos2d-x Touch 移动精灵
- cocos2d-x中精灵移动
- Cocos2D-x游戏开发之十一:在游戏背景上添加精灵
- cocos2d-x-3.2塔防游戏开发1:背景,地图,obj,产生移动NPC的实现
- 如何移动一个cocos2d-x精灵
- Cocos2d-x基础示例-精灵移动1
- Cocos2d-x 基础示例-精灵移动2
- 如何移动一个cocos2d-x精灵
- Cocos2d-x基础示例 精灵移动3
- Cocos2d-x随记(2)-精灵移动
- Cocos2d-x随记-精灵移动(续)
- cocos2d-x精灵自定义路径移动
- cocos2d-x学习二精灵定时移动
- cocos2d-x精灵移动的方法
- .net 导出excel 数字文本
- 桶排序
- 基类和派生类析构函数调用顺序的输出例子
- 记录的地平线第二季ED – Wonderful Wonder World*/Yun*chi 320k
- 高德和百度之间的经纬度转换
- cocos2d-x 3.2 移动游戏背景和精灵
- Android WebView常见问题解决方案汇总
- Linux内核Makefile笔记
- cocos2d-x创建和转换场景
- 写入证书到USBKEY
- 读后感1《微信视频和文章》
- MMA9553L/MMA955L 计步器快速使用指南
- 汇总一些困扰了很久的问题
- Lua面向对象