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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
長峰
記事: 32
登録日時: 7年前

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

#1

投稿記事 by 長峰 » 7年前

件名の通り、文字を中央に揃えて表示させたいのですが、なかなかうまく行きません。
現状のコードを実行すると、文字の書き始めが中央になってしまっています。(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;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 7年前

DxLib_Init()よりもstatic intの初期化の方が早いので、CalcCenter()のGetDrawStringWidth()はまともな値を返さないと思います。
static intの初期値ではなく、DxLib_Init()後に計算して値を入れてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 10年前
住所: 東京
連絡を取る:

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

#3

投稿記事 by h2so5 » 7年前

位置を事前計算するのはコードが複雑になるだけでメリットが少ないと思います。
文字の位置を毎フレーム計算しても実際はそんなにコストかかりません。

長峰
記事: 32
登録日時: 7年前

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

#4

投稿記事 by 長峰 » 7年前

お二方とも回答ありがとうございます。

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る