void FirstGame::update(float dt)
{
//遍历子弹数组
CCObject *obj1=NULL;
CCSprite *upBullet=NULL;
CCARRAY_FOREACH(bullets,obj1)
{
upBullet=(CCSprite*)obj1;
//遍历敌人数组
CCObject *obj2=NULL;
CCSprite *upEnemy=NULL;
CCARRAY_FOREACH(enemies,obj2)
{
upEnemy=(CCSprite*)obj2;
//碰撞检测
if(bullets==NULL)
CCLOG("Array is clear");
else if(upBullet->boundingBox().intersectsRect(upEnemy->boundingBox()))
{
//隐藏敌人
c
//隐藏子弹
this->removeChild(upBullet);
break;
}
}
}
}
代码运行的效果是子弹碰到敌人,然后两个同时消失,第二个子弹如果到了上次消失的地方,第二个子弹也会消失,就好像那个地方有敌人一样,就像是this->removeChild(upEnemy);只是把图片从屏幕上移除了,但其实敌人还在被击中点停留......
请问我的代码哪里错了
7 个解决方案
#1
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错
#2
但是upEnemy只能在遍历的那个函数体里面用......怎么整......抱歉说出这么无脑的话,毕竟我C++没学好......
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpZMkxtZHBaZz09.jpg?w=700)
#3
在碰撞检测那个函数体里enemies->removeAllObjects();
bullets->removeAllObjects();
问题解决了,但是有的敌人子弹直接就穿过去了......不好意思问了都
bullets->removeAllObjects();
问题解决了,但是有的敌人子弹直接就穿过去了......不好意思问了都
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpFNUxtZHBaZz09.jpg?w=700)
#4
在碰撞检测那个函数体里enemies->removeAllObjects(); 但是upEnemy只能在遍历的那个函数体里面用......怎么整......抱歉说出这么无脑的话,毕竟我C++没学好......
楼主下次发代码记得加上代码标签~这样大家看起来比较方便~我已经帮你加了
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错![]()
bullets->removeAllObjects();
问题解决了,但是有的敌人子弹直接就穿过去了......不好意思问了都![]()
removeAllObjects的话,那没被子弹打中的敌人也被你移除了。。。
你创建一个新的CCArray,把要删除的敌人对象添加进这个CCArray里,在循环结束后,再遍历这个CCArray,把enemies相应的对象删除(CCArray应该是有个removeObject函数吧,没记错的话)
#5
在碰撞检测那个函数体里enemies->removeAllObjects(); 但是upEnemy只能在遍历的那个函数体里面用......怎么整......抱歉说出这么无脑的话,毕竟我C++没学好......
楼主下次发代码记得加上代码标签~这样大家看起来比较方便~我已经帮你加了
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错![]()
bullets->removeAllObjects();
问题解决了,但是有的敌人子弹直接就穿过去了......不好意思问了都![]()
removeAllObjects的话,那没被子弹打中的敌人也被你移除了。。。
你创建一个新的CCArray,把要删除的敌人对象添加进这个CCArray里,在循环结束后,再遍历这个CCArray,把enemies相应的对象删除(CCArray应该是有个removeObject函数吧,没记错的话)
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpJM0xtZHBaZz09.jpg?w=700)
#6
......好像分没给上啊啊啊啊啊啊啊,坑爹啊啊啊啊啊啊
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpReUxtZHBaZz09.jpg?w=700)
#7
不客气,以后你变牛叉了就多多来这里回答问题~
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyMXZibXRsZVM4eU5pNW5hV1k9.jpg?w=700)
#1
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错
#2
楼主下次发代码记得加上代码标签~这样大家看起来比较方便~我已经帮你加了
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpZMkxtZHBaZz09.jpg?w=700)
#3
但是upEnemy只能在遍历的那个函数体里面用......怎么整......抱歉说出这么无脑的话,毕竟我C++没学好......
楼主下次发代码记得加上代码标签~这样大家看起来比较方便~我已经帮你加了
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错![]()
bullets->removeAllObjects();
问题解决了,但是有的敌人子弹直接就穿过去了......不好意思问了都
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpFNUxtZHBaZz09.jpg?w=700)
#4
在碰撞检测那个函数体里enemies->removeAllObjects(); 但是upEnemy只能在遍历的那个函数体里面用......怎么整......抱歉说出这么无脑的话,毕竟我C++没学好......
楼主下次发代码记得加上代码标签~这样大家看起来比较方便~我已经帮你加了
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错![]()
bullets->removeAllObjects();
问题解决了,但是有的敌人子弹直接就穿过去了......不好意思问了都![]()
removeAllObjects的话,那没被子弹打中的敌人也被你移除了。。。
你创建一个新的CCArray,把要删除的敌人对象添加进这个CCArray里,在循环结束后,再遍历这个CCArray,把enemies相应的对象删除(CCArray应该是有个removeObject函数吧,没记错的话)
#5
在碰撞检测那个函数体里enemies->removeAllObjects(); 但是upEnemy只能在遍历的那个函数体里面用......怎么整......抱歉说出这么无脑的话,毕竟我C++没学好......
楼主下次发代码记得加上代码标签~这样大家看起来比较方便~我已经帮你加了
然后回到问题~
你只是把upEnemy从父节点上删除了,但是你的enemies数组里还是保持了它的引用,所以这个敌人下次还是会被遍历,于是子弹又一次把它给碰撞了
所以你要彻底地把upEnemy给删除了,数组里也要把它移除~
PS:不要直接在CCARRAY_FOREACH(enemies,obj2)里把 upEnemy 从enemies里移除,在遍历数组时移除元素应该会报错![]()
bullets->removeAllObjects();
问题解决了,但是有的敌人子弹直接就穿过去了......不好意思问了都![]()
removeAllObjects的话,那没被子弹打中的敌人也被你移除了。。。
你创建一个新的CCArray,把要删除的敌人对象添加进这个CCArray里,在循环结束后,再遍历这个CCArray,把enemies相应的对象删除(CCArray应该是有个removeObject函数吧,没记错的话)
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpJM0xtZHBaZz09.jpg?w=700)
#6
......好像分没给上啊啊啊啊啊啊啊,坑爹啊啊啊啊啊啊
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyOXVhVzl1THpReUxtZHBaZz09.jpg?w=700)
#7
不客气,以后你变牛叉了就多多来这里回答问题~
![[cocos2d-x]碰撞检测 [cocos2d-x]碰撞检测](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0hNNkx5OW1iM0oxYlM1amMyUnVMbTVsZEM5UWIybHVkRVp2Y25WdEwzVnBMM05qY21sd2RITXZZM05rYmk5UWJIVm5hVzR2TURBekwyMXZibXRsZVM4eU5pNW5hV1k9.jpg?w=700)