個人的なメモ

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

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

ご注意

こちらは、Cocos Sharp 1.6.2 までの場合の方法です。
Cocos Sharp 1.7.1 以上をお使いの場合、以下をご覧下さい。

hiro128.hatenablog.jp



今回は iOS でタイトル画面を出します。

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

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

f:id:hiro128:20160304162646p:plain

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

f:id:hiro128:20160304162648p:plain

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

f:id:hiro128:20160304162649p:plain

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

f:id:hiro128:20160304162650p:plain

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

using CocosSharp;

namespace CocosSharpGameSample.Core
{
	public class TitleLayer : CCLayerColor
	{

		public TitleLayer()
			: base()
		{
		}

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

	}
}

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

f:id:hiro128:20160304162651p:plain

SampleGameApplicationDelegate.cs では、
ゲーム上の仮想解像度であるデザイン解像度の設定、
シーンにタイトル画面の作成、セット、
アプリケーションの一時停止、再開時の処理を行ないます。

using CocosDenshion;
using CocosSharp;

namespace CocosSharpGameSample.Core
{
	public class SampleGameApplicationDelegate : CCApplicationDelegate
	{

		public override void ApplicationDidFinishLaunching(CCApplication application, CCWindow mainWindow)
		{
			// デザイン解像度設定
			CCScene.SetDefaultDesignResolution(1280f, 720f, CCSceneResolutionPolicy.ShowAll);
			// シーンにタイトル画面の作成、セット
			var scene = new CCScene(mainWindow);
			var titleLayer = new TitleLayer();
			scene.AddChild(titleLayer);
			// シーン開始
			mainWindow.RunWithScene(scene);
		}

		public override void ApplicationDidEnterBackground(CCApplication application)
		{
			// アプリケーションを一時停止する
			application.Paused = true;
			// BGMを一時停止する
			CCSimpleAudioEngine.SharedEngine.PauseBackgroundMusic();
		}

		public override void ApplicationWillEnterForeground(CCApplication application)
		{
			// アプリケーションを再開する
			application.Paused = false;
			// BGMを再開する
			CCSimpleAudioEngine.SharedEngine.ResumeBackgroundMusic();
		}

	}
}

最後に CocosSharpGameSample.iOS プロジェクトの AppDelegate.cs を変更し
ゲームの起動を行い、画面の向きを LandscapeLeft に固定します。

f:id:hiro128:20160304162652p:plain

using System;
using Foundation;
using UIKit;
using CocosSharp;
using CocosSharpGameSample.Core;

namespace CocosSharpGameSample.iOS
{
	[Register("AppDelegate")]
	public partial class AppDelegate : UIApplicationDelegate
	{

		public override bool FinishedLaunching(UIApplication app, NSDictionary options)
		{
			// ゲームをを起動する。
			var application = new CCApplication();
			application.ApplicationDelegate = new SampleGameApplicationDelegate();
			application.StartGame();
			return true;
		}

		// 画面の向きを LandscapeLeft に固定
		[Export("application:supportedInterfaceOrientationsForWindow:")]
		public UIInterfaceOrientationMask GetSupportedInterfaceOrientations(UIApplication application, IntPtr forWindow)
		{
			return UIInterfaceOrientationMask.LandscapeLeft;
		}

	}
}

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

f:id:hiro128:20160304162653p:plain

f:id:hiro128:20160304162654p:plain

今回はここまでです。