読者です 読者をやめる 読者になる 読者になる

個人的なメモ 〜Cocos Sharp 情報を中心に‥

Tomohiro Suzuki @hiro128_777 のブログです。Cocos Sharp の事を中心に書いています。 Microsoft MVP for Visual Studio and Development Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

Cocos Sharp 画面遷移のアニメーション (3) CCTransitionFlipX, CCTransitionFlipY

はじめに

こんにちは、@hiro128_777です。
今回も、前回に引き続き Cocos Sharp の画面遷移の際のアニメーションについてご紹介します。

前回はCCTransitionFlipAngularのアニメーションをご紹介しました。
hiro128.hatenablog.jp

今回はCCTransitionFlipXCCTransitionFlipYをご紹介します。

FlipX, FlipY はそれぞれ「X軸で裏返す」「Y軸で裏返す」と言う感じのアニメーションになります。

では、アニメーションを実際に見てみましょう。

画面遷移の際のアニメーション ~CCTransitionFlipX, CCTransitionFlipY~

CCTransitionFlipX (CCTransitionOrientation.LeftOver)

f:id:hiro128:20170328185121g:plain

CCTransitionFlipX (CCTransitionOrientation.RightOver)

f:id:hiro128:20170328185203g:plain

X軸で裏返すので、CCTransitionOrientation.DownOverCCTransitionOrientation.UpOverは意味がありません。
一応動作はしますがCCTransitionOrientation.LeftOverまたはCCTransitionOrientation.RightOverと同じ動作になり無意味です。

CCTransitionFlipY (CCTransitionOrientation.DownOver)

f:id:hiro128:20170328185345g:plain

CCTransitionFlipY (CCTransitionOrientation.UpOver)

f:id:hiro128:20170328185423g:plain

Y軸で裏返すので、CCTransitionOrientation.LeftOverCCTransitionOrientation.RightOverは意味がありません。
一応動作はしますがCCTransitionOrientation.DownOverまたはCCTransitionOrientation.UpOverと同じ動作になり無意味です。

というわけで、色々なアニメーションがありますので、皆さんも、色々試してみてください!

では、今回はここまでです。

Microsoft Most Valuable Professional Award を受賞いたしました。

おしらせ

こんにちは、@hiro128_777です。

この度、2017年3月に、Visual Studio and Development Technologies カテゴリーにて Microsoft Most Valuable Professional Award を受賞いたしました!!


正直、とても嬉しいです!!


身に余る光栄ですが、今後よりいっそう頑張っていきたいと決意を新たにしました。


そして、今回の受賞は私一人の力ではなく、支えてくださった大勢の方々の支援あってのことと痛感しております。このブログを読んでいただいたみなさま、JXUGのみなさま、MVPを目指したときに相談に乗って頂きました先輩MVPの方々、そして私の業務の負担を軽くするために協力頂いた職場のみなさま、家庭の時間を減らすことに協力してくれた妻、休日に遊ぶのを我慢してくれた息子、みなさまご支援本当にありがとうございました。


先輩MVPの方々と比べるとまだまだ未熟者ですが、よりいっそう精力的に活動していきたいと思います。


繰り返しになりますが、みなさま本当にありがとうございました。

Cocos Sharp 画面遷移のアニメーション (2) CCTransitionFlipAngular

Xamarin Cocos Sharp

はじめに

こんにちは、@hiro128_777です。
今回も、前回に引き続き Cocos Sharp の画面遷移の際のアニメーションについてご紹介します。

前回は Fade 系のアニメーションをご紹介しました。
hiro128.hatenablog.jp

今回は CCTransitionFlipAngular をご紹介します。

FlipAngular を日本語にすると「角度をつけて裏返す」と言う感じの意味になります。

では、アニメーションを実際に見てみましょう。

画面遷移の際のアニメーション ~CCTransitionFlipAngular~

CCTransitionFlipAngular (CCTransitionOrientation.DownOver)

f:id:hiro128:20170228185545g:plain

CCTransitionFlipAngular (CCTransitionOrientation.LeftOver)

f:id:hiro128:20170228185953g:plain

CCTransitionFlipAngular (CCTransitionOrientation.RightOver)

f:id:hiro128:20170228190044g:plain

CCTransitionFadeBL (CCTransitionOrientation.UpOver)

f:id:hiro128:20170228190125g:plain


というわけで、色々なアニメーションがあるので、ぜひ、色々試してみてください。

今回はここまでです。

Cocos Sharp 画面遷移のアニメーション (1) Fade 系

Xamarin Cocos Sharp

はじめに

こんにちは、@hiro128_777です。
今回は、Cocos Sharp 画面遷移の際のアニメーションについてご紹介します。

画面遷移の際のアニメーションは非常にたくさんの種類がありますが、今回はその中から Fade 系の効果をご紹介します。

画面遷移の際のアニメーション ~Fade 系~

CCTransitionFade

フェードアウト→いったん真っ暗になる→フェードイン

f:id:hiro128:20170221183321g:plain

CCTransitionCrossFade

フェードアウト→(次のシーンが重なりながら)フェードイン

f:id:hiro128:20170221183358g:plain

CCTransitionFadeTR

左下から右上(Top Right)へ分割された小さい正方形で切り替わる

f:id:hiro128:20170221183415g:plain

CCTransitionFadeBL

右上から左下(Bottom Left)へ分割された小さい正方形で切り替わる

f:id:hiro128:20170221183443g:plain

CCTransitionFadeUp

下から上へ横に分割された長方形で切り替わる

f:id:hiro128:20170221183515g:plain

CCTransitionFadeDown

上から下へ横に分割された長方形で切り替わる

f:id:hiro128:20170221183526g:plain



このほかにも色々なアニメーションがあるので、今後順次紹介していく予定です。

実際に使ってみるとなかなか面白いので、是非、色々試してみてください。

今回はここまでです。


次回は CCTransitionFlipAngular をご紹介しています。よろしければこちらもご覧下さい。
hiro128.hatenablog.jp

Xamarin + Cocos Sharp で iOS, Android 対応のゲームを開発する手順 (6) 画面遷移 (Cocos Sharp 1.7 以降対応版)

Xamarin Cocos Sharp

はじめに

こんにちは、@hiro128_777です。
今回は、Cocos Sharp 1.7 以降に対応した画面遷移の方法についてご説明します。

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

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

画面遷移の方法

今回は画面遷移を行ないます。

画面上をタップすると、次の画面へと遷移するシナリオです。

CocosSharpGameSample.Core プロジェクトに、TitleLayerGameLayerを作成します。

f:id:hiro128:20170215205315p:plain



遷移がわかりやすいように、遷移前の画面をオレンジ色、遷移の画面を水色に設定します。

遷移前の画面 TitleLayer

public TitleLayer()
	: base(new CCColor4B(0xFF, 0xA3, 0x2B))// オレンジ色に設定
{
}

遷移後の画面 GameLayer

public GameLayer()
	: base(new CCColor4B(0x66, 0x84, 0xFF))//水色に設定
{
}

コンストラクタでbaseクラスの引数に16進数でRGBを与えれば色指定ができます。

最初の画面TitleLayerに画面のタップを検出するイベントリスナーを作成し、イベントハンドラで画面遷移するように設定します。

var eventListener = new CCEventListenerTouchOneByOne();

// OnTouchBegan で true を返却しないと、OnTouchEndedが発動しない。
eventListener.OnTouchBegan = (t, e) => true;

eventListener.OnTouchEnded = (t, e) =>
{
	// 移動先のシーン(ゲーム画面)を作成
	var newScene = new CCScene(GameView);

	var gameLayer = new GameLayer();
	newScene.AddChild(gameLayer);

	// シーン切り替え時の効果を設定
	CCTransitionScene transitionScene = new CCTransitionFade(4.0f, newScene);

	// ゲーム画面へシーン切り替え
	Director.ReplaceScene(transitionScene);
};
AddEventListener(eventListener, this);

このときOnTouchBeganイベントのハンドラでtrueを返しておかないと、OnTouchEndedイベント自体が発火しなくなるので、
OnTouchBeganイベント時に何もしないとしても、ハンドラを作成し、trueを返すようにしておきます。

OnTouchEndedイベントでは、次の画面への遷移を行ないます。
画面遷移するには、新しいCCSceneを作成し、DirectorクラスのReplaceSceneをコールします。

CCTransitionSceneは画面遷移時の効果で、CCTransitionFade以外にもいくつか効果が準備されいます。

コードのまとめ

TitleLayerは下記のようになります。

using CocosSharp;

namespace CocosSharpGameSample.Core
{
	public class TitleLayer : CCLayerColor
	{

		public TitleLayer()
			: base(new CCColor4B(0xFF, 0xA3, 0x2B))// オレンジ色に設定
		{
		}

		protected override void AddedToScene()
		{
			base.AddedToScene();

			var eventListener = new CCEventListenerTouchOneByOne();

			// OnTouchBegan で true を返却しないと、OnTouchEndedが発動しない。
			eventListener.OnTouchBegan = (t, e) => true;

			eventListener.OnTouchEnded = (t, e) =>
			{
				// 移動先のシーン(ゲーム画面)を作成
				var newScene = new CCScene(GameView);

				var gameLayer = new GameLayer();
				newScene.AddChild(gameLayer);

				// シーン切り替え時の効果を設定
				CCTransitionScene transitionScene = new CCTransitionFade(4.0f, newScene);

				// ゲーム画面へシーン切り替え
				Director.ReplaceScene(transitionScene);
			};
			AddEventListener(eventListener, this);
		}

	}
}


GameLayerは下記のようになります。

using CocosSharp;

namespace CocosSharpGameSample.Core
{
	public class GameLayer : CCLayerColor
	{

		public GameLayer()
			: base(new CCColor4B(0x66, 0x84, 0xFF))//水色に設定
		{
		}

	}
}


以上でが完成しましたので、実行して画面上をタッチすると、次の画面へと遷移します。

f:id:hiro128:20170215205816g:plain

今回の内容はすべてPCLの範囲なので、iOS, Android どちらでも動作します。

今回はここまでです。

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

Xamarin Cocos Sharp

はじめに

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

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

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

Android でタイトル画面を表示する方法

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

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

f:id:hiro128:20170207202423p:plain

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

f:id:hiro128:20170207202430p:plain

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

f:id:hiro128:20170207202627p:plain

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

ゲームロジックは共用なので作成不要!

ゲームロジックは CocosSharpGameSample.Core プロジェクトにすでに作成済みのものを共用しますので作成不要です。

※Cocos Sharp では起動部分以外は共用できます!便利ですね!

Android のプロジェクトにゲーム起動のコードを記述

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

f:id:hiro128:20170207202654p:plain

using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Views;
using Android.Widget;
using CocosSharp;
using CocosSharpGameSample.Core;

namespace CocosSharpGameSample.Android
{
	[Activity(Label = "CocosSharpGameSample.Android"
		, MainLauncher = true
		, Icon = "@drawable/icon"
		, AlwaysRetainTaskState = true
		, LaunchMode = LaunchMode.SingleInstance
		, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden
	)]
	public class MainActivity : Activity
	{

		protected override void OnCreate(Bundle bundle)
		{
			base.OnCreate(bundle);

			// タイトルを非表示にする
			RequestWindowFeature(WindowFeatures.NoTitle);

			var linearLayout = new LinearLayout(this)
			{
				Orientation = Orientation.Vertical
			};

			// ゲーム表示用コントロール作成
			var gameView = new CCGameView(this);

			// ゲーム起動
			if (gameView != null)
				gameView.ViewCreated += GameDelegate.LoadGame;

			linearLayout.AddView(gameView);
			SetContentView(linearLayout);
		}

	}
}

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

f:id:hiro128:20170207202710p:plain

繰り返しになりますが、アプリケーションの起動部分以外は共用できますので iOS 版が作成済みの場合、非常に簡単に Android 版が作成できます。

今回はここまでです。

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

Xamarin Cocos Sharp

はじめに

こんにちは、@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

今回はここまでです。