android - 与cocos2d android中的其他对象发生碰撞时如何删除对象( Sprite )?

标签 android cocos2d-android

为了学习 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/

相关文章:

android - 如何从另一个类(它扩展 Activity)方法 Android 调用 CCColorLayer 类的方法?

php - 无法将数据从android发送到PHP

Android 图形内存限制

android - 为什么 ViewPager 在 android 中得到错误的位置?

android - 捕获 NFC 卡对 NFC 读卡器 ("LongPress"的连续按压)

cocos2d-iphone - Cocos2d-js 使用 webview 吗?

java - Android编程(cocos2d),白色矩形代替图像

android - Cocos 2D 如何缩小图像?

android - Holoeverywhere : how to programmatically remove at runtime the action bar from an activity

android - 如何使用 DialogFragment 和 FragmentManager 制作 DatePicker?