2014-01-16 151 views
1

我已经写了这个示例代码在panda3d,但我不能使用右边的语言和单独显示的字母。有没有办法避免这种情况?从屏幕右到左的文本panda3d

# coding=UTF-8 

__author__ = 'asus' 

from direct.showbase.ShowBase import ShowBase 
from direct.task import Task 
from direct.actor.Actor import Actor 
from direct.gui.OnscreenText import OnscreenText 

from direct.gui.DirectGui import * 
from panda3d.core import TextNode 

intro={'ssingle':'شروع بازی تک نفره', 
     'smulti':'شروع بازی دو نفره', 
     'settings':'تنظیمات', 
     'about':'درباره بازی', 
     'exit':'خروج', 
     } 

class World(ShowBase): 
    def __init__(self): 
     global intro 
     i=0 
     ShowBase.__init__(self) 

     for each in intro.keys(): 
      i+=0.05 
      OnscreenText(text = intro.__getitem__(each), pos = (0.95,i),scale = 0.07,fg=(1,0.5,0.5,1),align=TextNode.ACenter,mayChange=1,font=self.loader.loadFont('BRoya.ttf')) 

a=World() 
a.run() 

回答

3

所使用的库丢失Unicode的BiDi支持,塑造......

最简单的,但不是完美的,尝试用FriBiDi的lib目录下:

import pyfribidi2 
. 
. 
OnscreenText(text = pyfribidi2.log2vis(intro.__getitem__(each), base_direction=pyfribidi2.ON), pos = (0.95,i),scale = 0.07,fg=(1,0.5,0.5,1),align=TextNode.ACenter,mayChange=1,font=self.loader.loadFont('BRoya.ttf')) 

您也可以看到base_direction=pyfribidi2.RTL

0

Panda3D 1.10的最新开发版本现在支持从右到左渲染,并且适当地修整阿拉伯文字,如果您编译时支持第启用Harfbuzz库。