Это должно сработать, я сделал быстрый тест с stopActionWithTag, используя CCRepeatForever, и он останавливает его правильно.
Я могу только представить два случая, когда он не будет работать:
- У вас есть несколько действий с тегом = 20, выполняющихся с одним и тем же объектом.
- Объект, которому вы отправляете runAction, является другим объектом, чем тот, которому вы отправляете stopActionByTag.
Первое легко проверить.Если этот код решает вашу проблему, вы выполняете несколько действий с одним и тем же тегом на объекте игрока:
while ([player getActionByTag:20]) {
[player stopActionByTag:20];
};
Последнее маловероятно, но возможно.Один из способов выяснить это - установить точку останова на строке runAction и записать адрес переменной player.Затем установите другую точку останова в строке stopActionByTag и сравните адрес этого игрока с предыдущим.Если они не одинаковы, то это будет проблемой.