如何在Andengine游戏活动中使用原生Textview(View)

时间:2011-12-01 12:09:45

标签: android textview arabic andengine

我想知道有没有办法在BaseAndEngine TextView中使用原生Activity或任何其他Android布局。

我的应用程序使用Andengine作为其整个屏幕之一。此屏幕从BaseAndEngine扩展,我需要在该屏幕内使用一些本机视图,如textview。因为Andengine对阿拉伯语文本不起作用,我需要在游戏画面上显示一些阿拉伯语文本。

如果可能,如何在Andengine中以可更改的文本显示阿拉伯文本。由于可变文本以相反的顺序从左到右书写阿拉伯语。

3 个答案:

答案 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绘制任何标准视图的位图,然后从该视图创建纹理和精灵。对于像阿拉伯语文本这样的情况,这不是最佳的,但它会起作用。在创建视图的位图时要小心内存泄漏。