差分

ナビゲーションに移動 検索に移動

PlayStation Suite SDK/プログラムの基本構造

5,578 バイト追加, 2012年4月21日 (土) 15:20
ページの作成:「PlayStation Suite SDKを用いたプログラムの基本構造は、以下のようになっている。 <source lang="csharp"> namespace PssApp01 { using Sys...」
[[PlayStation Suite SDK]]を用いた[[プログラム]]の基本構造は、以下のようになっている。
<source lang="csharp">
namespace PssApp01
{
using System;
using System.Collections.Generic;

using Sce.Pss.Core;
using Sce.Pss.Core.Environment;
using Sce.Pss.Core.Graphics;
using Sce.Pss.Core.Input;

public class AppMain
{
private static GraphicsContext graphics;

public static void Main (string[] args)
{
Initialize ();

// ゲームループ
while (true) {
SystemEvents.CheckEvents ();
Update ();
Render ();
}
}

public static void Initialize ()
{
graphics = new GraphicsContext ();
}

public static void Update ()
{
// ここにキー入力やキャラの移動、当たり判定などの
// ゲーム内容を書く
}

public static void Render ()
{
graphics.SetClearColor (0.0f, 0.0f, 0.0f, 0.0f);
graphics.Clear ();

// ここに描画処理を書く

graphics.SwapBuffers ();
}
}
}
</source>

== Mainメソッド ==
[[PssStudio]]で新規プロジェクトを作成すると、AppMain.csファイルが自動生成され、その中のAppMainクラスに[[エントリーポイント]](起点)となるMainメソッドがある。

以下のような記述が[[エントリーポイント]](起点)として必ず1個ある、というは[C Sharp|C#]]の基礎中の基礎なので、深く考えずにこういうものだと覚えておけばいい。
<source lang="csharp">
public static void Main (string[] args)
{
}
</source>

なお、複数のクラスにMainメソッドがある場合は[[PssStudio]]でプロジェクトの設定画面を開き「ビルド」→「一般」→「Mainクラス」で選択できるが、まず使わない。なお、Mainメソッドが複数あるのに上記設定をしていないとビルドエラーとなる。

== Initializeメソッド ==
Initializeメソッドの中では主に初期化に関する処理を記述する。

== whileループ ==
while (true)、いわゆる[[永久ループ]]。
ゲームプログラミングの世界では[[ゲームループ]]と呼ばれるもので、基本的に「ゲームメイン処理」、「画面描画」、「[[ウェイト]](フレームレート調整)」を延々と繰り返すことでゲームが進行するようになっている。

=== [[SystemEvents.CheckEventsメソッド (Sce.Pss.Core.Environment)]] ===旧来の家庭用ゲーム機であればゲームのみが動くのが一般的であり上記の3つだけで良かったが、近年のPCに近い環境ではアプリ切り替えなどにより、ゲームを一時中断させられたりするため、定期的にシステムのイベントのチェックを行う必要がある。

本気モードの場合は、チェックした内容で細かい制御を書いたりする。

=== UpdateメソッドとRenderメソッド ===
Updateメソッドには主にCPUを使う計算処理を書く。
いわゆるゲームメイン処理。
ようするにキー入力やキャラクターの移動、[[当たり判定]]などを行う。

Renderメソッドには主にGPUを使う描画処理を書く。

「何でUpdateとRenderの2つのメソッドを分けてるの?意味ないじゃん。[[デザインパターン]]の一種?」と思われるかもしれないが、この例では[[シングルスレッド]]で処理しているが、本気モードのときはゲームメイン処理が重いときは描画処理をすっ飛ばしたり([[フレームスキップ]])、ゲームメイン処理と描画処理で[[スレッド]]をわけたりする(いわゆる[[マルチスレッド]])のが一般的だからである。つまり本気モードへの移行時に[[ソースコード]]の書き換えを最小限にするためである。

=== [[GraphicsContext.SwapBuffersメソッド (Sce.Pss.Core.Graphics)]] ===
SwapBuffersメソッドは[[垂直同期]]のタイミングで[[フレームバッファ]]を切り替える。いわゆる[[ダブルバッファ]]。

「垂直同期のタイミングで」というのがミソで、PlayStation Vitaでは[[垂直同期]]が約16.6ミリ秒、1秒間に60回の画面書き換えを行うが、前回のSwapBuffersメソッドの呼び出しから16.6ミリ秒以内であれば[[垂直同期]]が来るまで待つ。つまり、処理が軽い場合は16.6ミリ秒になるように調整される。言い換えれば、描画処理を行うと自動的に[[ウェイト処理]]も行ってくれる。

なお、Android端末では、秒間60[[フレーム]]ではない機種や、「垂直同期なにそれ?」なクソ機種が大量に存在するので必ずしもこの限りではない。なめらかさがちょっと損なわれるくらいなのであんまり神経質になる必要はないと思うが。

また、「処理が軽い場合」の「ウェイト処理」は自動的にやってくれるが、「処理が重い場合」の「[[フレームスキップ]]」は自動でやってくれないので注意すること。

== 備考 ==
このドキュメントは[[PlayStation Suite SDK]]付属のドキュメントを個人的にわかりやすいように万人向け解説部分を改悪したものである。よって公式ドキュメントも見ろ。

== 関連項目 ==
* [[PlayStation Suite]]
** [[PlayStation Suite SDK]]
*** [[PlayStation Suite SDK/プログラムの基本構造]]

== 参考文献 ==
<references/>

== 外部リンク ==

{{stub}}
匿名利用者

案内メニュー