LZ创建的TMX地图设有碰撞层,为不可移动,不可穿越的障碍,
接着设定随机在TMX地图上移动的精灵,如何让精灵在移动的过程中绕过设好的碰撞层,求助思路。。。
让精灵移动前,检测下一点是否在碰撞层上?如果在,就转方向。还可以递归下去
是这样的,我用了MoveTo,随机移动是随机出来的坐标,如果只是单纯地检测下一个到达的坐标点,在MoveTo的过程中还是会跨过墙…
先判定moveTo过程中会不会经过墙
请问有什么办法能让创建的精灵AI具有A*算法,随机出终点坐标后,自动寻路过去?
我觉得,这种情况最好还是在update里写算法,不要用moveto,以后想添加和其他东西的碰撞也比较容易
嗯,的确,用定时器会好很多,
请问有什么参照例子吗,每一帧都调用update应该是怎样的,新手求教。。
首先,在scene,或者你的控制类的init中调用scheduleUpdate()方法(需要继承自Node),再重写void update(float dt)这个方法
具体schedule的用法,你可以百度一下,有很多
下面就是你的逻辑了,update默认每帧调用一次,dt是帧所消耗的时间,单位:秒
下面是伪代码
Node* a;// 需要检测的Node,或者Sprite等
Vec2 speed (random,random); // 移动速度,包括方向
update(float dt){
do {
Vec2 tempPosition = a->getPosition() + speed * dt;
if ( tempPosition撞墙 ){
重置speed;
}else{
a->setPosition(tempPosition);
break;
}
} while (true);
}
具体怎么优化,就要看你上下文代码咯