ページ 11

DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月17日(日) 18:52
by kai
現在、改造している龍神録で、
東方でいうスペルカードの文字を表示させるところを実装中なんですが、
弾幕一つ一つに、文字を描いた画像を表示するのはロードが長くなる原因なので
DrawFormatStringToHandleを使って表示しようとしたのですが、
これって左詰めですよね?
DrawFormatStringToHandle( xxx , yyy , color[0] , font[2] , "テスト『テストテストテスト』");
みたいにプログラムを組むと左詰めに表示されてしまい、
次の弾幕で、名前が違ったりすると
DrawFormatStringToHandle( xxx , yyy , color[0] , font[2] , "テスト『テストテスト』");
その文字の間分、隙間が開いてしまい、見た目が悪くなってしまって困ってます。
右詰めに表示出来たら最高にうれしいのですが、どうしたら出来ますでしょうか?
アドバイスよろしくお願いします。

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月17日(日) 19:09
by Dixq (管理人)
http://homepage2.nifty.com/natupaji/DxL ... html#R17N2

こちらの関数で、描画する際の表示サイズが取得できます。
これに合わせて描画位置を変えて描画する自作関数を作ればどうでしょうか?

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月17日(日) 19:24
by kai
ありがとうございます。
GetDrawStringWidth関数をどのように扱えば右詰めになるのでしょうか?
出来ましたら、右詰めにする簡単なプログラムがあればありがたいです。 画像

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月17日(日) 21:35
by kai
ついでなので聞きたいのですが、
画像の場合、DrawModiGraphでグラフィックの自由変形描画が出来るのですが、
文字の関数で自由変形描画出来る関数はないのでしょうか?

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月17日(日) 22:11
by lbfuvab
>GetDrawStringWidth関数をどのように扱えば右詰めになるのでしょうか?

リファレンスに乗っている関数なので関数自体や引数の意味は分かっていると仮定します。
まずはトライ&エラー方式でやりましょう。
最低でも3~5回程度改良してから質問しましょう。


>文字の関数で自由変形描画出来る関数はないのでしょうか?

MakeScreenで描画画面を作成して文字を書き、それをDrawModiGraphすれば出来なくはないです。
ただ、それなら事前に画像を作成する事をお薦めします。

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月17日(日) 22:27
by kazuoni
> GetDrawStringWidth関数をどのように扱えば右詰めになるのでしょうか?

こんな感じですかね。


#う・・・暇だったんで、ついぱぱっと書いてしまいました。。
こういう質問って、普通はlbfuvabさんのおっしゃるように、
導出させる方向での回答のがよいのでしょうか・・・。
最近ではsoftyaさんの様な回答ですね。
とても親切に導出まで導いていらっしゃいます。
宿題の丸投げではないので、また基準が難しいですね。

質問者さんの回答からは逸れるので文字小さくしときます・・・
画像

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月17日(日) 23:11
by kai
>lbfuvabさん
返答ありがとうございます。
>MakeScreenで描画画面を作成して文字を書き、それをDrawModiGraphすれば出来なくはないです。
すみません。いまいちやり方が分からないのですが、もうちょっと詳しく説明していただけないでしょうか?
よろしくお願いします。

>kazuoniさん
返答ありがとうございます。
作成したいただいたサンプルを参考に実装してみたいと思います。ありがとうございます。
私自信、よく会社では、分からないことがあれば(教える時間短縮のために)サンプルをやるから、
後は自分で理解しろということが結構あるので、その方が理解しやすいので助かります。 画像

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月18日(月) 03:08
by pooka
>>MakeScreenで描画画面を作成して文字を書き、それをDrawModiGraphすれば出来なくはないです。
>すみません。いまいちやり方が分からないのですが、もうちょっと詳しく説明していただけないでしょうか?

こんなかんじでしょうか。
#include "DxLib.h"
#include <string.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    char *str = "サンプルです";
    int len;
    int width;
    int screen;

    ChangeWindowMode(TRUE);

    if (DxLib_Init() == -1)
         return -1;

    len = (int)strlen(str);
    width = GetDrawStringWidth(str, len);
    screen = MakeScreen(width, 20);

    SetDrawScreen(screen);

    DrawString(0, 0, str, GetColor(255, 255, 255));

    SetDrawScreen(DX_SCREEN_BACK);

    DrawModiGraph(100, 100, 300, 200, 300, 250, 100, 150, screen, TRUE);
    
    ScreenFlip();
    
    WaitKey();

    DeleteGraph(screen);

    DxLib_End();

    return 0;    
}
画像

Re:DrawFormatStringToHandleで右詰めにする方法

Posted: 2010年1月19日(火) 20:48
by kai
ありがとうございます!助かりました!