2016-01-11 21 views
0

我想在任何重疊期間擡起一個可變硬幣。 問題是,硬幣是一個圖像,不能只增加一次,使我的硬幣增加至少10/11倍。 我的目標是刪除圖片,然後是矩形,就像我在下面的代碼中所做的一樣。問題是,如果我刪除矩形,那麼我甚至都不知道硬幣上的重疊。我該如何解決?在render()中增加變量並刪除矩形和圖像

render() 
.... 
    if(!monetaRectangles.isEmpty() && !monetaImages.isEmpty()) { 
         for (int i = 0; i < monetaRectangles.size(); i++) { 
          monetaRectangles.get(i).setX(monetaImages.get(i).getX()); 
          monetaRectangles.get(i).setY(monetaImages.get(i).getY()); 

          if (surferRectangle.overlaps(monetaRectangles.get(i))) { 
           contatoreMonete++; 
           monetaRectangles.remove(i); 
           monetaImages.get(i).remove(); 
           moneteLabel.setText("Monete: " + contatoreMonete); 
          } 
         } 
        } 
... 
end render() 

時間dell'overlaps對象是一秒,所以我的變量增加到每個渲染正確,你可能想解決?我在邏輯上短缺

+0

商店另一名單上刪除矩形? – Sneh

+0

不,我不把矩形存儲在另一個列表 –

+0

我向你推薦這種技術。 – Sneh

回答

0

您在迭代時正在修改集合。 (使用libGDX集合,使新的迭代器不創建每次)

for (int i = 0; i < monetaRectangles.size(); i++) { // 
    monetaRectangles.get(i).setX(monetaImages.get(i).getX());// if you removed 'i' in the previous loop this will effectively get i+2 of the original 
    monetaRectangles.get(i).setY(monetaImages.get(i).getY()); 

    if (surferRectangle.overlaps(monetaRectangles.get(i))) { 
     contatoreMonete++; 
     monetaRectangles.remove(i); //The semantics of 'i' is now changed. 
     monetaImages.get(i).remove();//also here 
     moneteLabel.setText("Monete: " + contatoreMonete); 
    } 
} 

使用迭代器在對象的集合,可以保留你的形象,你的矩形之間的關係。那麼你可以做Iterator.remove(),並進行正確的迭代。

一些一般性建議 - 看起來你試圖保持你的物理/遊戲世界的'位置'與圖像'位置'同步,反之亦然。

我建議您重新構建您的遊戲對象,以便成爲「渲染數據」,「物理/世界數據」和「遊戲邏輯數據/流程」的組合。然後,集中兩個組件可以訪問的組件中的公共屬性。職位是這類數據的常見人選。現在,當你更新位置時,所有使用該位置的信息也會更新。

阿什利是一個LibGDX項目,有助於這一點,並在這篇文章指出瞭解釋:entity systems