Как да разберете дали спрайтът се сблъсква с другия спрайт в cocos2d-android?

Търсих много, за да накарам спрайта (_player) да бъде открит и да се сблъска с другия спрайт (цел) и да бъде премахнат след сблъсъка чрез нашия сайт на Google и stackoverflow, но не можах да получа решението в cocos2d-android, аз съм мога да намеря много информация за cocos2d-iphone не на android, дори аз сравних кода си с кода на iphone, но не можах да разбера. така бях направил.

public class GameLayer extends CCColorLayer
 {
protected LinkedList<CCSprite> _targets;
protected LinkedList<CCSprite> _projectiles;
protected int _projectilesDestroyed;
protected CCSprite _player;
protected CCSprite _nextProjectile;

public static CCScene scene()
{
    CCScene scene = CCScene.node();
    CCColorLayer layer = new GameLayer(ccColor4B.ccc4(255, 255, 255, 255));

    scene.addChild(layer);

    return scene;
}


protected GameLayer(ccColor4B color)
{
    super(color);

    this.setIsTouchEnabled(true);

    _targets = new LinkedList<CCSprite>();
    _projectiles = new LinkedList<CCSprite>();
    _projectilesDestroyed = 0;

    CGSize winSize = CCDirector.sharedDirector().displaySize();

    _player = CCSprite.sprite("Player2.png");
    _player.setPosition(CGPoint.ccp(_player.getContentSize().width / 2.0f, winSize.height / 2.0f));

    addChild(_player);


    this.schedule("gameLogic", 1.0f);
    this.schedule("update");
}

метод за актуализиране

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);



            _player = CCSprite.sprite("Player2.png");
            _player.setPosition(CGPoint.ccp(50,100));
            CGRect playerRect = CGRect.make(_player.getPosition().x - (_player.getContentSize().width / 2.0f),
                    _player.getPosition().y - (_player.getContentSize().height / 2.0f),
                    _player.getContentSize().width,
                    _player.getContentSize().height);

            if (CGRect.intersects(projectileRect, targetRect))
                targetsToDelete.add(target);


            else if (CGRect.intersects(playerRect, targetRect))
                _player.remove(_player);
            removeChild(_player, true);

        }

        for (CCSprite target : targetsToDelete)
        {
            _targets.remove(target);
            removeChild(target, true);
        }

        if (targetsToDelete.size() > 0)
            projectilesToDelete.add(projectile);
    }

person DD.    schedule 24.05.2013    source източник
comment
Използвате ли примера на Дан Кларк или друго?   -  person Akarsh M    schedule 24.05.2013
comment
да, използвам само този урок @user2078315   -  person DD.    schedule 24.05.2013
comment
И така, кодът работи добре, когато двата спрайта се сблъскат. Каква грешка имаш?   -  person Akarsh M    schedule 27.05.2013
comment
не получавам никаква грешка, спрайтовете се пресичат, но не се сблъскват и изтрийте @user2078315   -  person DD.    schedule 27.05.2013
comment
Също така изтеглих кода ... И работи добре в моя случай .. Ще го проверя отново с твоя код и възможно най-скоро ...   -  person Akarsh M    schedule 27.05.2013
comment
няма проблем в изтегления код, работи добре, но добавих отделен корабен спрайт с оръдие, когато огненото кълбо падне върху кораба, корабът не се изтрива@user2078315   -  person DD.    schedule 27.05.2013


Отговори (1)


За да се намери решението за този отговор, отне една седмица:( Когато нов спрайт се добави в играта първо, той трябва да бъде деклариран в метода addsomefunction(), моята грешка беше, че декларирах стойността на кораба (спрайт) в конструктора, а не в addTarget() и за премахване на спрайта след сблъсък кодът трябва да бъде даден в public void spriteMoveFinished(Object sender) като

if (sprite.getTag() == 25)
_ships.remove(sprite);

тъй като имах Target(sprite) в този метод, се обърках като къде да добавя кода.

person DD.    schedule 14.06.2013