個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Microsoft MVP for Developer Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

Xamarin + Cocos Sharp で iOS, Android 対応のゲームを開発する手順 (3) iOS でタイトル画面を出す。 (Cocos Sharp 1.7 以降対応版)

はじめに

こんにちは、@hiro128_777です。
今回は、Cocos Sharp 1.7 以降に対応した iOS でタイトル画面を表示する方法についてご説明します。

※これから Cocos Sharp をはじめる方は 1.7 以降をご利用ください。

既に、Cocos Sharp 1.6.2 をご利用の場合以下をご覧下さい。
hiro128.hatenablog.jp

iOS でタイトル画面を表示

まずは、CocosSharpGameSample.iOS プロジェクトに CocosSharpGameSample.Core プロジェクトの参照を追加します。

CocosSharpGameSample.iOS プロジェクトの参照設定を右クリックし、参照の追加をクリックします。

f:id:hiro128:20170131204236p:plain

CocosSharpGameSample.Core にチェックを入れ、OKをクリックします。

f:id:hiro128:20170131204256p:plain

次に CocosSharpGameSample.iOS プロジェクトの Resources/Images/Title/ にタイトル画面の画像を配置します。
画像ファイルのビルドアクションは「BundleResource」にします。

f:id:hiro128:20170131204338p:plain
↑この画像を使っています。

f:id:hiro128:20170131204318p:plain

次に CocosSharpGameSample.Core プロジェクトの Layers に TitleLayer.cs を追加します。

f:id:hiro128:20170131204455p:plain

TitleLayer.cs では、画面にタイトル画像を配置します。

using CocosSharp;

namespace CocosSharpGameSample.Core
{
	public class TitleLayer : CCLayerColor
	{

		protected override void AddedToScene()
		{
			base.AddedToScene();
			// タイトル画像を配置
			var title = new CCSprite("/Resources/Images/Title/Title.png", null);
			title.Position = new CCPoint(ContentSize.Center.X, 200);
			AddChild(title);
		}

	}
}

次に CocosSharpGameSample.Core プロジェクトの ルートに GameDelegate.cs を追加します。

f:id:hiro128:20170131204513p:plain

GameDelegate.cs では、
ゲーム上の仮想解像度であるデザイン解像度の設定、
シーンにタイトル画面の作成、セットの処理、ゲームの開始処理を行ないます。

using System;
using System.Collections.Generic;
using CocosSharp;

namespace CocosSharpGameSample.Core
{
	public static class GameDelegate
	{
		public static void LoadGame(object sender, EventArgs e)
		{
			var gameView = sender as CCGameView;
			if (gameView == null) { return; }

			// デザイン解像度設定
			gameView.DesignResolution = new CCSizeI(224, 380);
			gameView.ResolutionPolicy = CCViewResolutionPolicy.ShowAll;

			// コンテンツパス設定
			var contentSearchPaths = new List<string>() { "Images", "Sounds" };
			gameView.ContentManager.SearchPaths = contentSearchPaths;

			// タイトル画面のシーン作成、セット
			var gameScene = new CCScene(gameView);
			gameScene.AddLayer(new TitleLayer());

			// ゲーム開始
			gameView.RunWithScene(gameScene);
		}
	}
}


次に CocosSharpGameSample.iOS プロジェクトのルートに MainView.cs を追加します。

f:id:hiro128:20170131204526p:plain

MainView.cs では、
UI上にゲーム画面のコントロールであるCCGameViewを配置し、ゲームの起動処理とひも付けます。

using CoreGraphics;
using UIKit;
using CocosSharp;
using CocosSharpGameSample.Core;

namespace CocosSharpGameSample.iOS
{
	public class MainView : UIViewController
	{
		CCGameView GameView { get; set; }

		public override void ViewDidLoad()
		{
			base.ViewDidLoad();

			GameView = new CCGameView(new CGRect(0, 20,
				UIScreen.MainScreen.ApplicationFrame.Width,
				UIScreen.MainScreen.ApplicationFrame.Height));
			GameView.ViewCreated += GameDelegate.LoadGame;
			View.AddSubview(GameView);
		}

		public override void ViewWillDisappear(bool animated)
		{
			base.ViewWillDisappear(animated);

			if (GameView != null)
				GameView.Paused = true;
		}

		public override void ViewDidAppear(bool animated)
		{
			base.ViewDidAppear(animated);

			if (GameView != null)
				GameView.Paused = false;
		}

		public override void DidReceiveMemoryWarning()
		{
			base.DidReceiveMemoryWarning();
		}

	}
}

最後に CocosSharpGameSample.iOS プロジェクトの AppDelegate.cs を変更し
アプリの起動時に、ゲーム画面を含むUIが表示されるようにします。

f:id:hiro128:20170131204539p:plain

using Foundation;
using UIKit;

namespace CocosSharpGameSample.iOS
{
	[Register("AppDelegate")]
	public partial class AppDelegate : UIApplicationDelegate
	{
		public override UIWindow Window
		{
			get;
			set;
		}

		public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
		{

			Window = new UIWindow(UIScreen.MainScreen.Bounds);

			var viewController = new MainView();

			Window.RootViewController = viewController;
			Window.MakeKeyAndVisible();

			return true;
		}

	}
}

以上でプログラムが完成しましたので、Debug で起動するとタイトル画面が表示されます。

f:id:hiro128:20170131204604p:plain

今回はここまでです。