如何实现精灵在指定范围内的随机运动

cocos2dx-3.x
如题,在TMX中圈定一个范围,

            //出现指定区域随机位置
    int minY = 3050;
    int maxY = 3350;
    int rangeY = maxY - minY;
    int actualY = rand() % rangeY + minY;

    int minX = 1000;
    int maxX = 1400;
    int rangeX = maxX - minX;
    int actualX = rand() % rangeX + minX;
    monster->setPosition(Vec2(actualX, actualY));

随机出现后如何让精灵随机运动

X,Y在指定范围内随机,随机出来后,用MoveTo动作,使用回调函数,当动作执行结束后继续随机,执行动作

怎么进行继续随机呢,现在只能移动一下,随机出来的值不会变
??
int minb = 3350;
int maxb = 3550;
int rangeb = maxb - minb;
int actualb = rand() % rangeb + minb;

    int mina = 4400;
    int maxa = 4800;
    int rangea = maxa - mina;
    int actuala = rand() % rangea + mina;

            auto yidong = MoveTo::create(5.0f, Vec2(actuala, actualb));
    auto seq = Sequence::create(yidong, yidong, NULL);
             monster->runAction(seq);

Sequence最后放一个callfuntion, 回调你上面的函数

楼上正解,callfuntion就是我说的回调函数

monster->yidong();

void StrongAndSlowMonster::yidong()
{
auto yd = MoveTo::create(5.0f, Vec2(actuala, actualb));
auto seq = Sequence::create(yd,
CallFuncN::create(CC_CALLBACK_0(StrongAndSlowMonster::yidong, this)),
NULL);
runAction(seq);
}
运行的结果是精灵闪一下就不见了…如何解决

求教5L解决办法

楼主基本的概念都没搞懂…下面这段代码
auto yidong = MoveTo::create(5.0f, Vec2(actuala, actualb));
auto seq = Sequence::create(yidong, yidong, NULL);
里面第二句代码,就跟我告诉你,你先回家,回到家后你再回家…你第二次肯定就不动了…因为我叫你去得时同个目的

auto yd = MoveTo::create(5.0f, Vec2(actuala, actualb));

Vec2(actuala, actualb)这是你要到达的点,值在哪里改变?和之前一样的错误…

楼主至少应该要懂得这个函数有什么用,里面每个参数干嘛的。建议楼主先去查下每个函数和参数干嘛的,然后再自己整理下逻辑写下

你把真实代码贴上来吧,你上面那样,有些我不知道是你故意省略的还是你真这么写的,譬如“runAction(seq);”我不知道是你真没加上monster->runAction(seq); 还是怎么样

void Test::randMove()
{
    float positionX = CCRANDOM_0_1() * 200;
    float positionY = CCRANDOM_0_1() * 200;

    CCMoveTo* yd = CCMoveTo::create(5.0f, ccp(positionX, positionY));
    CCSequence* seq = CCSequence::create(yd, CCCallFunc::create(this, callfunc_selector(Test::randMove)), NULL);

    testSprite->runAction(seq);
}

void Test::darwMainScence()
{
    testSprite = CCSprite::create(test.png");
    this->addChild(testSprite, 100);
    testSprite->setPosition(ccp(100,100));
    randMove();
}




```


我刚自己写了份是可以的,当然我用的是2.X的引擎

可以用RepeatForever这个action试试,感觉效果更好

Repeat/RepeatForever

反复执行某个动作,通常我们用Repeat和RepeatForever这两个方法执行:
Repeat::create(FiniteTimeAction *action, unsigned int times);
RepeatForever::create(ActionInterval *action);

问题已解决,谢谢大家。