トップページ > 記事閲覧
DRAWCHARINFOのDrawYについて
名前:初心者 日時: 2023/06/10 07:46

こんにちは。 何度も質問して申し訳ないです。 DxLib::GetDrawStringCharInfoToHandle 関数で得られる DRAWCHARINFO 構造体の DrawY についてです。 デバッグツールなどで見ていると、DrawY の値が負の値になっていました。 本題 DRAWCHARINFO::DrawY の用途は縦書き時における DrawX だと思っていますが、間違いないでしょうか? またその場合、負数になる理由は何でしょうか? スレッドを複数立ててしまいすみません。 違う点での質問でしたのでスレッドを分けたのですが迷惑でしたでしょうか?
メンテ

Page: 1 |

Re: DRAWCHARINFOのDrawYについて ( No.1 )
名前:管理人 日時:2023/06/11 00:12

すみません、最近修正するまで DrawY に正常な値が代入されていませんでしたので、 よろしければこちらの暫定最新版をお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > DRAWCHARINFO::DrawY の用途は縦書き時における DrawX だと思っていますが、間違いないでしょうか? DrawX と DrawY は変数名の通り描画座標となります なので例えば a や . など、DrawString などで指定した y座標よりも低い位置に描画される文字については それだけ大きな値が DrawY に代入されます
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.2 )
名前:初心者 日時:2023/06/11 06:44

お返事ありがとうございます。 GCC 13.1.0 でビルドしたものを頂けないでしょうか… 以下のようなリンクエラーが出ました。 ---------------------------------------------------------------------------------------------------- $ make Updating dependencies... g++ -std=c++20 -Wall -Wextra -I./include -IC:/dxlib -g -O0 -D_UNICODE -DUNICODE -D_WIN32 -DDX_GCC_COMPILE -DDX_NON_USING_NAMESPACE_DXLIB -D_DEBUG -c -o bin/debug/Main.o src/Main.cc g++ -std=c++20 -Wall -Wextra -I./include -IC:/dxlib -g -O0 -D_UNICODE -DUNICODE -D_WIN32 -DDX_GCC_COMPILE -DDX_NON_USING_NAMESPACE_DXLIB -D_DEBUG -static -mwindows -LC:/dxlib bin/debug/Main.o -lDxLibW -lDxUseCLibW -lDxDrawFunc -ljpeg -lpng -lzlib -ltiff -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lbulletdynamics -lbulletcollision -lbulletmath -lopusfile -lopus -lsilk_common -lcelt -o bin/debug/test_for_dxlib.exe C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/dxlib\libDxUseCLibW.a(DxUseCLib.o):DxUseCLib.cpp:(.text+0xa63): undefined reference to `__intrinsic_setjmpex' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/dxlib\libDxUseCLibW.a(DxUseCLib.o):DxUseCLib.cpp:(.text+0x1076c): undefined reference to `__intrinsic_setjmpex' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/dxlib\libDxUseCLibW.a(DxUseCLib.o):DxUseCLib.cpp:(.text+0x10db5): undefined reference to `__intrinsic_setjmpex' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/dxlib\libDxUseCLibW.a(DxUseCLib.o):DxUseCLib.cpp:(.text+0x11290): undefined reference to `__intrinsic_setjmpex' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/dxlib\libpng.a(png.o):png.c:(.text+0x1367): undefined reference to `__intrinsic_setjmpex' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/dxlib\libpng.a(pngerror.o):pngerror.c:(.text+0xbb5): more undefined references to `__intrinsic_setjmpex' follow collect2.exe: error: ld returned 1 exit status make: *** [makefile:105: bin/debug/test_for_dxlib.exe] Error 1 ---------------------------------------------------------------------------------------------------- お手数をおかけしますがよろしくお願いいたします。
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.3 )
名前:初心者 日時:2023/06/11 06:53

一旦 GCC のバージョン下げて試してみます!
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.4 )
名前:初心者 日時:2023/06/11 07:27

GCC のバージョンを 12.2.0-11, 12.2.0-9 それぞれダウングレードして試してみましたが、どれも 13.1.0 と同じリンクエラーが発生しました。 こちらの環境が悪いのかと思い、元々使用していた DxLib Ver 3.23a + GCC 12.2.0-11 で試したところ上記のエラーなく正常にビルドできました。 ですので何か不具合があるのかもしれません… お手数ですが調査のほどお願いいたします。 申し訳ないです…
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.5 )
名前:初心者 日時:2023/06/11 08:29

追加で質問です。 こちらは新しく頂いたライブラリで検証してから質問させて頂こうと思っていたのですが困難なため今質問させて頂きます。 DxLib::GetDrawStringCharInfoToHandle 関数で与えた文字列中に \n があると次の文字の DrawY が SizeY 分加算されると思っているのですが間違いないでしょうか? もしそうであれば、\n 等のエスケープシーケンスを無視した DxLib::GetDrawStringCharInfoToHandle 関数と DxLib::DrawString 関数を作って頂きたいです。 今、自分は「上下左右共に中央寄せ」や、「上右寄せ」等のアライメントに従って文字を描画する関数を作成しています。 その際に \n で自動的に改行してしまうと変な感じ(語彙力)になってしまうためです。 よろしくお願いいたします。
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.6 )
名前:管理人 日時:2023/06/12 00:15

