文字消去について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぴーらの

文字消去について

#1

投稿記事 by ぴーらの » 11年前

ゲームのウィンドウにDrawFormatStringで文字を書いて
その文字自体を消す方法とかってありますか?

DeleteGraphみたいな感じで消したいのですが、やり方がわかる方
教えていただけないでしょうか?

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

Re: 文字消去について

#2

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

DXライブラリなら毎フレーム描画するので、描画をやめれば表示は消えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 文字消去について

#3

投稿記事 by みけCAT » 11年前

DXライブラリならDeleteGraphは画像のデータをメモリから削除する命令なので、こういうことですか?

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
	// 未使用の警告避け
	(void)hInstance;
	(void)hPrevInstance;
	(void)lpCmdLine;
	(void)nCmdShow;

	if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1) return -1;

	char* buffer=new char[1024];
	lstrcpyA(buffer,"テスト文字列%d号");

	// DrawFormatStringで文字を書く 
	DrawFormatString(100,200,GetColor(255,255,255),buffer,1);

	// その文字自体を消す
	for(char* p=buffer;*p!='\0';p++)*p='\0'; // 念のため文字のデータも消す
	delete[] buffer; // 領域を開放

	WaitKey(); 

	DxLib_End();
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぴーらの

Re: 文字消去について

#4

投稿記事 by ぴーらの » 11年前

みけCATさん
僕はゲームを作っていて、敵キャラのHPが0になった
敵を消して、それと同時に敵の頭上に描画していたHPという文字も
消すとゆう作業をしたいのですが

これを実行してみたんですが、敵キャラは消えても文字は描画されたまま
なります。

Delete[]~ のところにブレークポイントを置いて実行してみると
ちゃんとブレークされます。

何が原因なんでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 文字消去について

#5

投稿記事 by みけCAT » 11年前

ぴーらの さんが書きました:何が原因なんでしょうか?
プログラムのバグもしくは不適切な設計が原因かもしれません。
現在のソースコードを提示できますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 文字消去について

#6

投稿記事 by usao » 11年前

質問文の表現が漠然としているので,もっと具体的な言葉で質問すると良いのではないでしょうか.
(「消す」みたいな言葉で書くと,いろいろな意味に取られる可能性がある.
 まぁ,だいたい↓のようなことを言ってるんだろうな,とわかりますけども,
 そこを(わざと,あるいは読み違い等で)違う意味に取らてしまう場合があるのが掲示板.)

ここでいう「消す」とは,
「ある状況下で表示(描画)していたものを,ある条件を満たして以降は表示(描画)しない」
ということを言っているのだと思いますが,だとすれば最初からそう書けばそう伝わるでしょうし,
自身でもこのように 具体的に文を書いてみれば,
「とにかく無条件に表示していたのを,ある瞬間を境にして何とかして見えなくしたい」 みたいな話ではなくて
「何らかの条件を満たす場合においてのみ表示を行う」ということが本当にやりたいことだとわかるんじゃないかな.

ここでいう条件とはもちろん「HPの値が0より大きいか否か」であり,
「敵の画像と,HPという文字 の両者を表示するための条件 = HP>0」なのでしょうから,
そのようにコードを書けばよいのではないでしょうか.

コード:

//HPが0以下の値になってるときには 画像も文字も描画しない
if( HP > 0 )
{
  敵の画像を表示
  "HP"という文字列を表示
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 文字消去について

#7

投稿記事 by みけCAT » 11年前

「文字を表示されなくする」を「DeleteGraphみたいな感じで消す」と表現しているということは、
DXライブラリを使用しているわけではないということですね。
使用しているOS、言語、ライブラリを教えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぴーらの

Re: 文字消去について

#8

投稿記事 by ぴーらの » 11年前

DxLib を使用しています。
USAOさんの言うとおりです。
大変失礼しました

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

Re: 文字消去について

#9

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

softya(ソフト屋) さんが書きました:DXライブラリなら毎フレーム描画するので、描画をやめれば表示は消えます。
結局、私の書いたことなんですよね?
と言うことで残る疑問は何でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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