我正在尝试从平铺地图编辑器 tmx 文件中制作一些移动瓷砖。我在它们自己的图层中有移动的瓷砖,我只想让它们向上移动,然后当它们到达某个 y 时,再向下移动,等等。
我一直在寻找实现这一目标的明确方法,但我的努力没有成功。
我尝试使用这里的一些方法。
总的来说,我对 cocos2d 开发还是很陌生,所以我很感激对此的任何见解。非常感谢您的宝贵时间。如果您有任何问题,请询问!:) 另外,如果有帮助,我要移动的瓷砖呈大 T 形。
最后更新:
(删除了更多不相关的代码,以便将来任何人都可以轻松找到我的解决方案(完整答案如下),您可以在上面的链接中找到我的层迭代方法)。
好的,所以我终于让它接近我想要的方式了。我认为这并不是最理想的方式,但这就是我所拥有的。
注意:为了让这对你有用,你必须在调试模式下运行你的应用程序,否则它会滞后/使玩家跌倒(至少对我来说是这样......)。
我有一个更新函数,它每帧调用某些函数。(检查碰撞、移动平台等)。
该更新功能调用我的移动平台功能..
像这样:
[self movePlatforms:0.1];
这是我的 movePlatforms 功能..
-(void)movePlatforms: (ccTime) dt{
if(goingDown){
moveCount++;
}else{
moveCount--;
}
CGSize s = [movingTiles layerSize];
for( int x=0; x<s.width;x++) {
for( int y=0; y< s.height; y++ ) {
CCSprite *tile = [movingTiles tileAt:ccp(x,y)];
if(goingDown){
CGPoint newPosition = ccp(tile.position.x, tile.position.y - 1);
tile.position = newPosition;
if(moveCount >= 100){
goingDown = false;
}
}else{
CGPoint newPosition = ccp(tile.position.x, tile.position.y + 1);
tile.position = newPosition;
if(moveCount <= 0){
goingDown = true;
}
}
}
}
}
所以基本上,我创建了一个 int moveCount 和一个 BOOL goingDown 来跟踪我的 movePlatform 函数被调用了多少次。因此,在 100 次调用后,它会切换方向。
(这对我来说很好,如果是这种情况,你可能需要其他东西,比如碰撞检测器,使用这个)。
if (CGRectIntersectsRect([someSprite boundingBox], [someSprite boundingBox])) {
//Do something
}
希望这对将来的某个人有用,我知道这对我来说很头疼,而且它可能甚至没有正确完成,或者有更好的方法来做到这一点,但如果这对你有帮助,那就太棒了!