精灵触摸事件的问题,为什么始终是最后一个响应?

我自己自定义了一个grid类,并且构造了20个,我写的是当每一个触摸的时候会改变自己的一个锁定和非锁定的状态,但是为什么现在无论触摸哪个都是最后一个变换状态?

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include “Grid.h”

USING_NS_CC;

Sprite *skin;
Sprite lockSkin;
bool _isLock;
Sprite
Grid::createSprite()
{
auto grid = Grid::create();

return grid;

}

// on “init” you need to initialize your instance
bool Grid::init()
{
if ( !Sprite::init() )
{
return false;
}
skin=Sprite::create(“grid.png”);
this->addChild(skin);
lockSkin=Sprite::create(“lock.png”);
this->addChild(lockSkin);
lockSkin->runAction(Hide::create());
_isLock=false;

EventDispatcher* eventDispatcher = Director::getInstance()->getEventDispatcher();  

auto listen = EventListenerTouchOneByOne::create();  

listen->onTouchBegan= CC_CALLBACK_2(Grid::onTouchesBegan,this);

eventDispatcher->addEventListenerWithSceneGraphPriority(listen,this);  

return true;
}
Rect Grid::getRect()
{
auto s = skin->getContentSize();
return Rect(-s.width / 2, -s.height / 2, s.width, s.height);
}

//触摸事件开始,手指按下时
bool Grid::onTouchesBegan(Touch* touch, Event* event)
{
if ( getRect().containsPoint(convertTouchToNodeSpaceAR(touch)))//判断触摸点是否在目标的范围内
{
log("------------------");
this->setLock(!this->getLock());
return true;
}
return false;
};

void Grid::setLock(bool _lock){
_isLock=_lock;
if(_lock){
lockSkin->runAction(Show::create());
}else{
lockSkin->runAction(Hide::create());
}
}
bool Grid::getLock(){
return _isLock;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include “StartScene.h”
#include “Grid.h”

USING_NS_CC;

Sprite *box;

Scene* Start::createScene()
{
auto scene = Scene::create();

auto layer = Start::create();


scene->addChild(layer);


return scene;

}

bool Start::init()
{
if ( !Layer::init() )
{
return false;
}
box=Sprite::create();
this->addChild(box);

for (int i = 0; i < 20; i++)
{
auto grid =Grid::createSprite();
box->addChild(grid);
grid->setPosition(ccp(44+(i%5)88, 44+(i/588)));
}
return true;
}

你没有设置ZOrder,所以在渲染的时候,后加的默认是在先加的前面的,而触摸消息分发是,根据优先级以及渲染层级分发,很符合现实情况,就像发牌一样,后放上去的牌总是先被摸到

我的精灵并未重叠,不知道为啥 点击哪一个调用的都是最后一个的onTouchesBegan方法

找到原因了 原来类里面声明的属性 竟然是静态的。。。。。。。我是新人不懂这个。