Cocos2d x 如何对从数组中提取并显示在屏幕上的精灵执行拖放操作?

Cocos2d x 如何对从数组中提取并显示在屏幕上的精灵执行拖放操作?,cocos2d-x,Cocos2d X,我想对这些图像执行拖放操作 如何使用以下代码使其成为可能 void storeLocation::changescene() { this->removeAllChildren(); //CCDirector::sharedDirector()->replaceScene(storeLocation::scene()); CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint

我想对这些图像执行拖放操作

如何使用以下代码使其成为可能

void storeLocation::changescene()
{

this->removeAllChildren();
//CCDirector::sharedDirector()->replaceScene(storeLocation::scene());

CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();

//CCScene* scene=CCScene::create();
    storeLocation *layer = storeLocation::create();
    CCSprite *k=CCSprite::create("background.png");
    this->addChild(k,0);
    k->setPosition(ccp(visibleSize.width/2+ origin.x, visibleSize.height/2 + origin.y));
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                    "CloseNormal.png",
                                    "CloseSelected.png",
                                    this,
                                    menu_selector(storeLocation::menuCloseCallback));

pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width ,
                            origin.y + pCloseItem->getContentSize().height/2));
pCloseItem->setScale(1.5);
// create menu, it's an autorelease object
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);

        this->addChild(pMenu, 1);
        this->setTouchEnabled(true);











int l=5;
int posx=0,posy=0;


int count=0,r,j=-1,i=0,flag=0;
int x=20;
int b[30],a[30];
while(count<=5)
{
    srand(time(0));

    r=rand()%x+1;
    flag=checktag(b,r,j);
    if(flag==1)
    {


    b[i]=r;
    i++;
    count++;
    j++;

    }

}

            int t;


CCObject* jt=NULL;

CCARRAY_FOREACH(images, jt)
    {
           // CCSize winSize = CCDirector::sharedDirector()->getWinSize();
            //float i=winSize.width;

        CCSprite *image = dynamic_cast<CCSprite*>(jt);
        t=image->getTag();
        for(i=0;i<l;i++)
        {
            if(t==b[i])
            {
                this->addChild(image);
        image->setPosition(ccp(100+posx,100));
        posx=posx+120;


            }}}
void storeLocation::changeSecene()
{
此->删除所有儿童();
//CCDirector::sharedDirector()->ReplaceSecene(storeLocation::scene());
CCSize visibleSize=CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin=CCDirector::sharedDirector()->getVisibleOrigin();
//CCScene*scene=ccscscene::create();
storeLocation*layer=storeLocation::create();
CCSprite*k=CCSprite::create(“background.png”);
此->添加子对象(k,0);
k->setPosition(ccp(visibleSize.width/2+原点.x,visibleSize.height/2+原点.y));
CCMenuItemImage*pCloseItem=CCMenuItemImage::create(
“CloseNormal.png”,
“CloseSelected.png”,
这
菜单选择器(storeLocation::menuCloseCallback));
pCloseItem->setPosition(ccp(origin.x+visibleSize.width-pCloseItem->getContentSize().width,
origin.y+pCloseItem->getContentSize().height/2);
pCloseItem->setScale(1.5);
//创建菜单,它是一个自动释放对象
ccmen*pMenu=ccmen::create(pCloseItem,NULL);
pMenu->设置位置(CCPointZero);
此->添加子对象(pMenu,1);
此->添加子对象(pMenu,1);
此->setTouchEnabled(真);
int l=5;
int posx=0,posy=0;
int count=0,r,j=-1,i=0,flag=0;
int x=20;
int b[30],a[30];
while(countgetWinSize();
//float i=winSize.width;
CCSprite*图像=动态_投射(jt);
t=image->getTag();
for(i=0;iaddChild(图像);
图像->设置位置(ccp(100+posx,100));
posx=posx+120;
}}}

要将图像从屏幕上的一点拖放到另一点,必须使用触摸代理方法

bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
在CCTouchStart方法中检测用户触摸上的图像,为此,您可以将所有图像对象存储在一个数组中,并使用for循环检查触摸是否位于任何图像的正方向

要使用用户触摸移动图像,请更改触摸图像在ccTouchMoved中的位置(将触摸图像对象保存在全局对象中)


在ccTouchEnded方法中,可以对拖放图像执行任何操作。

捕获拖放事件的最简单方法是实现OnTouchStart、onTouchMoved和onTouchEnded方法,如下所示:

auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, sprite);

bool HelloWorld::onTouchBegan(Touch* touch, cocos2d::Event* event){
    // this method is not needed but in order to implement the onTouchMoved you have to first implement onTouchBegan then the onTouchMoved
    return true;
}

void HelloWorld::onTouchMoved(Touch* touch, cocos2d::Event* event){
    if (sprite->getBoundingBox().containsPoint(touch->getLocation()))
    {
        sprite->setPosition(sprite->getPosition() + touch->getDelta());
    }
}
void HelloWorld::onTouchEnded(Touch* touch, cocos2d::Event* event){
    if (sprite->getBoundingBox().containsPoint(touch->getLocation()))
    {
        log("Sprite Drop Event");
    }
}