Ошибка PaperVision при использовании текста справа налево - PullRequest
1 голос
/ 30 сентября 2009

Мой код генерирует следующую ошибку (предполагается, что с помощью PaperVision создается трехмерная анимация текста справа налево):

Исключение [Fault], информация = TypeError: Ошибка # 1009: Не удается получить доступ к свойству или методу пустой ссылки на объект.

Однако эта ошибка появляется только при вводе текста right-to-left. Когда я использую текст на английском языке, я не получаю ошибку.

Вот мой код:

package {
    import flash.display.Sprite;
    import flash.events.Event;

    import org.papervision3d.scenes.Scene3D
    import org.papervision3d.view.Viewport3D
    import org.papervision3d.cameras.Camera3D
    import org.papervision3d.render.BasicRenderEngine
    import org.papervision3d.typography.Font3D
    import org.papervision3d.typography.fonts.HelveticaBold
    import org.papervision3d.typography.Text3D
    import org.papervision3d.materials.special.Letter3DMaterial
    import flash.text.engine.FontDescription
    import flash.text.engine.ElementFormat
    import flash.text.engine.TextElement
    import flash.text.engine.TextBlock
    import flash.text.engine.TextLine

    /* @author vahid */
    public class Main extends Sprite {
        private var fd:FontDescription
        private var ef:ElementFormat
        private var te:TextElement        
        protected var st:String;

        private var scene:Scene3D
        private var view:Viewport3D
        private var camera:Camera3D
        private var render:BasicRenderEngine
        private var vpWidth:Number = stage.stageWidth;
        private var vpHeight:Number = stage.stageHeight;
        private var text3d:Text3D 
        private var font3d:Font3D 
        //private var font:HelveticaBold
        private var textMaterial:Letter3DMaterial 
        private var text:String 

        public function Main():void {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // rtl block 
            fd = new FontDescription ()                    
            ef = new ElementFormat (fd)            
            te = new TextElement ("?????? ?????? ???? ?????? ?? papervision", ef)

            text = te.text        
            //3d block

            scene = new Scene3D ()
            view = new Viewport3D (vpWidth,vpHeight,true,true,false,false)
            camera = new Camera3D ()
            render = new BasicRenderEngine()
            addChild (view)
            this.addEventListener (Event.ENTER_FRAME , renderThis)
            textMaterial = new Letter3DMaterial(0xFF0000,1)
            font3d = new HelveticaBold()
            text3d = new Text3D (text, font3d, textMaterial)
            scene.addChild (text3d)
        }

        protected function renderThis(e:Event):void 
        {
            text3d.rotationY +=5
            render.renderScene(scene,camera,view)
        }
    }
}

В случае, если это уместно: я использую FlashDevelop.

Есть какие-нибудь идеи относительно того, что может быть причиной этой проблемы, или как я могу обойти ее?

1 Ответ

1 голос
/ 02 октября 2009

Я считаю, что helvetica-bold, к сожалению, не содержит символов Юникода, которые вы пытаетесь показать. Просто наткнулся на этот пост , не проверил его подробно, но идея кажется интересной, если нет арабского расширения Font3D ...

...