如何在cocos2d-android中覆盖ccTouchbegan(删除重叠的精灵)

时间:2012-07-03 05:32:34

标签: android cocos2d-iphone cocos2d-android

我有一组精灵列表。如果精灵重叠,我想删除最顶层的精灵。

if(popRect1.containsPoint(popRect1,location))                    {

                       BaloonList1.remove( baloons );
                       baloons.removeSelf();

                 }

if(popRect2.containsPoint(popRect2,location))                    {

                       BaloonList2.remove( baloons );
                       baloons.removeSelf();

                 }             

当两个相同列表的精灵重叠并且如果我触摸它们时,只会删除最顶部的精灵...如果2个精灵来自不同的列表,并且当我触摸最顶部精灵时它们都正在移除(就像我的触摸正在拦截..我认为它的发生是因为两个接触点都是精灵的有界矩形)..我搜索了很多。有人说覆盖TouchBegan..registerWithTouchDispatcher ...是否有人有任何想法???????我知道这可能是一个简单的问题4u伙计们。如果你想要更多的代码或描述,请告诉我

2 个答案:

答案 0 :(得分:0)

addChild(CCNode child,int z);

如果你设置z的值,如0,1,2,3,4 ..等等..

此后,当您触摸屏幕时,z的值决定删除精灵。 在发生重叠的情况下,首先要删除哪个精灵,给出z的值是max。对其他人。

答案 1 :(得分:0)

你还必须先保存添加了精灵的状态。 假设我们有2个精灵A和B.

情况1)如果A和B具有相同的z值

如果我们添加B精灵,那么在精灵之后,A将出现在B精灵之上。所以我们需要设置最后添加精灵的状态。根据你必须删除精灵。 情况2)如果A和B具有不同的z值 在这种情况下。你有清晰的画面。具有更多z值的精灵将出现在其他精灵之上。所以你可以删除那个精灵。


如果您使用案例1,那么您也必须保持状态。

假设我们有两个ArrayList:ArrayList1和ArrayList2

我们将状态保存为ArrayList:ArrayListStatus1,ArrayListStatus2

我们已将状态初始化为1。 int status = 1;

如果我们在任何ArrayList中添加一个sprite,我们还要将in ArrayListStatus添加到相应的状态数组列表并增加状态,以便下次添加sprite时它将添加一个加号状态。

现在我们有了订单,所以我们可以应用sprite上面的检查。状态对应于状态arraylist。