comparison presentation/thesis_pre.html @ 15:8dcf232adf8a

pre finish.
author e055722
date Thu, 26 Feb 2009 01:50:17 +0900
parents 95821d81b331
children a264f5f7e9f6
comparison
equal deleted inserted replaced
14:95821d81b331 15:8dcf232adf8a
134 <font size="5"> 134 <font size="5">
135 <ul> 135 <ul>
136 <li>Blenderでオブジェクトモデルを作成</li> 136 <li>Blenderでオブジェクトモデルを作成</li>
137 <li>作成したオブジェクトモデルをpythonスクリプトでxmlファイルに変換</li> 137 <li>作成したオブジェクトモデルをpythonスクリプトでxmlファイルに変換</li>
138 <li>xmlファイルからSceneGraphを生成する</li> 138 <li>xmlファイルからSceneGraphを生成する</li>
139 <li>各ノードにはオブジェクトの動きを決めるmoveとオブジェクトの相互作用を決めるcollisionがある。</li>
139 </ul> 140 </ul>
140 <br> 141 <br>
141 <br> 142 <br>
142 <center> 143 <center>
143 <img src="image/SGcreate.jpg" width="50%" height="30%"> 144 <img src="image/SGcreate.jpg" width="50%" height="30%">
144 </center> 145 </center>
146 </font>
147 </div>
148
149 <div class="slide">
150 <h1>move,collision</h1>
151 boss1_action.cpp<br>
152 <font size="5">
153 <pre>
154 static void
155 boss1_move_right(SceneGraphPtr node, int screen_w, int screen_h) {
156 node->xyz[0] += node->stack_xyz[0];
157 if(node->xyz[0] > screen_w-280) {
158 node->set_move_collision(boss1_move_left, boss1_collision);
159 }
160 }
161
162 static void
163 boss1_move_left(SceneGraphPtr node, int screen_w, int screen_h) {
164 node->xyz[0] -= node->stack_xyz[0];
165 if(node->xyz[0] < 280) {
166 node->set_move_collision(boss1_move_right, boss1_collision);
167 }
168 }
169 </pre>
170 </font>
171 <br>
172 <ul>
173 <li>boss1_move_right,left…boss1が左右に移動する動きを記述</li>
174 <li>boss1_collision…boss1の衝突判定を記述</li>
175 <li>set_move_collision…新しいmoveとcollitsionを設定する</li>
176 </ul>
177 </div>
178
179 <div class="slide">
180 <h1>CppUnitによるテスト手法</h1>
181 <font size="5">
182 <ul>
183 <li>C++の単体テストを自動化するflame workである</li>
184 <li>テストケースを増やす事が容易</li>
185 <li>テストケース群は一括で実行し、結果の表示も行える</li>
186 </ul>
187 <br>
188 <br>
189 <center>
190 <img src="image/test_state.jpg" width="40%" height="50%">
191 </center>
192 </font>
193 </div>
194
195 <div class="slide">
196 <h1>テストを行うゲームプログラム</h1>
197 <font size="5">
198 <br>
199 <table>
200 <tr>
201 <td><img src="image/boss1.png" width=" " height=" "></td>
202 <td>
203 <ul>
204 <li>3つのSceneGraphを持つ</li>
205 <li>本体の他に左右にパーツを1つずつ持つ。</li>
206 <li>本体をTreeのrootとして左右のパーツがその子供となっている</li>
207 </ul>
208 </td>
209 </table>
210 <br>
211 <ul>
212 <li>各オブジェクトのSceneGraphはその親や子、兄弟に対するアドレスを保持している</li>
213 <li>パーツオブジェクトのテストを行いたい場合、Rootである本体から辿れば、パーツオブジェクトの各パラメータを参照できる</li>
214 </ul>
215 </font>
216 </div>
217
218 <div class="slide">
219 <h1>CppUnitによるゲームプログラムのテスト</h1>
220 <font size="5">
221 <ul>
222 <li>getSGPによりSceneGraphのrootのアドレスを取得</li>
223 <li>rootアドレスから本体オブジェクトの各パラメータを参照</li>
224 <li>rootアドレスを走査してパーツオブジェクトの各パラメータを参照</li>
225 </ul>
226 <br>
227 <table>
228 <tr>
229 <td><img src="image/test_part.jpg" width=" " height=" "></td>
230 <td>
231 <pre>
232 void
233 sgTest::rootTest() {
234 test_init();
235
236 sg_root->print_member();
237 CPPUNIT_ASSERT_EQUAL((float)width/2, sg_root->xyz[0]);
238 CPPUNIT_ASSERT_EQUAL(0.0f, sg_root->xyz[1]);
239 CPPUNIT_ASSERT_EQUAL(-100.0f, sg_root->xyz[2]);
240 }
241
242 void
243 sgTest::childTest() {
244 while (sg_root) {
245 if(sg_root->children != NULL) {
246 sg_root->children->print_member();
247 ...
248 sg_root = sg_root->children;
249 } else if(sg_root->brother != NULL) {
250 sg_root->brother->print_member();
251 CPPUNIT_ASSERT_EQUAL(0.0f, sg_root->brother->xyz[0]);
252 ...
253 sg_root = sg_root->brother;
254 } else {
255 ...
256 </pre>
257 </td>
258 </table>
259 </font>
260 </div>
261
262 <div class="slide">
263 <h1>評価・今後の課題</h1>
264 <ul>
265 <li>全てのオブジェクトの座標の初期位置が正しい事を確認</li>
266 <li>move,collision中の各オブジェクトの座標は確認出来ない</li>
267 <li>今後各moveとcollisionを抜き出してテストする手法を実装する</li>
268 </ul>
269 </div>
270
271 <div class="slide">
272 <h1>ご清聴ありがとうございました。</h1>
145 </div> 273 </div>
146 274
147 </div> 275 </div>
148 276
149 </body> 277 </body>