やはり楽しいですね。
さて、現在次のような関数をつくっています。
例えば
I'mMoNoQLoREATOR!!
という文字列を放り込むと、座標(100,200)の位置に黄色で32ピクセルの I'm が表示され、続けて、水色で64ピクセルの縁付き文字 MoNoQLoREATOR!! が表示されるというものです。内部でDrawFormatStringToHandle()を呼び出して描画しています。つまり、HTML感覚で文字列を描画できるということです。これを利用すれば、テキストファイルから文字列を読み込んで、それをそのままこの関数に渡すだけで思い通りに文字列を表示することができます。
・・・しかし、原因不明のエラーが・・・orz
文字列処理って難しいですよね。文字列をコピーしているのか、先頭アドレスを記憶しているだけなのか、どちらかわかりません。多分その辺りが問題ではないかと思うのですが、どうなのでしょう。vectorは克服したと思ったのになぁ・・・。
書きかけのはずかしいコードなので質問掲示板に乗せられませんw
以下エラー内容とソースコードです。原因がわかる方、よろしくおねがいしますm(_ _)m
エラー内容
TagString.exe の 0x0089f71c でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x008a5ff0 に書き込み中にアクセス違反が発生しました。
とりあえず、アクセス違反だそうです。場所0x008a5ff0とか言われてもチンプンカンプンなのですが・・・
#define _CRT_SECURE_NO_DEPRECATE
#include "DxLib.h"
#include
#include
#include
#include
//描画した際、その横幅を返す
std::vector CreateTagData(const char *baseStr){
using namespace std;
vector tagData;
vector subs;
subs.resize(1);
// ''で分割する
{
vector paredStr;
for(size_t i=0;i') paredStr.push_back("");
else paredStr[paredStr.size()-1] += baseStr[i]; //文字列追加
}
//0番目から始まり偶数番目の文字列については':'又は';'で分割する
{
int count = -1;
for(size_t i=0;i tagData){
using namespace std;
int width = 0;
int argu[7] = {0,0,0,0,0,0,0};
string fontName;
argu[4] = 9;
argu[5] = 32;
argu[7] = DX_FONTTYPE_NORMAL;
/*
0 出力
1 x座標
2 y座標
3 色
4 太さ
5 大きさ
6 フォント
7 フォントタイプ(淵付き,アンチエイリアス等)
*/
//配列の0番目から走査し、属性によって適切な回数パラメーターの値を設定する
for(size_t i=0;i test = CreateTagData("fj;as;ofuoafoa");
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
TagString(test);
ScreenFlip();
}
DxLib_End();
return(0);
}