2014-01-15 83 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 

} 
}