0

这个问题是关于 AndEngine/Android 的,但也与 Java 有关。我的游戏中有一个 NPC 类,当玩家靠近它们时,我希望它们通过在它们上方创建一个矩形/文本来显示一条消息。我创建了多个 NPC,并将它们添加到名为 NPCbody 的数组中。如果它们靠近播放器,我想使用 for 循环在它们每个上方绘制一个矩形/文本。我可以做到这一点,但唯一的问题是,使用我现在拥有的这段代码,它们不会脱离场景。它被玩家靠近 NPC 的矩形填充。那么我怎样才能让我创建的这些矩形只为每个 NPC 创建一次并更新呢?

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) {

    }

(此代码是重复调用的方法的一部分。)

4

1 回答 1

0

我建议在每个 NPC 类中创建一个“messageDisplayed”变量。该变量将是对您创建的文本消息的引用。如果该变量不为空,则跳过创建文本对象。

您必须记住: 删除文本对象。将引用删除后再次将其设置回 null,以便出现一个新的矩形。

顺便说一句,您可能希望创建一个包含这些文本气泡形状的池,这样您就不必在每次需要时都创建一个新的。

于 2013-04-25T17:34:51.130 回答