// ์ฐ์ ํ๊ธ์ ์ค๋ฐ๊ฟํ๋ ๊ฑธ ํ
์คํธ์ผ์ ๋จผ์ ์งํํด๋ณธ๋ค
// ๊ฐ์์ ํ
์คํธ ์ถ๋ ฅ์ฉ ๋ฐ์ค ์์ญ์ ์ ์ํ๋ค.
xx = 100
yy = 100
ww = 200
hh = 500
// ํ
์คํธ ์ถ๋ ฅ ๋ฐ์ค ์์ญ์ ํ๋ฉด์ ํ์ํ๋ค.
draw_set_colour(c_yellow);
draw_rectangle(xx, yy, xx+ww, yy+hh, true);
// ์๋๋ ํ๊ธ์์ฉ ๋ฌธ์์ด์ ์ํํ๋ ์์ ์ฝ๋๋ค.
//var str = "ํ๊ธ 123 ํ
์คํธ"
//for (var i=1; i<=string_length(str); ++i)
//{
// ย var char = string_char_at(str, i)
// ย show_debug_message("char:{0}", char);
//}
// ํ๊ธ์ ์ง์ ๊ฐํํ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ด
function wordwrap(str, wwLimit)
{
ย ย var strResult = ""
ย ย var wwCurrLine = 0
ย ย // ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ํ๋์ฉ ์ํํ๋ฉฐ ํ์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ค
ย ย for (var i=1; i<=string_length(str); ++i)
ย ย {
ย ย ย ย var ch = string_char_at(str, i)
ย ย ย ย var ww = string_width(ch)
ย ย ย ย if (ch == "\n")
ย ย ย ย {
ย ย ย ย ย ย // ๊ฐ์ ์ค๋ฐ๊ฟ ๋ฌธ์๋ฅผ ๋ง๋ฌ๋ค๋ฉด..
ย ย ย ย ย ย strResult += "\n"
ย ย ย ย ย ย wwCurrLine = 0
ย ย ย ย }
ย ย ย ย else if (wwCurrLine + ww <= wwLimit)
ย ย ย ย {
ย ย ย ย ย ย // ์์ง ์ด ํ์ ๋ฌธ์๋ฅผ ๋ ๋ฃ์ ์ ์์
ย ย ย ย ย ย strResult += ch
ย ย ย ย ย ย wwCurrLine += ww
ย ย ย ย }
ย ย ย ย else
ย ย ย ย {
ย ย ย ย ย ย // ํ์ด ๊ฝ์ฐจ์ ๊ฐํ์ ํด์ผ ํจ
ย ย ย ย ย ย strResult += "\n"
ย ย ย ย ย ย strResult += ch
ย ย ย ย ย ย wwCurrLine = ww
ย ย ย ย }
ย ย }
ย ย return strResult
}
// ํ๊ตญ์ด ํ
์คํธ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค. ๊ฐํ์ด ์ ๋๋์ง ๋์ผ๋ก ํ์ธํ ์ ์๋ค.
draw_set_colour(c_white);
draw_set_font(Font1);
var str = "ํ๊ธ string์ ์ง์ ์๋๋ฉํ์ฌ๋ณด๊ฒ ์! ๋ฌธ์๋ฅผ ํ๋์ฉ ๊ธธ์ด ์ฌ์ ๊ฐํ์ ์์ผ์ค๋ค.\nโ๊ฐ์ ์ค๋ฐ๊ฟ๋ ์ ์ฒ๋ฆฌํจ. ๊ทธ๋ฆฌ๊ณ ์๊ฒฝ ๋ฉ์ด๋ ์ต๊ณ !!"
var wwLimit = ww
var strWrapped = wordwrap(str, wwLimit)
//show_debug_message(strWrapped)
draw_text(xx, yy, strWrapped)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ๋ค์์ ์ผ๋ณธ์ด์ '๊ธ์น์ฒ๋ฆฌ'๋ฅผ ์ ์ฉํด ์ค๋ฐ๊ฟ์ ํด๋ณด๊ฒ ์
// ๊ธ์น์ฒ๋ฆฌ ์ ๋ํฐ C# ๊ตฌํ ์ฐธ๊ณ ์๋ฃ https://fineworks-fine.hatenablog.com/entry/2022/10/31/073000
// ์ ๊ตฌํ์ c# ์์ค ํ์ผ : https://github.com/tsubaki/HyphenationJpn_uGUI/blob/master/Assets/HyphenationJpn.cs
// ์๋๋ ์ด ๊ตฌํ์ gml ๋ก ๋ฒ์ญํ ๊ฒ์
HYP_FRONT =
ย ย ",)]๏ฝใใ๏ผใใใใใใใใใโโ๏ฝ ยป" +// ็ตใใๆฌๅผง้ก ็ฐกๆ็
ย ย "ใกใฃใฅใงใฉใใฃใฅใงใฎใตใถใฃใใใ
ใใใฃใใ
ใใ" +//่ก้ ญ็ฆๅๅๅญ
ย ย "โใ โใใผ" +//ใใคใใณ้ก
ย ย "?!โโผโโโ" +//ๅบๅใ็ด็ฉ
ย ย "ใป:;" +//ไธญ็น้ก
ย ย "ใ.";//ๅฅ็น้ก
HYP_BACK =
ย ย "(๏ผ[๏ฝใใใใใใใใใโโ๏ฝยซ";//ๅงใๆฌๅผง้ก
ย ย
latins = "abcdefghijklmnopqrstuvwxyz" +
ย ย ย ย ย "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
ย ย ย ย ย "0123456789" +
ย ย ย ย ย "<>=/().,";
function CHECK_HYP_FRONT(s)
{
ย ย return (string_pos(s, HYP_FRONT) != 0) ? true : false
}
function CHECK_HYP_BACK(s)
{
ย ย return (string_pos(s, HYP_BACK) != 0) ? true : false
}
function IsLatin(s)
{
ย ย return (string_pos(s, latins) != 0) ? true : false
}
// ์ด ํจ์๋ ์๋ณธ ๋ฌธ์์ด์ ์ค๋ฐ๊ฟ์ด ์ผ์ด๋์๋ ์๋๋ ๋จ์ด ๋จ์์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด ๋๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
function GetWordList(tmpText)
{
ย ย var words = [] ย ย ย // ๋ง๋ค์ด์ง ๋จ์ด ๋ฐฐ์ด. ์ด๊ฒ์ ๋ฐํํ๊ฒ ๋๋ค.
ย ย var line = "" ย ย ย // ์ด๊ฒ์ ๋จ์ด๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ค๊ฐ ์ ์ฅ์ ์ญํ ์ ํจ
ย ย // ๋ชจ๋ ๋ฌธ์๋ฅผ ์ํํ๋ฉด์ ๋จ์ด๋ฅผ ๊ตฌ์ฑํด words ๋ฐฐ์ด์ ๋ฃ๋๋ค
ย ย // (์ฐธ๊ณ ๋ก gml ๊ณผ ๋ฌ๋ฆฌ, c# ์ ๋ฌธ์์ด ํจ์๋ค์ ๋ฌธ์์ด์ ์์ ์ธ๋ฑ์ค๊ฐ 0์ด๊ณ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ ๋ฌธ์์ด๊ธธ์ด-1 ์ด๋ค. ์ฝ๋๋ฅผ ๊ทธ์ ๋ง๊ฒ ์์ ํ์)
ย ย var len = string_length(tmpText)
ย ย for (var characterCount = 1; characterCount <= len; characterCount ++)
ย ย {
ย ย ย ย var currentCharacter = string_char_at(tmpText, characterCount);
ย ย ย ย var nextCharacter = (characterCount <= len-1) ? string_char_at(tmpText, characterCount+1) : "";
ย ย ย ย var preCharacter = (characterCount > 1) ? string_char_at(tmpText, characterCount-1) : "";
ย ย ย ย line += currentCharacter;
ย ย ย ย // ์ผ๋ณธ์ด '๊ธ์น์ฒ๋ฆฌ'์ ๋ฐ๋ผ, ๊ฐํ๋ ํ์ ์ฒซ๋ฌธ์๊ฐ ๋ ์ ์๋ ๋ฌธ์๋ ์ด์ ๋ฌธ์์ ๋ธ๋ฆฐ ๋ฌธ์(์ฆ ๋จ์ด)๋ก ์ทจ๊ธํ์ฌ ์ค๊ฐ์ ์ค๋ฐ๊ฟ ๋์ง ์๋๋ก ๋ฐฉ์งํ๋ค
ย ย ย ย if( ((IsLatin(currentCharacter) && IsLatin(preCharacter) ) && (IsLatin(currentCharacter) && !IsLatin(preCharacter))) || // ์ด ํ์ ์ฌ์ค ์์ด๋ ๋๋ ํ์ด๋ค.. ์กฐ๊ฑด๋ฌธ์ด ์๋ชป๋ผ์ ํญ์ false ๊ฐ ๋์ด
ย ย ย ย ย ย (!IsLatin(currentCharacter) && CHECK_HYP_BACK(preCharacter)) ||
ย ย ย ย ย ย (!IsLatin(nextCharacter) && !CHECK_HYP_FRONT(nextCharacter) && !CHECK_HYP_BACK(currentCharacter))||
ย ย ย ย ย ย (characterCount == len)){
ย ย ย ย ย ย array_push(words, line);
ย ย ย ย ย ย line = "";
ย ย ย ย ย ย continue;
ย ย ย ย }
ย ย }
ย ย return words;
}
// ๊ณต๋ฐฑ ๋ฌธ์์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค
function GetSpaceWidth()
{
ย ย var tmp0 = string_width("m m");
ย ย var tmp1 = string_width("mm");
ย ย return (tmp0 - tmp1);
}
// ์ผ๋ณธ์ด ์ค๋ฐ๊ฟ ๊ธฐ๋ฅ์ ๋ฉ์ธ ํจ์๋ค. ์ถ๋ ฅํ ๊ฐ๋ก ๋๋น์ ์๋ณธ ๋ฌธ์์ด์ ์ธ์๋ก ๋ฃ์ด์ผ ํ๋ค.
// ์ด ํจ์๋ ์ค๋ฐ๊ฟ๋ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
function GetFormatedText(widthLimit, msg)
{
ย ย // ์ธ์๋ก ๋ฐ์ ๋ฌธ์์ด์ด ๋น ๋ฌธ์์ด์ด๋ฉด "" ๋ฅผ ๋ฐํํ๋ค
ย ย if(msg == ""){
ย ย ย ย return "";
ย ย }
ย ย
ย ย var spaceCharacterWidth = GetSpaceWidth();
ย ย // work
ย ย var lineBuilder = "";
ย ย var lineWidth = 0;
ย ย var wordList = GetWordList(msg)
ย ย for (var i = 0; i < array_length(wordList); ++i)
ย ย {
ย ย ย ย var originalLine = wordList[i]
ย ย ย ย lineWidth += string_width(originalLine);
ย ย ย ย if (originalLine == "\n" ){
ย ย ย ย ย ย lineWidth = 0;
ย ย ย ย }else{
ย ย ย ย ย ย if( originalLine == " " ){
ย ย ย ย ย ย ย ย lineWidth += spaceCharacterWidth;
ย ย ย ย ย ย }
ย ย ย ย ย ย if( lineWidth > widthLimit ){
ย ย ย ย ย ย ย ย lineBuilder += "\n";
ย ย ย ย ย ย ย ย lineWidth = string_width(originalLine);
ย ย ย ย ย ย }
ย ย ย ย }
ย ย ย ย lineBuilder += originalLine;
ย ย }
ย ย return lineBuilder;
}
// ์ผ๋ณธ์ด ๊ธ์น์ฒ๋ฆฌ๋ฅผ ํ
์คํธํ๋ฉฐ ํ๋ฉด์ ์ถ๋ ฅํด๋ณธ๋ค
// ๊ฐ์์ ํ
์คํธ ์ถ๋ ฅ์ฉ ๋ฐ์ค ์์ญ์ ์ ์ํ๋ค.
xx = 400
yy = 100
ww = 210
hh = 500
// ์ผ์ชฝ ์ค๋ฅธ์ชฝ ํค๋ฅผ ๋๋ฅผ์๋ก ย ์ถ๋ ฅ ๋ฐ์ค ๊ฐ๋ก ๋๋น๋ฅผ ์ค์ด๊ฑฐ๋ ๋ํ
if !variable_instance_exists(id, "ww_plus")
{
ย ย ww_plus = 0
}
if keyboard_check(vk_left)
{
ย ย ww_plus -= 1
}
if keyboard_check(vk_right)
{
ย ย ww_plus += 1
}
ww += ww_plus
// ํ
์คํธ ์ถ๋ ฅ ๋ฐ์ค ์์ญ์ ํ๋ฉด์ ํ์ํ๋ค.
draw_set_colour(c_yellow);
draw_rectangle(xx, yy, xx+ww, yy+hh, true);
// ๋ฌธ์์ด ์ถ๋ ฅ
draw_set_colour(c_white);
draw_set_font(Font2);
var strJ = "Unityใใใฅใขใซใฌใคใใฏ็นๅฎใฎใใฉใใใใฉใผใ ใซใฎใฟ้ฉ็จใใใใปใฏใทใงใณใๅซใฟใพใใ\n่ชใๅ็
งใใใใปใฏใทใงใณใ้ธๆใใฆไธใใใใใญใใใใฉใผใ ็นๆใฎๆ
ๅ ฑใฏๅใใผใธใฎไธ่งๅฝขใฎ่จๅทใง็คบใใใใใฟใณใซใใๅฑ้ใใฆๅ็
งใใใใจใๅบๆฅใพใใ\nUnityใใใฅใขใซใฌใคใใฏ็นๅฎใฎใใฉใใใใฉใผใ ใซใฎใฟ้ฉ็จใใใใปใฏใทใงใณใๅซใฟใพใใ\n่ชใๅ็
งใใใใปใฏใทใงใณใ้ธๆใใฆไธใใใใใญใใใใฉใผใ ็นๆใฎๆ
ๅ ฑใฏๅใใผใธใฎไธ่งๅฝขใฎ่จๅทใง็คบใใใใใฟใณใซใใๅฑ้ใใฆๅ็
งใใใใจใๅบๆฅใพใใ"
var strWrapped = GetFormatedText(ww, strJ)
//show_debug_message(strWrapped)
draw_text(xx, yy, strWrapped)
๊ฒ๋ฉ์๋ฃ ๊ฐ์ถ
๊ฒ์ค์ฒ์ฌ๋ฑ์ฅ ๊ณ ๋ง์!
๊ฒ๋ฉ ์ด๋ ค์ด๋ ์๊ตฌ์์ฅ์ด๋ผ ๋ค์ํด๋ณผ๋ผ๊ณ ํจ...