java - 如何在cocos2d-android中找到 Sprite 是否与其他 Sprite 发生碰撞?

标签 java android cocoa-touch cocos2d-android

为了让 sprite(_player) 被检测到并与另一个 sprite(target) 发生碰撞并在碰撞后通过 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);
    }

最佳答案

为了找到这个答案的解决方案,我花了一个星期的时间:( 当一个新的 Sprite 首先被添加到游戏中时,它应该在 addsomefunction() 方法中声明,我的错误是我声明了 ship(sprite) 的值构造函数不在 addTarget() 中,并且要在碰撞后删除 Sprite ,代码必须在 public void spriteMoveFinished(Object sender) as

中给出
if (sprite.getTag() == 25)
_ships.remove(sprite);

因为我在这个方法中有 Target(sprite) ,所以我对在哪里添加代码感到困惑。

关于java - 如何在cocos2d-android中找到 Sprite 是否与其他 Sprite 发生碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16732889/

相关文章:

android - 我们可以通过 intent 在 android 中传输多少数据?

swift - Swift 中的日期/时间自然语言近似

Java 类设计 - 最佳方法的建议。类扩展抽象类并实现接口(interface)

android - 播放ToneGenerator原因ANR

android - 在 android 中禁用 DPAD 键

iphone - 如果我创建一个容量 = 3 而不是容量 = 50 的 NSMutableArray 有多大影响?

swift - Swift 的字符串、数组和字典是 NSObject 吗?为什么结构可以是 NSObject?

java - 尝试更改 BufferedImage 像素的 alpha 值失败

java - 我是否可以在独立 ejb 模块中引用任何外部第 3 方 jar?

java - 根据本地项目构建 Maven JAR