Cocos2d-android检测随机创建的精灵或rects

时间:2014-01-15 17:53:51

标签: java android eclipse cocos2d-android

我正在Eclipse上开发一款Android游戏,其中一个精灵在几个平台上跳跃到顶部,但我遇到了困难。这是我的情况:我的角色精灵(在这种情况下我将其命名为Sprite1)移动,当我的应用程序启动时,我在随机位置创建另外3个精灵(平台)。应用程序启动时成功创建平台。但是没有检测到它们与Sprite1之间的冲突。我尝试了很多解决方案,现在我被困了几天。任何帮助或建议将不胜感激。

我尝试在创建平台时创建rects,然后使用rects检测碰撞,但它们仍然不会发生冲突。我使用Java语言。 :)

我用它来创建精灵并检测碰撞:

创建平台精灵(这是我随机生成平台的方式,如果这里有错误,我确定我只是复制了错误,因为创建或平台精灵正常工作。):

public void addRandomPlatform(){
    Random rand = new Random();
    randPlat = CCSprite.sprite("platform2.png");
    randPlat.setPosition(actualX, actualY);
        actualY -= (int)(randPlat.getContentSize().height*4);
        addChild(randPlat,2);
}

然后我在我的应用程序启动时调用此方法。

检测碰撞:

playerRect = CGRect.make(player.getPosition().x - (player.getContentSize().width /   4.0f),//- (player.getContentSize().width / 2.0f),
                     player.getPosition().y - (player.getContentSize().height / 2.0f),
                 player.getContentSize().width/3.0f,
                 player.getContentSize().height/8.0f);

if(CGRect.intersects(playerRect, randPlat))
    {
       *my codes for stopping the jump*
}

我希望这很清楚。提前谢谢!

2 个答案:

答案 0 :(得分:0)

看起来randRect是CCSprite,而不是CGRect。您应该像创建playerRect一样创建CGRect(随机平台)。

另外,为什么你将玩家的宽度/高度分别分为3和8?我不认为这就是你想要的,它会导致playerRect只是宽度的一个,并且是实际精灵高度的1/8。

答案 1 :(得分:0)

    @Override
    public boolean ccTouchesEnded(MotionEvent event) {
  CGPoint point =  ranSprite.getPosition();// THE POSITION MUST BE YOUR RANDOM SPRITES POSITIONS

        List<CCNode> childsList = this.getChildren();

        for(CCNode childSprite : childsList){

            if(childSprite.getTag() == Constants.PLAYER_TAG   && childSprite.getBoundingBox().contains(point.x, point.y)){


                // Do what ever you want

}
}