我想知道有没有办法在BaseAndEngine TextView
中使用原生Activity
或任何其他Android布局。
我的应用程序使用Andengine作为其整个屏幕之一。此屏幕从BaseAndEngine扩展,我需要在该屏幕内使用一些本机视图,如textview。因为Andengine对阿拉伯语文本不起作用,我需要在游戏画面上显示一些阿拉伯语文本。
如果可能,如何在Andengine中以可更改的文本显示阿拉伯文本。由于可变文本以相反的顺序从左到右书写阿拉伯语。
答案 0 :(得分:4)
当然可以。
检查此代码 - 基本上覆盖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来完成,但我认为这种方法更清晰。
答案 1 :(得分:3)
您也可以将Andengine用于阿拉伯语和波斯语字体。但以不同的方式。要做到这一点,你需要创建一个Sprite并添加一个位图。在此之前,您在该位图上绘制文本。
以下代码是绘制波斯语/阿拉伯语文本并将其附加到精灵的示例。所以我们可以将精灵附加到我们的场景中。 这是一个示例,说明我们如何做到这一点,因此您可以自己调整位图和文本大小。 如果您的设备支持波斯语/阿拉伯语,则此代码将正常运行。如果文本没有出现在你的场景中,改变它的位置,它就不在屏幕上了
示例代码功能将打印波斯语/阿拉伯语中的“波斯高尔夫”。
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 ...这会让你的游戏变得丑陋......
答案 2 :(得分:-2)
您不能直接在AndEngine中使用它们,因为Andengine中的对象是OpenGL对象。但是您可以使用Android OS绘制任何标准视图的位图,然后从该视图创建纹理和精灵。对于像阿拉伯语文本这样的情况,这不是最佳的,但它会起作用。在创建视图的位图时要小心内存泄漏。