[编辑 4]Nvm 我忘了添加:
childInt_id[i] = Integer.parseInt(childString_id[i]);
[编辑 3]所以现在我希望能够让父实体有多个子实体
<entity x="640" y="224" type="gamebutton1" id="1" child_id="2, 3"/>
我现在将 child_id 解析为字符串,通过 .split(",") 将其转换为字符串数组,并将字符串数组转换为 int 数组
final String child_id = SAXUtils.getAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_CHILD_ID);
String[] childString_id = child_id.split(",");
int[] childInt_id = new int[childString_id.length];
我已将 levelObjectUserData 中的 ChildID 声明为数组
public int[] ChildID = {-1};
我正在循环遍历 ButtonSpriteChild 数组以查看它是否与 ButtonSpriteID 匹配
for (int k = 0; k < ButtonSpriteChild.length; k++){
if (ButtonSpriteChild[k] == ButtonSpriteID){ ... } }
运行游戏时我没有收到任何错误,但现在实体之间没有画线。我想问我是否遗漏了什么?顺便说一句,这就是我画线的方式:
float parentX = levelObjects.get(i).getX();
float parentY = levelObjects.get(i).getY();
float childX = levelObjects.get(j).getX();
float childY = levelObjects.get(j).getY();
Line line = new Line(parentX, parentY, childX, childY, 10,vbom);
line.setColor(Color.GREEN);
attachChild(line);
[编辑 2]:非常感谢史蒂夫的帮助!还有一件事可以在你的答案的最后一点上扩展一点 - “现在在你解析 XML 之后......”,我无法理解你的例子“((levelObjectUserData)(levelObjects.get(i).getUserData ())).ChildID”,当我尝试使用它时出现以下错误:“语法错误,插入“AssignmentOperator 表达式”以完成表达式”。再次感谢您的帮助
[编辑]:我已经弄清楚了我的问题的第一部分,xml 文件中的一些实体缺少 id 和 child_ids,并添加这些修复了错误。
所以我的问题变成了,我如何使用“id”和“child_id”在两个实体之间画一条线。因此,一旦匹配了两个级别对象,我需要获取父实体的 x 和 y 值以及子实体的 x 和 y 值,以便可以在它们之间绘制一条线,即
<entity x="640" y="224" type="gamebutton1" id="1" child_id="2"/>
<entity x="512" y="224" type="gamebutton2" id="2"/>
Line line = new Line(parentX, parentY, childX, childY, 5, vbom);
所以这就是我解析 levelObjects 的方式
levelLoader.registerEntityLoader(new EntityLoader<SimpleLevelEntityLoaderData>(TAG_ENTITY) {
@Override
public IEntity onLoadEntity(String pEntityName, IEntity pParent, Attributes pAttributes, SimpleLevelEntityLoaderData pEntityLoaderData) throws IOException {
final int x = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_X);
final int y = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_Y);
final String type = SAXUtils.getAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_TYPE);
final int id = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_ID);
final int child_id = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_CHILD_ID);
final ButtonSprite levelObject;
if (type.equals(TAG_ENTITY_ATTRIBUTE_VALUE_GAMEBUTTON1)) {
levelObject = new ButtonSprite(x, y, resourcesManager.gamebutton1_region, vbom, new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
}
});
}
else if (type.equals(TAG_ENTITY_ATTRIBUTE_VALUE_GAMEBUTTON2)) {
levelObject = new ButtonSprite(x, y, resourcesManager.gamebutton2_region, resourcesManager.gamebuttonpressed_region, vbom, new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
}
});
}
else if (type.equals(TAG_ENTITY_ATTRIBUTE_VALUE_GAMEBUTTON3)) {
levelObject = new ButtonSprite(x, y, resourcesManager.gamebutton3_region, resourcesManager.gamebuttonpressed_region, vbom, new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
}
});
}
else if (type.equals(TAG_ENTITY_ATTRIBUTE_VALUE_GAMEBUTTON4)) {
levelObject = new ButtonSprite(x, y, resourcesManager.gamebutton4_region, resourcesManager.gamebuttonpressed_region, vbom, new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
}
});
}
else if (type.equals(TAG_ENTITY_ATTRIBUTE_VALUE_GAMEBUTTON5)) {
levelObject = new ButtonSprite(x, y, resourcesManager.gamebutton5_region, resourcesManager.gamebuttonpressed_region, vbom, new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
}
});
}
else if (type.equals(TAG_ENTITY_ATTRIBUTE_VALUE_GAMEBUTTON6)) {
levelObject = new ButtonSprite(x, y, resourcesManager.gamebutton6_region, resourcesManager.gamebuttonpressed_region, vbom, new OnClickListener() {
@Override
public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) {
}
});
}
else {
throw new IllegalArgumentException();
}
levelObject.setCullingEnabled(true);
registerTouchArea(levelObject);
setTouchAreaBindingOnActionDownEnabled(true);
return levelObject;
}
});
基于此,我假设获得父 x 和 y,我会简单地使用 final int x 和 final int y,但我不确定如何获得子 x 和 y。我希望我能够澄清我的问题