2013-04-23 57 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”变量。该变量将是对您创建的文本消息的引用。如果该变量非空,则跳过创建文本对象。你必须记住: 删除文本对象。 将参考删除后再次将其设置为空,以便出现新的矩形。

另外,您可能希望创建这些文本气泡形状的池,以便您不必在每次需要时都创建新池。

相关问题