[編集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]:スティーブ、助けてくれてありがとう!もう1つ、回答の最後の部分を少し拡張してください。「XMLを解析した後...」、例を理解するのに問題があります "((levelObjectUserData)(levelObjects.get(i).getUserData ()))。ChildID "を使用しようとすると、次のエラーが発生します:"構文エラー、"AssignmentOperatorExpression"を挿入してExpressionを完成させます"。そしてまたあなたの助けを本当にありがとう
[編集]:問題の最初の部分で、xmlファイルの一部のエンティティにidとchild_idがないことがわかり、それらを追加するとエラーが修正されました。
したがって、私の質問は、「id」と「child_id」を使用して2つのエンティティ間に線を引くにはどうすればよいかということです。したがって、2つのレベルのオブジェクトが一致したら、親エンティティの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を取得すると仮定すると、finalintxとfinalintyを使用するだけですが、子のxとyを取得する方法がわかりません。問題を明確にできたと思います