为了学习 cocos2d-android 游戏引擎,我开始使用这个教程开发游戏,http://dan.clarke.name/2011/05/how-to-make-a-simple-android-game- with-cocos2d-pt2-%E2%80%93-rotating-turrets/
增加了3艘船为了让它更有吸引力并且固定了大炮,如果火球从天上掉在船上,船会通过保留它作为编码的概念而被烧毁和摧毁,但是当火球落在船上时它没有被摧毁(删除),我尝试了很多方法但无法得到解决方案有人可以告诉为什么船没有被摧毁吗?
这是我的编码。
public void update(float dt)
{
LinkedList<CCSprite> projectilesToDelete = new LinkedList<CCSprite>();
for (CCSprite projectile : _projectiles)
{
CGRect projectileRect = CGRect.make(projectile.getPosition().x - (projectile.getContentSize().width / 2.0f),
projectile.getPosition().y - (projectile.getContentSize().height / 2.0f),
projectile.getContentSize().width,
projectile.getContentSize().height);
LinkedList<CCSprite> targetsToDelete = new LinkedList<CCSprite>();
for (CCSprite target : _targets)
{
CGRect targetRect = CGRect.make(target.getPosition().x - (target.getContentSize().width),
target.getPosition().y - (target.getContentSize().height),
target.getContentSize().width,
target.getContentSize().height);
if (CGRect.intersects(projectileRect, targetRect))
targetsToDelete.add(target);
}
LinkedList<CCSprite> shipsToDelete = new LinkedList<CCSprite>();
for (CCSprite ship : _ships)
{
CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width),
ship.getPosition().y - (ship.getContentSize().height),
ship.getContentSize().width,ship.getContentSize().height);
for (CCSprite target : _targets)
{
CGRect targetRect = CGRect.make(target.getPosition().x - (target.getContentSize().width),
target.getPosition().y -
(target.getContentSize().height),
target.getContentSize().width,target.getContentSize().height);
if (CGRect.intersects(targetRect, shipRect))
{
shipsToDelete.add(ship);
break;
}
}
}
for (CCSprite target : targetsToDelete)
{
_targets.remove(target);
removeChild(target, true);
}
if (targetsToDelete.size() > 0)
projectilesToDelete.add(projectile);
for (CCSprite ship : shipsToDelete)
{
_ships.remove(ship);
removeChild(ship, true);
}
}
for (CCSprite projectile : projectilesToDelete)
{
_projectiles.remove(projectile);
removeChild(projectile, true);
if (_shipDestroyed > 0)
{
_shipDestroyed = 0;
CCDirector.sharedDirector().replaceScene(Gameoverlayer.scene("You Win!"));
}
}
}
最佳答案
像这样添加射弹与飞船相交的代码
LinkedList<CCSprite> targetsToDelete = new LinkedList<CCSprite>();
对于(CCSprite 目标:_targets) { CGRect targetRect = CGRect.make(target.getPosition().x - (target.getContentSize().width), target.getPosition().y - (target.getContentSize().height), target.getContentSize().width, target.getContentSize().height);
System.out.println("projectiles to delete continue... : " + volume);
LinkedList<CCSprite> shipsToDelete = new LinkedList<CCSprite>();
{
for (CCSprite ship : _ships)
{
CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width/2),
ship.getPosition().y - (ship.getContentSize().height/2),
ship.getContentSize().width,
ship.getContentSize().height);
System.out.println("ships to delete continue... : " + volume);
if (CGRect.intersects(targetRect, shipRect))
{
System.out.println("ships intersected:)... : " + volume);
shipsToDelete.add(ship);
}
if (targetsToDelete.size() > 0)
shipsToDelete.add(ship);
}
for (CCSprite ship : shipsToDelete)
{
_ships.remove(ship);
removeChild(ship, true);
CCDirector.sharedDirector().replaceScene(Gameoverlayer.scene("You Win!"));
}
}
并在 addsomeothercode() 方法中添加 Sprite ,并通过给出代码作为删除 Sprite
public void spriteMoveFinished(Object sender)
{
CCSprite sprite = (CCSprite)sender;
if (sprite.getTag() == 1)
{ if (sprite.getTag() == 1)
_ships.remove(sprite);
}
关于android - 与cocos2d android中的其他对象发生碰撞时如何删除对象( Sprite )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16692692/