Search code examples
androidcocos2d-android

How to remove the sprite when I touch on it in cocos2d android?


I tried this for the solution ....

public void update(float dt)
{ 
    CGRect targetRect = CGRect.make(target.getPosition().x -(target.getContentSize().width),target.getPosition().y - (target.getContentSize().height),target.getContentSize().width,target.getContentSize().height);
    if (CGRect.containsPoint(targetRect, location))
    {
       spriteMoveFinished(target);
    }
}

but i can't get the result.


Solution

  • I have checked your code You have not scheduled the method update. I have moved the update method coding to touch method so we don't need of update to schedule now. Below is the updated code which working fine at my end.. touch working properly

    import java.util.ArrayList;
    
    import org.cocos2d.actions.instant.CCCallFuncN;
    import org.cocos2d.actions.interval.CCMoveTo;
    import org.cocos2d.actions.interval.CCSequence;
    import org.cocos2d.layers.CCColorLayer;
    import org.cocos2d.layers.CCScene;
    import org.cocos2d.nodes.CCDirector;
    import org.cocos2d.nodes.CCSprite;
    import org.cocos2d.types.CGPoint;
    import org.cocos2d.types.CGRect;
    import org.cocos2d.types.CGSize;
    import org.cocos2d.types.ccColor4B;
    
    import android.view.MotionEvent;
    
    public class as extends CCColorLayer{
    protected CCSprite target;
    protected ArrayList<CCSprite> _targets;
    CGPoint location;
    
    public static CCScene scene(){
        CCScene scene = CCScene.node();
        CCColorLayer layer = new as(ccColor4B.ccc4(255, 255, 255, 255));
        scene.addChild(layer);
        return scene;
    }
    protected as(ccColor4B color){
        super(color);
        this.setIsTouchEnabled(true);
        _targets = new ArrayList<CCSprite>();
        this.schedule("gameLogic", 3.0f);
    }       
    @Override
    public boolean ccTouchesBegan(MotionEvent event) {
         location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));
    
         ArrayList<CCSprite> targetsToDelete = new ArrayList<CCSprite>();
         for (CCSprite target : _targets){
             if(CGRect.containsPoint((target.getBoundingBox()), location))
                          targetsToDelete.add(target);
         }
         for (CCSprite target : targetsToDelete){
             _targets.remove(target);
             removeChild(target, true);
         }
    
         return true;
    }
    
    
    //public void update(float dt){
    //
    //}
    
    public void gameLogic(float dt)
    {
        addTarget();
    }
    
    protected void addTarget()
    {
        CGSize winSize = CCDirector.sharedDirector().displaySize();
        target = CCSprite.sprite("bee_160.png");
        target.setPosition(CGPoint.ccp(target.getContentSize().width / 2.0f, winSize.height / 2.0f));
        addChild(target);    
        _targets.add(target);
    
        CCMoveTo actionMove = CCMoveTo.action(3, CGPoint.ccp(winSize.getWidth(), winSize.getHeight()/2.0f));
        CCCallFuncN actionMoveDone = CCCallFuncN.action(this, "spriteMoveFinished");
        CCSequence actions = CCSequence.actions(actionMove, actionMoveDone);
    
        target.runAction(actions);
    }
    
    public void spriteMoveFinished(Object sender)
    {
        CCSprite sprite = (CCSprite)sender;
        this.removeChild(sprite, true);
    }
    }