すみません、複数の話題を並行して進めると話が煩雑になってしまうので、一つづつ解決したいと思います 初心者さんがお使いの GCC 13.1.0 をダウンロードしたウェブサイトを教えて頂けないでしょうか?
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.7 )
名前:初心者 日時:2023/06/12 05:06

分かりました。 自分はツールやライブラリ等のバージョン管理は pacman に任せています。 そのため、自分で調べてダウンロードしたわけではないので参照したサイトはありません。 ただ、手動でダウンロードする用のサイトがあったのでそちらを張らせて頂きます。 こちらが GCC 13.1.0 をダウンロードするためのサイトです。 ttps://packages.msys2.org/package/mingw-w64-x86_64-gcc?repo=mingw64
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.8 )
名前:管理人 日時:2023/06/12 23:13

載せていただいたサイトからダウンロードできたパッケージには mingw32-make.exe や libstdc++-6.dll などのファイルが含まれておらず、DXライブラリをビルドすることができませんでした packman というものを使用して mingw の環境を揃えられたとのことですが、 初心者さんが mingw の環境を整えられた方法について解説されている サイトなどありましたら教えてください m(_ _)m 若しくは初心者さんの環境にある GCC 13.1.0 の mingw64 フォルダを丸ごとzipなどで 圧縮してアップしていただければと思います ( インストールされるバージョンの差異を 無くすという意味ではこちらの方が良いかもしれません )
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.9 )
名前:初心者 日時:2023/06/17 09:43

返 信 が 遅 く な り 申 し 訳 あ り ま せ ん 。 自 分 は Windows10 上 で 、 MSYS2 と い う も の を 利 用 し て 疑 似 的 な Linux 環 境 を 構 築 し て お り ま す 。 それ に 付 属 す る パ ッ ケ ー ジ 管 理 シ ス テ ム が pacman に な り ま す 。 MSYS2 の イ ン ス ト ー ル は こ ち ら か ら 行 い ま し た 。(h t t p s : / / w w w . m s y s 2 . o r g) イ ン ス ト ー ル 終 了 後 「MSYS2 MinGW x64」 の タ ー ミ ナ ル を 起 動 し 、 -------------------- > pacman -S mingw-w64-x86_64-gcc -------------------- で GCC の イ ン ス ト ー ル が で き る は ず で す 。 よろしくお願いします! 禁止用語に引っかかってしまったのでスペースを入れさせて頂きました。 見づらいかと思いますが申し訳ないです。
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.10 )
名前:管理人 日時:2023/06/17 22:28

ありがとうございます、無事 pacman で mingw-w64-x86_64-gcc をインストールできました すみません、追加でご質問させてください これまでの MinGW のバージョンでは必要なファイルが全部入った 7z ファイルをダウンロードしてきて、 それを展開すると mingw64\bin フォルダの中に mingw32-make.exe が入っていたので、 この make コマンドを使用してDXライブラリの aファイルを作成していたのですが、 今回 pacman で mingw-w64-x86_64-gcc を実行しただけでは mingw32-make.exe はインストールされないようでした 少し調べた所 pacman -S make を実行すれば makeコマンドも使えるようになると載っていたのですが、一応こちらも初心者さんの 環境と合わせたいと思いますので、よろしければ初心者さんが makeコマンドをインストールする際に 行った手順を教えて頂けないでしょうか? m(_ _)m ( もし makeコマンドを使用されていませんでしたら pacman -S make でインストールします )
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.11 )
名前:初心者 日時:2023/06/18 09:25

返信ありがとうございます。 私も -------------------- pacman -S make -------------------- で環境構築したと思います。 バージョンは「GNU Make 4.4.1」になります。
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.12 )
名前:管理人 日時:2023/06/18 22:25

ご返答ありがとうございます 手元の環境でも pacman -S make でインストールを行いました ( バージョンも 4.4.1 でした ) インストールした環境で作成したライブラリファイルをアップしましたので、よろしければお試しください m(_ _)m ( 13_1_0_x86_64_w64 というフォルダが追加されています ) https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.13 )
名前:初心者 日時:2023/06/19 19:35

ご丁寧にありがとうございます。 DxLib 3.24c + GCC 13.1.0 で問題なくビルド及び実行できました。 ありがとうございます。 > なので例えば a や . など、DrawString などで指定した y座標よりも低い位置に描画される文字についてはそれだけ大きな値が DrawY に代入されます とのことですが、"Hello world." という文字列のそれぞれの DrawY についてデバッガで見てみたところ、全て 0 でした。 これは問題ないでしょうか?
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.14 )
名前:管理人 日時:2023/06/19 23:10

