之前使用cocos2dx 3.x做了一个简单的地图缩放功能,也遇到了很多坑,在此发表出来希望看到文章的人以后避免遇到一些类似的坑,写的不好大家不要喷啊。多的不说了,上代码。
首先是.h文件:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::Layer
{
HelloWorld();
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
staticcocos2d::Scene* createScene();
CREATE_FUNC(HelloWorld);
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtualbool init()override;
private:
//添加触摸事件
void addTouchEvent(cocos2d::Node*);
//回滚
void scrollBack();
//多点触摸move事件
void onTouchesBeginCallback(conststd::vector<cocos2d::Touch*>&,cocos2d::Event*);
void onTouchesMovedCallback(conststd::vector<cocos2d::Touch*>&,cocos2d::Event*);
void onTouchesEndedCallback(conststd::vector<cocos2d::Touch*>&,cocos2d::Event*);
void onTouchesCancelCallback(conststd::vector<cocos2d::Touch*>&,cocos2d::Event*);
void touchScale(cocos2d::Vec2,cocos2d::Vec2);
private:
cocos2d::Sprite* m_pView =nullptr;//地图节点
float m_fMinScale =0.0f;//最小缩放值
float m_fMaxScale =1.0f;//最大缩放值
float m_fScale =0.0f;//当前缩放值
float m_fDistance =0.0f;//位移
cocos2d::Vec2 m_pMiddlePoint;//触摸中点
cocos2d::Vec2 m_pBoderOrigin;//左下角的边界点
cocos2d::Vec2 m_pBoderMax;//右上角的边界点
std::map<int,cocos2d::Vec2> m_touchIdPointMap;//触摸点的ID:pos map
std::vector<int> m_touchIdVec;//触摸点ID列表
};
#endif
其次是.cpp文件:
#include "HelloWorldScene.h"
USING_NS_CC;
HelloWorld::HelloWorld()
{
}
Scene* HelloWorld::createScene()
{
auto scene =Scene::create();
auto layer =HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return