「ゲーム」タグのついた投稿

タイトル通りですが、8月末に行われたノベじゃむと言うイベントで制作した「ヒミツのおまじない」と言うゲームをGoogle Playにて配信開始しました!

scr0

リンク:

https://play.google.com/store/apps/details?id=com.Studio6Pm.Omajinai

 

内容としてはコテコテのノベルゲームで、話も学園、男女幼馴染、「(校長)占い」という様なベタな感じになってます(最後は違う?)。

 

ゲームジャムでからの変更点は殆ど無く、基本的にはバグ修正、個人的に宴を弄って遊んで実装したオマケ機能、1枚イラスト追加になっています。

シナリオは誤字修正ぐらいになっているので、初対面でも有能な人たち(自分以外)が集まれば30時間以内でこのレベルの物も作れる時が有るんだ!みたいな感じになっていますので、良かったら遊んでみてください。

何か意見や感想等ありましたら、コメントください。

えー、はい、タイトル通りPlayStation Mobile (Vita専用)にて “Life Born” と言うゲームを配信開始しました!

 

このゲームは元々PlayStation Mobile GameJam 2013 Winter にて作られたゲームで、この度作り直して配信開始しました!

 

動画です:

 

ゲームのページです:

 – http://www.jp.playstation.com/psn/psm/title/#!0517

 

良かったらやってみてください m_ _m

あと感想、意見等があればコメント頂けましたら嬉しいです。

 

あ、ちなみにこのゲームはFarmFury!等を配信している Max Neet Gamesとは別件です

 

今日Vectorにて、Tetrangle(テトラングル)というミニゲームを公開しました。

このゲームは2年近く前に某大会で24時間で作ったゲームのバグを直し、一部機能を追加したり変更したものです。

 

ゲームの内容はQixとテトリスを合わせたようなゲームです。ゲーム内で空間を切り取り、切り取った空間をブロックに変換し積み上げるゲームです(多分動画を見た方がかなりわかりやすいです)。

 

大会で作ったバージョンの動画です:

 

現在のバージョンはここからダウンロード出来ます:

–       http://www.vector.co.jp/soft/winnt/game/se494765.html

 

不具合や感想があったら是非コメントかメールをください m_ _m

今回は2Dゲーム専用のカメラの作り方を紹介します。

 

まず、カメラに必要なメンバを宣言します。今回使うのは、カメラの位置、画面の中心点、ズーム値、カメラがどの位回転しているかを表す値、そして見える範囲です。

 

public class Camera2D
{
Vector2 m_position = Vector2.Zero;
Vector2 m_zoom = Vector2.One;
Rectangle m_visibleArea;
float m_rotation = 0.0f;
Vector2 m_screenPosition = Vector2.Zero;

 

次は、コンストラクタ内で初期化です。引数のwidthとheightは描画領域の大きさです(画面全体の場合は画面の横幅と、縦幅)。

 

public Camera2D(int width, int height)
{
m_visibleArea = new Rectangle(0, 0, width, height);
m_position = new Vector2(width / 2, height / 2);
Position = m_position;
m_screenPosition = new Vector2(width / 2, height / 2);
        }

 

初期化の後は、カメラの位置の移動処理です。まず、位置情報のアクセサは、set時に位置の変更だけでなく、見える範囲の変更も同時にしています。後は、メソッドを作る必要性は無いですが、移動する量を渡して移動するメソッドを作りました。

 

public Vector2 Position
{
get { return m_position; }
set
{
m_position = value;
m_visibleArea.X = (int)(m_position.X - m_visibleArea.Width / 2);
m_visibleArea.Y = (int)(m_position.Y - m_visibleArea.Height / 2);
}
}

public void Move(float x, float y)
{
Position = new Vector2(m_position.X + x, m_position.Y + y);
}

 

最後に、実際にカメラを使っての描画方法です。描画の時には、カメラの持つ情報から行列を作製し、spritebatch.Begin()メソッドのパラメーターに渡します。これにより、spritebatch.End()メソッドが呼ばれるまでの間に行われたspritebatch.Draw()メソッドにはカメラの情報が適用されます。
行列の作製にはまず、位置と画面の中心点を2次元用のベクトルから、3次元用のベクトルに変更します。次に、カメラの持っている情報を組み合わせて行列を作ります。
組み合わせは、移動用行列(-カメラの位置)x スケーリング用の行列(ズーム) x 回転行列(角度) x移動用行列 (画面の中心地)です。最初に移動するのは、カメラの周りを回転したり、サイズ変更したりする為です。
行列同士の掛け算は、順番で結果が変わるので、この順番を守らないと、違う結果になります。ちなみに、3Dモデルとかの移動時にも計算する順番はスケーリング x 回転 x 移動になります。

 

public virtual Matrix GetMatrix()
{
Vector3 pos = new Vector3(m_position, 0);
Vector3 screenPos = new Vector3(m_screenPosition, 0.0f);

return Matrix.CreateTranslation(-pos) *
Matrix.CreateScale(m_zoom.X, m_zoom.Y, 1.0f) *
Matrix.CreateRotationZ(m_rotation) *
Matrix.CreateTranslation(screenPos);
}

 

後はカメラのインスタンスを作り、spritebatch.Begin()を使うときに行列を作るだけです。

 

protected override void Draw()
{
GraphicsDevice.Clear(Color.CornflowerBlue);

//ここの第4引数で、カメラの行列を渡す</pre>
<pre>spriteBatch.Begin(SpriteSortMode.Deferred,
                  BlendState.AlphaBlend,
                  SamplerState.LinearClamp,
                  DepthStencilState.None,
                  RasterizerState.CullCounterClockwise,
                  null,
                  camera.GetMatrix() );

// ...カメラ内の描画
spriteBatch.End();

spriteBatch.Begin();
// ...カメラ外の描画
spriteBatch.End();
}

 

このカメラクラスの使用例です。レベルエディタのゲーム場面の描画部分でカメラが使われています。

以上です。

 

6日目には、試合終了後にまたプレイできるようにする処理、雛から鶏への進化の処理、そしてエフェクトを実装し始めました。7日目には、エフェクト用のシステムを作り終え、簡単なエフェクトを実装しました。

うーん、次はどうしよう・・・