2014-01-15 46 views
0

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

我尝试了在平台创建时使用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* 
} 

我希望这是显而易见的。提前致谢!

+0

请添加一些代码。你如何创建精灵,碰撞检测如何工作?你使用Box2D吗? – fifarunnerr

+0

哦,等等,让我编辑我的文章,并包含一些代码。我不使用Box2D。谢谢回复! – user3194348

回答

0

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

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

+0

我尝试在随机创建平台之后创建平台的矩形,但仍未检测到碰撞。 我将playerRect的高度除以8,因为我只想要检测到玩家的下半部分(人物的脚部)。我遇到了一个情况,当玩家正在跳下(跳跃),他的头部与平台相交时,它会停止跳跃。这是通过缩小矩形的高度来解决的。 – user3194348

+0

尝试将两个矩形的x,y,宽度和高度记录到Logcat。如果这不能帮助您找到问题,请在两个矩形(在视图上)相交时发布(记录的)值,但不要在代码中发布。 – fifarunnerr

+0

我试着记录x,y,宽度和高度的平台和rects。 x和y是相同的,但关于高度和宽度,我无法确定它们的大小是否相同,因为我在使用platform.getScaleX()和getScaleY()时获取子图大小,而rect.size.width和.size对于正义的高度。 – user3194348

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 

} 
}