Re: 文字列を90度回転できないでしょうか ( No.1 ) |
- 名前:管理人 日時:2019/07/15 23:58
リファレンスには載っていませんが、DrawRotaString という関数がありますので、よろしければお使いください m(_ _)m
// デフォルトフォントハンドルを使用して文字列を回転描画する
int DrawRotaString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String ) ;
// フォントハンドルを使用して文字列を回転描画する
int DrawRotaStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String ) ;
( VerticalFlag は縦書きフォント用なので通常は FALSE を指定してください )
|
Re: 文字列を90度回転できないでしょうか ( No.2 ) |
- 名前:fghck852 日時:2019/07/16 03:47
早速のご回答ありがとうございます。
ご教示いただいた2つの関数を実行してみましたが、回転は思い通りに回転するのですが、回転後の文字列の位置が思うようになりません。
回転中心のX,Y座標は、回転前の文字列の左端の座標を指定すれば、文字列の左端の位置は変わらずに、回転だけするはずだと思うのですが、
なかなかそうなりません。
例えば次のようにプログラムした場合、回転後の文字列の上端の位置は、回転前の文字列の左端の位置(X=100,Y=200)と一致するはずですが、
実際に動かし見ると、X=200、Y=100くらいの位置になります。
DrawRotaString( 100, 200, 1.0, 1.0, 100.0, 200.0, 3.14 / 2.0, 0, 0, FALSE, "DrawRotaStringの例");
これはDrawRotaStringの場合ですが、DrawRotaStringToHandleでも同様です。
つきましては、次の点にご回答いただきたく、よろしくお願いします。
1.回転中心のX,Y座標(第5、第6引数)は、画面左上の端を(0,0)とする座標で指令すると思っているのですが、違うのでしょうか。
2.例えば文字列を右に90度回転させ、回転後の文字列の上端がX=100,Y=200の位置に来るようにするには、どのようにプログラムすればよいのか、
プログラム例を示していただけないでしょうか。
|
Re: 文字列を90度回転できないでしょうか ( No.3 ) |
- 名前:95 日時:2019/07/16 10:13
出先なので試していませんが 1.0, 1.0 の次は 100,200ではなく0, 0 なのでは?
(画面座標ではなく今から書く文字列を四角形で見た場合の座標)
|
Re: 文字列を90度回転できないでしょうか ( No.4 ) |
- 名前:fghck852 日時:2019/07/16 15:26
書き込みありがとうございます。
私もそう思い、( 100, 200, 1.0, 1.0, 0, 0, ...)としてみました。
そうしたら、回転後の文字列上端の位置がX=0,Y=200くらいになりました。
Y方向は良いのですが、X方向がほとんど画面左端にくっついてしまいました。期待するX方向位置は画面左端より100の位置です。
どうすれば思い通りの位置に表示できるのか、わからないでいます。
|
Re: 文字列を90度回転できないでしょうか ( No.5 ) |
- 名前:95 日時:2019/07/16 20:05
エミュレータ(x86)でしか試していませんが
int android_main(void)
{
if (DxLib_Init() < 0) return -1;
DxLib::SetDrawScreen(DX_SCREEN_BACK);
DxLib::SetBackgroundColor(192, 192, 192);
while (ProcessMessage() == 0 && CheckHitKeyAll() == 0)
{
DxLib::ClearDrawScreen();
DrawString(100, 200, "DrawRotaStringの例1", 0);
DrawRotaString(100, 200, 1.0, 1.0, 0, 0, 3.14 / 2.0, 0, 0, FALSE, "DrawRotaStringの例2");
DxLib::ScreenFlip();
}
return DxLib::DxLib_End();
}
で希望通りに回転していると思います。
ちなみに、私がなにか勘違いしているのかわかりませんが
> Androidのスマホを横にして見る画面を作りたいのですが、それには文字列を90度回転させないといけません。
ここの意味がよくわかりません。
単に『起動時をふくめ、いつでも横画面(というか横向き)になっているアプリ』を作りたいということですよね?
そうだとしたら dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4420 にある方法で横画面固定アプリに
してしまえば回転とかを考えずに済むと思うのですが...?
|
Re: 文字列を90度回転できないでしょうか ( No.6 ) |
- 名前:fghck852(解決済み) 日時:2019/07/17 03:27
詳細なご回答ありがとうございました。下記の通り解決致しました。
1.ご提示のあったプログラムについて
思い通りに文字列が回転しました。今後、文字列の回転を行うようなことがあったら、ご提示のプログラムを参考にしたいと思います。
2.「android:screenOrientation="landscape"」で横向きにする方法について
まさにこれが私のやりたかったことです。ご指摘の通り、この方法を使えば、文字列の回転は不要です。
今回はサンプルプログラムまで作っていただき、また2項のような良い方法をご教示いただき、本当にありがとうございました。
初心者の私の質問に完璧に答えていただき、感謝します。大変ありがとうございました。
|
|