我自己自定义了一个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;
}