手元で以下のようなテストプログラムを実行してみたのですが #include "DxLib.h" #include <string.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int FontHandle ; DRAWCHARINFO CharInfo[ 32 ] ; const char *String = "Hello world." ; int StringLength ; ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) { return -1 ; } FontHandle = CreateFontToHandle( "MS ゴシック", 16, 16, DX_FONTTYPE_NORMAL ) ; StringLength = strlen( String ) ; GetDrawStringCharInfoToHandle( CharInfo, sizeof( CharInfo ) / sizeof( DRAWCHARINFO ), String, StringLength, FontHandle, FALSE ) ; for( int i = 0 ; i < StringLength ; i ++ ) { DrawFormatString( 0, i * 16, GetColor( 255,255,255 ), "%c : %f", String[ i ], CharInfo[ i ].DrawY ) ; } WaitKey() ; DxLib_End() ; return 0 ; } それぞれ DrawY は以下の通りでした H : 1.0 e : 6.0 l : 1.0 l : 1.0 o : 6.0 : 0.0 w : 6.0 o : 6.0 r : 6.0 l : 1.0 d : 1.0 . : 12.0 よろしければ初心者さんの環境でも上記のプログラムであれば DrawY が 0 以外になるか試してみてください m(_ _)m
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.15 )
名前:初心者 日時:2023/06/24 18:41

返信が遅くなり申し訳ありません。 実行したところ、同じ結果となりました。 前回ビルド&実行した際は DxLib のバージョンを makefile 内で反映し忘れていたようです。お騒がせしました。 エラーもなく、DrawY も正常に取得出来ましたので改めて質問させていただきます。 1.DRAWCHARINFO::DrawY の用途はどのようなものを想定されていますか? 2.\n 等のエスケープシーケンスを無視した GetDrawStringCharInfoToHandle 関数と DrawString 関数を作って頂きたいです。 3.描画する文字列の高さについて GetFontLineSpaceToHandle 関数と GetFontSizeToHandle 関数のどちらを利用すれば良いでしょうか? ご回答よろしくお願いいたします。m(_ _)m
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.16 )
名前:管理人 日時:2023/06/25 02:12

> 1.DRAWCHARINFO::DrawY の用途はどのようなものを想定されていますか? すみません、レスポンスNo.1 で DrawY に代入される値が正しくなかったとして変更しましたが、 実際は正しい値が代入されていました( GetFontCharInfo で取得できる値と混同してしまっていました… ) なので、元の値に戻しましたので、お手数で申し訳ありませんが よろしければこちらの修正版をダウンロードしてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 元の値に戻した上で DrawY の意味ですが、GetDrawStringCharInfoToHandle はもともとは 『DrawStringToHandle で一文字づつ描画する時に、各文字をどの座標で描画すべきかを知りたい』 という要望に応える為に追加された関数ですので、GetDrawStringCharInfoToHandle で 取得できた DrawX, DrawY を使用して DrawStringToHandle で各文字を1文字づつ描画すると DrawStringToHandle で一度に複数文字描画した際と同じ位置に描画できる、というものとなります > 2.\n 等のエスケープシーケンスを無視した GetDrawStringCharInfoToHandle 関数と DrawString 関数を作って頂きたいです。 \n を無効にしただけの別関数を用意するのは少し無駄が多いので、 DrawString などで \n を無視するかを設定するための以下の関数を追加しました // DrawString などで \n を無視するかどうかを設定する // Flag TRUE : \n を無視する FALSE : \n を無視しない( デフォルト ) int SetFontIgnoreLFFlag( int Flag ) ; SetFontIgnoreLFFlag( TRUE ); を実行してから DrawString などの文字列関係の関数を使用すると 文字列の中に \n が存在しても無視されます ( 因みにDXライブラリが対応しているエスケープシーケンスは \n のみです ) SetFontIgnoreLFFlag は前述の修正版に含まれていますので、よろしければお試しください m(_ _)m > 3.描画する文字列の高さについて GetFontLineSpaceToHandle 関数と GetFontSizeToHandle 関数のどちらを利用すれば良いでしょうか? どちらが正しいというのは特にないかもしれませんが、DrawString で描画する文字列の中に \n が 含まれていて改行される場合の Y座標の移動値と同じ値が取得できるのは GetFontLineSpaceToHandle となります
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.17 )
名前:初心者 日時:2023/06/25 17:00

丁寧な対応ありがとうございます。 最後に確認させていただきたいのですが、実験したところ再び DrawY が負数になりましたが、これは問題ないですよね? ちなみに 3.23a と同じ値が返ってきました。
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.18 )
名前:管理人 日時:2023/06/26 00:31

> 最後に確認させていただきたいのですが、実験したところ再び DrawY が負数になりましたが、これは問題ないですよね? > ちなみに 3.23a と同じ値が返ってきました。 はい、負数となる場合もあるのは正常な動作となります
メンテ
Re: DRAWCHARINFOのDrawYについて ( No.19 )
名前:初心者(解決済み) 日時:2023/06/26 23:07

了解しました! ご丁寧な対応ありがとうございました。解決とさせて頂きます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存