ページ「Xamarin.Mac/NSApplicationのサブクラスを使う」と「リセットマラソン」の間の差分

提供: MonoBook
< Xamarin.Mac(ページ間の差分)
ナビゲーションに移動 検索に移動
(153.174.184.145 (トーク) による版 6178 を取り消し)
 
imported>Administrator
(ページの作成:「'''リセットマラソン'''とは、ゲームにおいて、初期キャラクターなどが乱数で決定する場合に、目標物が出現するまでリセッ...」)
 
1行目: 1行目:
[[MonoMac]]および[[Xamarin.Mac]]で[[AppKit]]のNSApplicationのサブクラスを利用したい場面もあることだろう。多くの場合はNSApplicationDelegateで事足りるだろうが、稀にすべてのイベントをトラップしたい場面などではNSApplicationのサブクラスを作る必要がある。
+
'''リセットマラソン'''とは、ゲームにおいて、初期キャラクターなどが乱数で決定する場合に、目標物が出現するまでリセットしまくることをいう。
  
==実装1==
+
リセットマラソンはウィザードリィなどで有名で、高いボーナスポイントが得られるまで延々とキャラクター作成を繰り返し数時間を擁するなどということもあった。
===NSApplicationのサブクラスを作る===
 
Register属性で指定した名前は後ほどInfo.plistで利用される。凄く重要。クラス名と同じにしておくと紛らわしくないと思われる。
 
  
NSApplicationがデフォルトコンストラクタを持たない関係でサブクラスにもコンストラクタがないと[[コンパイル]]が通らないが、[[デバッガ]]で追ってみた限りでは呼ばれている気配はない。そのためAwakeFromNibメソッドをオーバーライドして初期化している。これでいいのかは知らん。
+
最近のiOSやAndroid向けのスマホゲームでのリセットは「アプリを消して再インストール」が基本となるため、リセマラ大前提の作りにするとアプリストアにおけるダウンロード数が伸びる(Androidではデータ全消しでもいける)。ただし、あまりの面倒臭さに利用者がゲーム本編を始めるまえに離れる原因にもなる両刃の剣である。
<source lang="csharp">
 
    using System;
 
 
 
    using Foundation;
 
    using AppKit;
 
 
 
    [Register("App")]
 
    public class App : NSApplication
 
    {
 
        public App(IntPtr handle) : base(handle) {}
 
 
 
        public App(NSCoder coder) : base(coder) {}
 
 
 
        /// <summary>
 
        /// 初期化はAwakeFromNibのタイミングでいいのか?
 
        /// 調査中
 
        /// </summary>
 
        public override void AwakeFromNib()
 
        {
 
            base.AwakeFromNib();
 
            this.Delegate = new AppDelegate();
 
        }
 
 
 
        /// <summary>
 
        /// こいつをオーバーライドすればほぼ全てのイベントが取れる
 
        /// </summary>
 
        /// <param name="theEvent">The event.</param>
 
        public override void SendEvent(NSEvent theEvent)
 
        {
 
            base.SendEvent(theEvent);
 
        }
 
    }
 
</source>
 
 
 
===Info.plistに「Principal class」を設定する===
 
Info.plistを開き、Xamarin Studio下部の「ソース」タブを選択する。Info.plistがない場合はファイルを追加する(新規追加ダイアログでは「Application Manifest」という名称になっているはず)。
 
 
 
プロパティの一覧が列挙されるので、プロパティ「Principal class」に「String」型で前述のRegister属性で付けた名前を入力する(この例であれば「App」)。プロパティ「Principal class」がない場合はリスト下部の「Add new entry」を選べば新しい行が追加される。
 
 
 
===エントリポイントを書き換える===
 
Xamarin Studioで「空のプロジェクト」を作ると初期値でこんな感じになっている。
 
<source lang="csharp">
 
    static class MainClass
 
    {
 
        static void Main(string[] args)
 
        {
 
            NSApplication.Init();
 
 
 
            var application = NSApplication.SharedApplication;
 
            application.Delegate = new AppDelegate();
 
            application.Run();
 
        }
 
    }
 
</source>
 
 
 
 
 
これを以下のように書き換える。なお「空のプロジェクト」ではなく「Cocoa」を選ぶと最初からこうなっている。
 
<source lang="csharp">
 
    using System;
 
    using AppKit;
 
 
 
    static class MainClass
 
    {
 
        static void Main(string[] args)
 
        {
 
            NSApplication.Init();
 
            NSApplication.Main(args);
 
        }
 
    }
 
</source>
 
 
 
==関連項目==
 
 
 
==参考文献==
 
{{reflist}}
 
 
 
{{stub}}
 
 
 
[[category:Xamain.Mac]]
 
[[category:MonoMac]]
 

2018年2月7日 (水) 04:52時点における版

リセットマラソンとは、ゲームにおいて、初期キャラクターなどが乱数で決定する場合に、目標物が出現するまでリセットしまくることをいう。

リセットマラソンはウィザードリィなどで有名で、高いボーナスポイントが得られるまで延々とキャラクター作成を繰り返し数時間を擁するなどということもあった。

最近のiOSやAndroid向けのスマホゲームでのリセットは「アプリを消して再インストール」が基本となるため、リセマラ大前提の作りにするとアプリストアにおけるダウンロード数が伸びる(Androidではデータ全消しでもいける)。ただし、あまりの面倒臭さに利用者がゲーム本編を始めるまえに離れる原因にもなる両刃の剣である。