1

我已经在 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()
4

2 回答 2

1

使用的库缺少 Unicode BiDi 支持,Shaping...

最简单但不是完美的,尝试使用 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

于 2014-01-19T01:01:38.080 回答
0

Panda3D 1.10 的最新开发版本现在支持从右到左的渲染,以及阿拉伯文本的正确形状,如果您在启用 Harfbuzz 库的情况下编译它。

于 2017-09-21T08:31:46.860 回答