Mercurial > hg > Papers > 2011 > koba-master
diff paper/dandy.tex @ 9:028ed9741872
finish chapter 8.
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Feb 2011 05:18:27 +0900 |
parents | 2dcc784d62e0 |
children | d711f469cdb7 |
line wrap: on
line diff
--- a/paper/dandy.tex Mon Feb 07 15:47:01 2011 +0900 +++ b/paper/dandy.tex Tue Feb 08 05:18:27 2011 +0900 @@ -1,6 +1,6 @@ -\chapter{Super Dandy} +\chapter{テストに用いるゲームプログラム Super Dandy} -\section{Super Dandy}\label{sec:dandy} +\section{テストプログラムに最適なシューティングゲーム}\label{sec:dandy} Super Dandy は我々が PlayStation でのゲーム開発を行っていた 1998 年に 開発されたシューティングゲームである。PlayStation アーキテクチャの スプライト描画機能を用いて宇宙空間を表現しており、タイトルからゲーム本編中の @@ -29,8 +29,25 @@ 本研究を進めるにあたり、Super Dandy を Cerium の Task で書き換えた Task Dandy を作成した。Task Dandy はできるだけ元の Super Dandy のコード やデータ構造を流用し、比較、テストが容易に行えるように設計した。 +その為、Super Dandy で Move や Collision の処理を行う state\_update() や +collision\_detect() において Move Task や Collision Task を生成している。 +また、obj\_draw() はオブジェクトの描画を行う関数であったが、Task Dandy では +SceneGraph の tree を生成している。そしてゲームの処理を抜け、Cerium の処理に +入ると、さきほど生成した SceneGraph の tree から描画処理を行う 3 つの Task +を生成する(\ref{sec:rendering})。この一連の処理を繰り返すことによって +シューティングゲームである Task Dandy が形成される。(図\ref{fig:taskdandy}) -\subsection{データ構造} +\begin{figure}[h] +\begin{center} +\includegraphics[scale=0.5]{images/taskdandy.pdf} +\end{center} +\caption{Super Dandy と Task Dandy の処理} +\label{fig:taskdandy} +\end{figure} + +\newpage + +\subsection{Super Dandy のデータ構造} データ構造は Super Dandy のものを流用している。Super Dandy では主に以下の ようなデータが存在する。 @@ -52,16 +69,7 @@ これらのデータは オブジェクトの情報として管理されるだけでなく、 その他のオブジェクトの移動や衝突判定時にも使用される。 -\subsection{Task Dandy の Task} - -Task Dandy では オブジェクトの動きや衝突判定をそれぞれ Move Task、Collision -Task として並列に処理させることが出来るように分割している。それぞれの Task は -Super Dandy の Move や Collision が実行されるタイミングで生成され、 -その後処理に必要なデータをセットして各 CPU に送られる。処理を終えた Task は -post\_func により、計算結果をメインメモリ内のデータ領域に反映させ、全ての -Task が終了した時点でゲームの 1 フレームが終了する。 - -\subsection{Property}\label{sec:property} +\subsection{データ転送に用いる Property}\label{sec:property} Task Dandy の Task は処理のために、複数のデータを set\_inData する 必要がある。特に Collision Task に使用するデータはオブジェクト自身の情報の 他にプレイヤーの機体、プレイヤーの出した弾など、種類が多く、全てを set\_in @@ -87,6 +95,8 @@ 追加した。以下のようなコードで状態が遷移する条件に入ると Task ID が 書き換えられる。 +\newpage + \begin{verbatim} static int state6(SchedTask *smanager, void *rbuf, void *wbuf) @@ -111,6 +121,8 @@ } \end{verbatim} +\newpage + 書き換えられた ID は次に Task を生成する際に使用され、別の種類の Task を 生成するようになる。