2013-04-23 58 views
0

這個問題是關於AndEngine/Android,但也適用於Java。我在遊戲中有一個NPC類,當玩家靠近他們時,我希望他們通過在他們上面創建一個矩形/文本來顯示消息。我創建了多個NPC,並將它們添加到名爲NPCbody的數組中。如果他們靠近玩家,我想使用for循環在他們每個上面繪製矩形/文本。我可以做到這一點,但唯一的問題是,現在我有這個代碼,他們不會脫離現場。它填滿了玩家接近NPC的矩形。那麼我如何才能讓這些創建的矩形只爲每個NPC創建一次,並更新?創建並更新數組元素的對象? Android

try { 
     if (NPCbody.size() > 0) { 
      for (int i = 0; i < NPCbody.size(); i++) { 
       final Rectangle NPCmessageRectangle; 
       final Text NPCmessageText; 

       NPCmessageRectangle = new Rectangle(NPCx - 50, NPCy + 175, 200, 50, 
         vbom); 
       NPCmessageRectangle.setColor(Color.BLACK); 
       NPCmessageRectangle.setAlpha(90); 
       NPCmessageText = new Text(NPCx, NPCy, resourcesManager.smallFont, 
         "abcdefghijklmnopqrstuvwxyz1234567890.,!?\" ", vbom); 
       NPCmessageText.setText(""); 
       attachChild(NPCmessageText); 
       NPCmessageText.setVisible(false); 
       attachChild(NPCmessageRectangle); 
       NPCmessageRectangle.setVisible(false); 
       NPCx = NPCbody.get(i).getPosition().x * 32; 
       NPCy = NPCbody.get(i).getPosition().y * 32; 
       NPCmessage = npc.getNPCmessage(); 
       NPCmessageText.setText(NPCmessage); 
       NPCmessageText.setPosition(NPCx, NPCy + 50); 
       NPCmessageRectangle.setX(NPCx); 
       NPCmessageRectangle.setY(NPCy + 50); 
       if (isDistance(player.getX(), player.getY(), NPCx, NPCy, 
         150)) { 
        NPCmessageRectangle.setVisible(true); 
        NPCmessageText.setVisible(true); 
        System.out.println("Rectangle set visible for NPC "+i); 
       } else { 
        NPCmessageRectangle.setVisible(false); 
        NPCmessageText.setVisible(false); 
       } 
      } 
     } 
    } catch (Exception e) { 

    } 

(此代碼是一個被反覆調用方法的一部分。)

回答

0

我會建議在創建每個NPC類「messageDisplayed」變量。該變量將是對您創建的文本消息的引用。如果該變量非空,則跳過創建文本對象。你必須記住: 刪除文本對象。 將參考刪除後再次將其設置爲空,以便出現新的矩形。

另外,您可能希望創建這些文本氣泡形狀的池,以便您不必在每次需要時都創建新池。

相關問題