Re: DRAWCHARINFOのDrawYについて ( No.1 ) |
- 名前:管理人 日時:2023/06/11 00:12
|
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
----------------------------------------------------------------------------------------------------
お手数をおかけしますがよろしくお願いいたします。
![メンテ](https://dxlib.xsrv.jp/cgi/patiobbs/bbsimg//mente.gif) |
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
|
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 となります
![メンテ](https://dxlib.xsrv.jp/cgi/patiobbs/bbsimg//mente.gif) |
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
了解しました!
ご丁寧な対応ありがとうございました。解決とさせて頂きます。
|