ページ 11

文字を中央に揃えて表示させたいが出来ない。

Posted: 2013年5月21日(火) 19:37
by 長峰
件名の通り、文字を中央に揃えて表示させたいのですが、なかなかうまく行きません。
現状のコードを実行すると、文字の書き始めが中央になってしまっています。(x=320の位置)
知恵を貸してください。

コード:

//String.h
#pragma once
#include"DxLib.h"
int CalcCenter(int x1,int x2,const char *str){
	return ( x2+x1-GetDrawStringWidth(str,strlen(str)) )/2;
}

コード:

//main.cpp
//無駄な部分を削除したので色々おかしいかもしれませんが、文字は表示されています。

#include"DxLib.h"
#include"String.h"
static const int WINDOW_WIDTH(640);
static int column[]={
	CalcCenter(0,WINDOW_WIDTH,"[TITLE]"),
	CalcCenter(0,WINDOW_WIDTH,"GAME LOAD"),
	CalcCenter(0,WINDOW_WIDTH,"CONFIG")
};//x方向
static int row[]={0,220,240};//y方向
int color=GetColor(255,255,255);//文字色

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	if(ChangeWindowMode(1)||DxLib_Init()==-1||SetDrawScreen(DX_SCREEN_BACK)){return -1;}
	while(!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()){
	DrawString(column[0],row[0],"[TITLE]",color);
	DrawString(column[1],row[1],"GAME LOAD",color);
	DrawString(column[2],row[2],"CONFIG",color);
	}
	DxLib_End();
	return 0;
}

Re: 文字を中央に揃えて表示させたいが出来ない。

Posted: 2013年5月21日(火) 20:16
by softya(ソフト屋)
DxLib_Init()よりもstatic intの初期化の方が早いので、CalcCenter()のGetDrawStringWidth()はまともな値を返さないと思います。
static intの初期値ではなく、DxLib_Init()後に計算して値を入れてください。

Re: 文字を中央に揃えて表示させたいが出来ない。

Posted: 2013年5月21日(火) 20:41
by h2so5
位置を事前計算するのはコードが複雑になるだけでメリットが少ないと思います。
文字の位置を毎フレーム計算しても実際はそんなにコストかかりません。

Re: 文字を中央に揃えて表示させたいが出来ない。

Posted: 2013年5月21日(火) 23:23
by 長峰
お二方とも回答ありがとうございます。

分かりやすい説明で無事に問題を解決できました。
事前計算のデメリットが目立つようなので、もう少し改良を加えようと思います。

質問できて良かったです。