Как использовать Native TextView (View) в игре Andengine
Вопрос
Я хочу знать, есть ли способ использовать родной TextView
или любая другая планировка Android внутри BaseAndengine Activity
.
Мое приложение использует AndEngine для одного из своего экрана. Этот экран расширен от BaseAndengine, и мне нужно использовать какой -то нативный вид, как TextView внутри этого экрана. Потому что Andengine не работает нормально для арабского текста, и мне нужно показать немного арабского текста на игровом экране.
Или, если возможно, как показать арабский текст в изменчивом тексте в Andengine. Как изменяемый текст напишите арабский слева направо в обратном порядке.
Решение
Конечно вы можете.
Проверьте этот код - в основном вы переопределяете onSetContentView
, тогда вы можете установить все, что хотите.
@Override
protected void onSetContentView() {
final FrameLayout frameLayout = new FrameLayout(this);
final FrameLayout.LayoutParams frameLayoutLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT);
this.mRenderSurfaceView = new RenderSurfaceView(this);
mRenderSurfaceView.setRenderer(mEngine);
final FrameLayout.LayoutParams surfaceViewLayoutParams = new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());
frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
//Create any other views you want here, and add them to the frameLayout.
this.setContentView(frameLayout, frameLayoutLayoutParams);
}
(Этот метод идет на ваш подкласс BaseGameActivity
.)
Вы также можете сделать это через XML, но я думаю, что этот метод более ясен.
Другие советы
Вы также можете использовать антенгин для арабских и персидских шрифтов. Но по -другому. Для этого вам нужно создать спрайт и добавить в него растровое изображение. До этого вы нарисуете свой текст на этой растровой карте.
Следующий код является примером, который рисует текст персидского/арабского и прикрепляет его к спрайту. Таким образом, мы можем прикрепить спрайт к нашей сцене. Это пример, чтобы показать, как мы можем это сделать, поэтому вы можете настроить растровый карту и размер текста самостоятельно. Если ваше устройство поддерживает персидский/арабский, этот код будет работать должным образом. Если текст не отображается в вашей сцене, измените его положение, он вне экрана
Пример функции кода будет печатать «персидский гольф» у персидских/арабских.
private void persianGolfPrinter(){
BitmapTextureAtlas mBitmapTextureAtlas = new BitmapTextureAtlas(ResourceManager.getInstance().gameActivity.getTextureManager(), 400, 800, TextureOptions.BILINEAR);
ITextureRegion mDecoratedBalloonTextureRegion;
final IBitmapTextureAtlasSource baseTextureSource = new EmptyBitmapTextureAtlasSource(400, 800);
final IBitmapTextureAtlasSource decoratedTextureAtlasSource = new BaseBitmapTextureAtlasSourceDecorator(baseTextureSource) {
@Override
protected void onDecorateBitmap(Canvas pCanvas) throws Exception {
this.mPaint.setColor(Color.BLACK);
this.mPaint.setStyle(Style.FILL);
this.mPaint.setTextSize(32f);
this.mPaint.setTextAlign(Align.CENTER);
pCanvas.drawText("خلیج فارس", 150, 150, this.mPaint);
}
@Override
public BaseBitmapTextureAtlasSourceDecorator deepCopy() {
throw new DeepCopyNotSupportedException();
}
};
mDecoratedBalloonTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromSource(mBitmapTextureAtlas, decoratedTextureAtlasSource, 0, 0);
mBitmapTextureAtlas.load();
Sprite test = new Sprite(0,0,mDecoratedBalloonTextureRegion,ResourceManager.getInstance().engine.getVertexBufferObjectManager());
this.attachChild(test);
}
Не используйте Android TextView ... это делает вашу игру уродливой ....
Вы не можете использовать их непосредственно в Andengine, потому что объекты в Andengine являются объектами OpenGL. Но вы можете использовать ОС Android, чтобы нарисовать растровую карту любого стандартного представления, а затем создать текстуру и спрайт из этого представления. Это не оптимально для такого случая, как арабский текст, но он будет работать. Будьте осторожны с утечками памяти, когда вы создаете растровые изображения своих взглядов.