Mohamad Reza Baghbani

وبلاگ محمد رضا باغبانی
طبقه بندی موضوعی

Mohamad Reza Baghbani

وبلاگ محمد رضا باغبانی

فارسی نویسی در گادو انجین - (متن‌های پویا)

سه شنبه, ۲۵ اسفند ۱۳۹۴، ۰۶:۳۳ ب.ظ
در ادامه‌ی بخش قبل، اگر گیمی داشته باشیم که متن‌های آن به صورت پیش‌فرض، یا ثابت نباشند با مشکل مواجه می‌شویم، برای مثال، زمانی که کاربر نام خود را وارد می‌کند، یا همانند بازی "حروف ریز" که کاربر متن آن را به صورت تصادفی انتخاب می‌کند...


برای این مورد، حقیر درحد توان و معلوماتم قطعه کدی نوشته‌ام که امیدوارم به کار شما نیز بیاید (البته اگر شخصی بدین منظور سورس گودوت را ویرایش کند یا راه حلی بهتر ارائه نماید لطف بزرگی در حق بنده حقیر و دوست‌داران این انجین انجام داده است) :

می‌توانید قطعه کد را از اینجا دانلود کنید یا در ادامه مطلب مشاهده فرمایید.




extends Node2D

var persiaWords = [
"آ","ﺎ","آ","ﺎ",
"ا","ﺎ","ا","ﺎ",
"ب","ﺐ","ﺑ","ﺒ",
"پ","ﭗ","ﭘ","ﭙ",
"ت","ﺖ","ﺗ","ﺘ",
"ث","ﺚ","ﺛ","ﺜ",
"ج","ﺞ","ﺟ","ﺠ",
"چ","ﭻ","ﭼ","ﭽ",
"ح","ﺢ","ﺣ","ﺤ",
"خ","ﺦ","ﺧ","ﺨ",
"د","ﺪ","د","ﺪ",
"ذ","ﺬ","ذ","ﺬ",
"ر","ﺮ","ر","ﺮ",
"ز","ﺰ","ز","ﺰ",
"ژ","ﮋ","ژ","ﮋ",
"س","ﺲ","ﺳ","ﺴ",
"ش","ﺶ","ﺷ","ﺸ",
"ص","ﺺ","ﺻ","ﺼ",
"ض","ﺾ","ﺿ","ﻀ",
"ط","ﻂ","ﻃ","ﻄ",
"ظ","ﻆ","ﻇ","ﻈ",
"ع","ﻊ","ﻋ","ﻌ",
"غ","ﻎ","ﻏ","ﻐ",
"ف","ﻒ","ﻓ","ﻔ",
"ق","ﻖ","ﻗ","ﻘ",
"ک","ﮏ","ﮐ","ﮑ",
"گ","ﮓ","ﮔ","ﮕ",
"ل","ﻞ","ﻟ","ﻠ",
"م","ﻢ","ﻣ","ﻤ",
"ن","ﻦ","ﻧ","ﻨ",
"و","ﻮ","و","ﻮ",
"ه","ﻪ","ﻫ","ﻬ",
"ی","ﯽ","ﯾ","ﯿ",
"ﻻ","ﻼ","ﻻ","ﻼ"]

var persia=["آ","ا","ب","پ","ت","ث","ج","چ","ح","خ","د","ذ","ر","ز","ژ","س","ش","ص","ض","ط","ظ","ع","غ","ف","ق","ک","گ","ل","م","ن","و","ه","ی"]

var special = ["آ","ا","د","ذ","ر","ز","ژ","و",
" ","‌",".","+","-",")","(","*","&","^","%","$",
"#","@","!","~","`","\"","\\","|","}","{","0","9",
"8","7","6","5","4","3","2","1","0","?","/",">",
"<","ء",":","،","ٍ","ٌ","ً","ّ","ِ","َ","؛",",","=","_","[","]","«","»","ـ"]

func specialno(text):
    for i in range(special.size()):
        if(text==special[i]):
            return true
    return false

func specialChar( letter ):
    for i in range( 8, special.size() ):
        if( special[ i ] == letter ):
            if ( i == 0 ):
                return -2
            else:
                return  (-i)-2
    return -1

func persiaSet(end,array):
    var text = ""
    var no
    var pos
    for i in range( end ):
        pos = specialChar( array[ i ] )
        print(pos)
        for j in range(persia.size()):
            if(persia[ j ]==array[ i ]):
                pos=j
                break
        if ( i == 0 ):
            if( i == end - 1 ):
                no = 0
            else:
                no = 2
        elif( specialno(array[ i - 1 ]) ):
            if( i  != end - 1):
                if(  specialChar( array[ i + 1 ] ) < -1):
                    no = 0
                else:
                    no = 2
            else:
                no = 0
        else:
            if(i != end-1):
                if(  specialChar( array[ i + 1 ] ) < -1):
                    no = 1
                else:
                    no = 3
            else:
                no = 1
        if (pos >= 0):
            text = persiaWords[(pos*4)+no]+text
        else:
            text = special[abs(pos+2)]+text

    return text
    pass
func _ready():
    var SampleText = ")متن 1: این متن »نمونه‌ای« است برای بررسی \"صحت حروف‌چینی\" _*+گودوت‌انجین+*_ ("
    get_node("Label").set_text(persiaSet(SampleText.length(),SampleText))
    get_node("Label 2").set_text(SampleText)
    pass



موافقین ۲ مخالفین ۰ ۹۴/۱۲/۲۵
محمد رضا باغبانی

فارسی نویسی در گادو انجین

نظرات  (۴)

۰۳ فروردين ۹۸ ، ۲۳:۳۶ توسعه‌دهنده
کار شما واقعا شایسته است.
پیشنهاد می‌کنم این فایل را در گیت‌هاب قرار دهید.
بسیار متشکرم.
موفق باشید
۲۱ آبان ۹۹ ، ۱۷:۴۹ سید فاضل علوی

برای من کار نکرد

سلام بسیار متشکرم. بنده در حال نوشت بازی فارسی هستم و ممنون میشم اگه راهنمایی کنید کسی که کمک کنه. حتی برای نوشتن demo دوچار مشکل میشم!!

بسیار کاربردی و ساده

دم شما گرم!

دوستانی که مشکل دارن و کد ها براشون کار نمیکنه، اگه فقط متن خالی نمایش داده میشه و یا فقط اعداد و حروف ویژه(مثل پارانتز و...) اول فونت Node مورد نظر مثل Label رو به یک فونت فارسی تغییر بدن بعد کد رو تست کنن.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی