「Xamarin.AndroidのViewとMonoGameを混在させる」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
imported>Administrator |
||
3行目: | 3行目: | ||
たとえばMonoGameには「文字入力」などという軟弱な概念はないので日本語入力対応のテキストボックスを使いたい場合や、[[Google AdMob]]で[[バナー広告]]を表示したい場合などが考えられる。 | たとえばMonoGameには「文字入力」などという軟弱な概念はないので日本語入力対応のテキストボックスを使いたい場合や、[[Google AdMob]]で[[バナー広告]]を表示したい場合などが考えられる。 | ||
− | なお、この方法は[[iOS]]対応などのマルチプラットフォーム対応などクソくらえである。 | + | なお、この方法は[[iOS]]対応などのマルチプラットフォーム対応などクソくらえである。[[ググる]]と[[Xamarin.Forms]]と[[MonoGame]]で同様のことをやりたいという事例が[[stackoverflow.com]]などで散見されたが、その解決策は「[[CocosSharp]]を使え」というものであった。CocosSharpを軽く触ってみたが、[[物理演算]]のために[[固定フレームレート]]にしたいが設定方法がわからない、[[3Dモデル]]の描画方法がわからないなど、わからないことだらけで撃沈した。 |
== 実装例 == | == 実装例 == | ||
− | 新規プロジェクトを作った直後に自動生成される[[ソースコード]] | + | 新規プロジェクトを作った直後に自動生成される[[ソースコード]]はこんな感じ。アクティビティにいきないMonoGameのViewを追加している。MonoGameも普通のViewじゃん。 |
<source lang="csharp"> | <source lang="csharp"> | ||
38行目: | 38行目: | ||
g.Run(); | g.Run(); | ||
} | } | ||
− | </source> | + | </source>まじかよ。うごいた。 |
− | |||
− | |||
[[category: Xamarin.Android]] | [[category: Xamarin.Android]] | ||
[[category: MonoGame]] | [[category: MonoGame]] |
2018年8月30日 (木) 05:21時点における版
MonoGameはものすごく低レベルなAPI群なので、Xamarin.Androidの各種View(各種UI)を混在させたいことも多い。
たとえばMonoGameには「文字入力」などという軟弱な概念はないので日本語入力対応のテキストボックスを使いたい場合や、Google AdMobでバナー広告を表示したい場合などが考えられる。
なお、この方法はiOS対応などのマルチプラットフォーム対応などクソくらえである。ググるとXamarin.FormsとMonoGameで同様のことをやりたいという事例がstackoverflow.comなどで散見されたが、その解決策は「CocosSharpを使え」というものであった。CocosSharpを軽く触ってみたが、物理演算のために固定フレームレートにしたいが設定方法がわからない、3Dモデルの描画方法がわからないなど、わからないことだらけで撃沈した。
実装例
新規プロジェクトを作った直後に自動生成されるソースコードはこんな感じ。アクティビティにいきないMonoGameのViewを追加している。MonoGameも普通のViewじゃん。
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
var g = new Game1();
SetContentView((View)g.Services.GetService(typeof(View)));
g.Run();
}
MonoGameもXamarin.AndroidのViewの一種でした。ならば普通にAndroid.Widget.Layoutに噛ませばいいんじゃね。
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// レイアウトを手動で構築する
var layout = new FrameLayout( this );
SetContentView( layout );
// MonoGameが動くAndroid.Views.Viewを取得する。
// Game1はMicrosoft.XNA.Framework.Gameクラスの派生クラス。
var g = new Game1();
var gameView = g.Services.GetService<View>();
layout.AddView( gameView );
// ゲームループ開始
g.Run();
}
まじかよ。うごいた。