回答編集履歴

1

コードっぽいのを追加

2019/11/15 02:58

投稿

fana
fana

スコア11663

test CHANGED
@@ -51,3 +51,113 @@
51
51
 
52
52
 
53
53
  で,そういったある種の纏まった情報を扱うには「構造体」というものを使うと便利かもしれませんよ.
54
+
55
+
56
+
57
+ ---
58
+
59
+
60
+
61
+ 例えばこんな雰囲気のものを書くとかですかね.
62
+
63
+ (動作検証とかも一切してませんけど)
64
+
65
+ ```
66
+
67
+ //文章表示用の情報
68
+
69
+ struct DrawStrContext
70
+
71
+ {
72
+
73
+ //最初に設定しておく要素
74
+
75
+ char *Str; //描画したい文章(文字列)を指す
76
+
77
+ int Left; //描画座標x
78
+
79
+ int Top; //描画座標y
80
+
81
+ int Color; //描画色
82
+
83
+ unsigned int nStepForEachChar; //描画する文字を増やす速度的な処理パラメタ.
84
+
85
+
86
+
87
+ //DrawStringWorkFunc()が更新する情報
88
+
89
+ // これらは最初は0にしておくこと.
90
+
91
+ unsigned int StepCounter; //進捗状態管理用
92
+
93
+ unsigned int nWholeStrDrawnStep; //文字列全体が描画された回数(いつまで描画するん?の判定用を想定)
94
+
95
+ };
96
+
97
+
98
+
99
+ //文章の表示用関数
100
+
101
+ void DrawStringWorkFunc( DrawStrContext *pContext )
102
+
103
+ {
104
+
105
+ //※ここでは,話を簡単にするため,「1文字」とはchar2個分だという想定にしてあります.
106
+
107
+ // 実際にはそこらへんをちゃんとやる必要があるでしょう.
108
+
109
+
110
+
111
+ //文章の文字数
112
+
113
+ unsigned int nChar = strlen( pContext->Str ) / 2;
114
+
115
+ //現在,何文字目まで描画すべきか
116
+
117
+ unsigned int nDraw = 1 + ( pContext->StepCounter / std::max( pContext->nStepForEachChar, 1u ) );
118
+
119
+ if( nDraw>=nChar )
120
+
121
+ {
122
+
123
+ nDraw = nChar;
124
+
125
+ ++pContext->nWholeStrDrawnStep;
126
+
127
+ }
128
+
129
+ else
130
+
131
+ { ++pContext->StepCounter; }
132
+
133
+
134
+
135
+ {//nDraw文字目までを描画する
136
+
137
+ int idx = nDraw*2;
138
+
139
+ char Backup = pContext->Str[idx];
140
+
141
+ pContext->Str[idx] = '\0';
142
+
143
+
144
+
145
+ DrawFormatString(
146
+
147
+ pContext->Left, pContext->Top,
148
+
149
+ pContext->Color,
150
+
151
+ "%s", pContext->Str
152
+
153
+ );
154
+
155
+
156
+
157
+ pContext->Str[idx] = Backup;
158
+
159
+ }
160
+
161
+ }
162
+
163
+ ```