uka.apple のすべての投稿

独創アプリ開発日記 209日目 環境に依存しないWindow

今私は、OSに依存しない開発環境の構築を目指しています。目指せ脱Windows10!Windows10嫌い。強制アップデート反対。無駄機能要らない。セキュリティパッチだけよこせ。

話を元に戻します。今私は、OSに依存しない開発環境の構築を目指しています。グラフィックを描画するOpenGLのコードはOSに依存しませんが、ウィンドウなどのUIに関しては、各OS固有のコードにどうしてもなってしまうと記憶していました。

が、OpenTKのGameWindowというクラスを使うと、OSに依存せずにUIを作成出来るという極秘情報を得ました!

いや、極秘情報じゃなくて、ぶっちゃけOpenTKでググりまくってたら出てきた情報なんですけど。

とりあえず今日はGameWindowに関して色々調べていました。あとは、開発するにあたってOpenGLのバージョンいくつを使うべきかを悩んでいました。Ubuntu18.04LTSの初期状態で入っていたバージョンの3.33.0でいいのかな?

独創アプリ開発日記 180〜208日目 プラットフォーム

はい、というわけでですね、読んでいる方は何がどういうわけかよくわからないと思うんですが、このブログは1日に1回必ず書く約束になっていて、書かないとしたら作者は死んでいることになっていたんですよね。

実は、この1ヶ月間は激動の1ヶ月間でですね、地球を離れ、辺境の惑星でロケットをつくっていたんです。
地球にいなかったわけですから、ある意味1ヶ月間死んでいたわけです。うん、約束は破っていないですね。

先日、無事ロケットを打ち上げて地球に帰還しましたので、今後の日々のブログ更新は復活予定です。まあ、まだ無限研究用工場建築作業が残っているのでたまに辺境の惑星に戻るかもしれませんが。

で、辺境の惑星で感動したことがあったのですが、この惑星は、WindowsとLinuxと、そしてMacでも、とても快適に高パフォーマンス!でさくさく動く惑星でして、スマホアプリばかり作っていた身としてはとても新鮮なものでした。LinuxやMacで動くのは感動したなぁ。もう、無駄新機能とバグ自動強制量産機能付のWindows10から脱出できるよヒャッホー。

次回作はいったんスマホを離れてWindows/Linux/Mac対応のマルチプラットフォーム対応にしようと思います。本当はブラウザ上で動くWebGLで作れれば一番楽な気がするのですが、まだパフォーマンスがいまいちだし、ブラウザいきなり落ちたりするし、特定のブラウザじゃなきゃ動かなかったりするし、操作性も悪い気がするんですよね。

Linux/Windows/Mac共通で、C#によりOpenGL開発が出来る環境を構築

昨日はUbuntu 18.04 LTSに.NET Core SDKをインストールしました。

本日は、この環境へVisual Studio Code と OpenTK.NETCoreをインストールしていきます。

目的は、Linux/Windows/Mac共通で、C#によりOpenGL開発が出来る環境を構築することです。

Ubuntuで構築していますが、今回構築した環境で書いたC#コードはWindowsやMacでも動くはずです。たぶん。動くはずだ。動くといいなあぁ。動かないかなぁ(希望)

1.https://code.visualstudio.com/downloadからVisual Studio Codeをダウンロードします。Linux(.deb)を選びます。

2.端末から以下を実行してVisual Studio Codeをインストールします。


sudo dpkg -i <ダウンロードしたファイル>.deb
sudo apt-get install -f # Install dependencies

3.端末から以下を実行してVisual Studio Code を立ち上げます。


code .

4.C#のプラグインをインストール

左側に並んでいる5個のアイコンのうち、一番下の「拡張機能」をクリックします。(Ctrl+Shift+Xでも可)
“C#”と打ち、表示された「C# for Visual Studio Code (powered by OmniSharp) Microsoft」をインストールします。

5.nugetをインストール

同じく「拡張機能」で “nuget” と打ちます。表示された「NuGet Package Manager」をインストールします

6.OpenTK.NETCoreをインストール

Ctrl+Shift+Pを押して “nuget” と打ちます。リストから「NuGet Package Manager: Add Package」を選択します。
続いて “OpenTK” と打ってリターンキーを押下します。表示されたリストから「OpenTK.NETCore」を選択します。すると、インストール可能なバージョンリストが表示されるので選びます。特に理由がなければいちばん新しいバージョンを選びます。

7.さあ!C#でOpenGL開発が可能な環境が出来ました!作ったコードはWindowsでもMacでも動くよ!

        *'“・* 。 
        |     `*。 
       ,。∩      *  
      + (´・ω・`) *。+゚ 
      `*。 ヽ、  つ *゚* 
       `・+。*・' ゚⊃ +゚ 
       ☆   ∪~ 。*゚ 
        `・+。*・ ゚ 

たぶんね!次回以降は実際にOpenGLのコードを書いて、そのコードがWindows/Macでも動くか検証していきます。

Ubuntu 18.04 LTS への.NET Core SDKインストール方法

Ubuntu 18.04 LTSが出たばかりで.NET Core SDKのインストール方法が公式に載ってなかったので、メモっときます。


sudo apt-key adv --keyserver packages.microsoft.com --recv-keys EB3E94ADBE1229CF

sudo apt-key adv --keyserver packages.microsoft.com --recv-keys 52E16F86FEE04B979B07E28DB02C46DF417A0893

sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-bionic-prod bionic main" > /etc/apt/sources.list.d/dotnetdev.list'

sudo apt-get update

sudo apt-get install dotnet-sdk-2.1.105 

以下、動作確認用です。プロジェクト用のディレクトリを作成して、その中で実行します。”Hello World!”と表示されれば成功です。


dotnet new console

dotnet run

((⊂(`ω´∩) しゅっしゅっ

2018/5/19追記:

公式のインストール手順出ました。

Register Microsoft key and feed


$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
$ sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
$ wget -q https://packages.microsoft.com/config/ubuntu/18.04/prod.list 
$ sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list

Install .NET SDK


$ sudo apt-get install apt-transport-https
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-2.1.200

独創アプリ開発日記 176〜179日目 次回アプリ構想その2

前回に引き続き、次のアプリのアイデア出しです。

・シミュレーションゲームである(SimCityなどに近い)

・マイクラのようなブロックで構成された世界である。ただし、マイクラのようなただっぴろい世界ではなく、特定の大きさを持つ浮遊大陸である。また、システムの複雑化を避けるためとりあえず高低差は無しとし、当面は平地の2Dフィールドのみとする。

・植物、昆虫、草食動物、肉食動物などが生息する。これらを個体と呼称する。

・個体は”生命の種”で生み出すことが出来る。任意のタイミングで個体を生み出すことが出来るが、個体を削除することは出来ない。環境を変えて、間接的に影響を与えるしかない。

・各個体はHPを持っており、植物は光合成で、昆虫や草食動物は植物を食べて、肉食動物は草食動物を食べてHPが増える。だいたい、植物を100個集めると草食動物が、草食動物を10匹集めると肉食動物が”生成”される。

・各個体は、それぞれ動作ロジックを持っている。(ねこマタの動作ロジックを高度化し、”関数”を作ってそれをサブルーチンのように呼び出せるようにする想定)。複製時、まれに一部ロジックが変化する。

・ロジックの変化により、より環境に適応するロジックならばその個体は増え、適さないロジックならばその個体は死滅する。

・自分のお気に入りの個体はストックすることができる。

・”生命の種”は一定時間で増える。また、各個体が一定時間ごとに生み出してくれる。強い個体ほど多く生み出す。

・ストックした個体を、他人の浮遊大陸に放つことができる。また、他人の浮遊大陸から個体を送り込まれることがある

・他人の浮遊大陸で個体を一定数以上にすると、”生命の種”を奪える。

・・・前に出したアイデアを、Factorioの考えを一部入れて強化した感じです。

これならパクリじゃない!

独創アプリ開発日記 175日目 次回アプリ構想

TextMangaも無事リリースしたし、次のアプリのアイデア出しです。

・アイデアその1

Factorioをパクって3D化する

・アイデアその2

食物連鎖を題材に、生産者(植物など)、消費者(草食動物など)、第2消費者(肉食動物など)などが生きる環境をシミュレーションする。システムはFactorioをパクる。植物を100個集めると草食動物が、草食動物を10匹集めると肉食動物が”生成”されるなど。

 
( ゚д゚) ・・・ 

自分で書いといてなんですが、一応、ほら、”独創”アプリを方針としてるんで・・・

Factorioをパクるのはちょっとまずいよなぁ・・・

独自の”食物連鎖”の部分のアイデアをもうちょっと膨らませて見たいと思います。

色々頭の中でアイデアがぐるぐる回っているんですが、それをシステムに落とし込む様子を思い浮かべたときに、何かゲームとして面白くないんじゃないか?と思うことの繰り返しなんですよね。しばらくはアイデアを文字にして、並べて見比べて色々検討したいと思います。

独創アプリ開発日記 174日目 開発者がクリアできないステージ

ねこマタに追加した新ステージ33ですが、いまだにクリア出来ません。

クリア出来ないけどリリースして良いですか?

・・・いやいやいやいや!ダメだよ!ダメだよ!!自分でクリア出来ないのに他人にやらせんなって話だよ!!!

開発者なんで、勝手に難易度下げれば簡単なんだけど、何か負けた気がする。もうちょっとでクリア出来そうなんだよなぁ・・・・

_(:3」∠)_

引き続き頑張ります。

なお、ステージ33と同時に、最小ステージ面積の対人戦ステージ”P”も同時リリース予定です。

独創アプリ開発日記 173日目 Split View

アプリ「TextManga」はiPadのSplitViewに対応しています。

開発時は特に意識していなかった!のですが、今確認したらちゃんと動いていました!!
すっかりSplitViewのこと忘れてたよ・・・ちゃんと動いてくれていてよかった。

        *’“・ 。*
        |     `*。
       ,。∩      * 
      + (´・ω・`) +゚*。
      `*。 ヽ、  つ **゚
       `・+。*・’ ゚⊃ +゚
       ☆   ∪~ *゚。
        `・。+*・ ゚ 

ブログ書きながら、簡単に貼り付けられます。便利。

⁽⁽٩(๑˃̶͈̀ ᗨ ˂̶͈́)۶⁾⁾ 

独創アプリ開発日記 172日目 Xcode9.3のワーニング対処

今日はアプリの開発ツールであるXcodeをバージョンアップ(9.3に)したらワーニングが出たのでその対処を行いました。

ワーニングとは、「このプログラムコードがちょっとおかしいよ?修正したほうがいいよ?修正しろや!」とプログラミング言語のベンダー(アップル)が開発者に対して警告するメッセージのことです。大抵、放っておいても動作しますが、運が悪いとアプリが落ちたりします。

アップルの提供するプログラムは頻繁に仕様(プログラムを作る約束事)が変更になり、開発者はそれに振り回させることが多々あります。macは古い規格の接続端子がバッサリ切り捨てられますよね?あんな感じです。

今回発生したワーニングは、デバイスが回転する際に利用するメソッド(特定の単位で処理を行うプログラム)に対して、「新しいもの用意したからそっち使ってや!一応、今回は古いやつでも使わしたるけど、そのうち使えんようなるからな!」と言うものです。

回転関連のメソッドって、過去にも2回くらい大幅に変わった記憶があります。「また変わったのかよ!いい加減にしろよ!ちゃんと考えてから長期に利用できる形で変えろよ!さすがアップル様だよ!」と一瞬思いましたが、どうやら今回の変更は、iOS8の頃から考えていた仕様変更らしいです。しっかりと対応します。

変更前


-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
    // ここに回転時の処理Aを書く
}
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    // ここに回転後の処理Bを書く
}

変更後


- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id)coordinator {
    [coordinator animateAlongsideTransition:^(id context) {
        // 回転前
        // ここに回転時の処理Aを書く
    } completion:^(id context){
        // 回転後
        // ここに回転後の処理Bを書く
    }];
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

以上です。なんか、前の方がスムーズに回転してたような気がするけど、皆さんそんな頻繁にスマホくるくる回転しないと思うので大丈夫かと思います。

    ←
     ∧_∧
   ∧_∧・ω・`) ↑
↓ ( ・ω・`)・ω・`)
  く| ⊂)ω・`)
   (⌒ ヽ・`)
   ∪ ̄\⊃

独創アプリ開発日記 171日目 FACTORIOがヤバイ(褒め言葉)

帰宅直後にですね、ちょっとだけ、1時間だけプレイしようと決めて始めるんですよ。ゲームばかりしている時間はないですからね。

そしてふと気づくとカーテンから光が漏れてきて、新聞配達員のバイクと、スズメがチュンチュンする音が聞こえるんですよ。あれ?おかしいな?5分前に帰宅したよな?地球が一瞬で180度勝手に回転しちゃったのかな?と思って慌てて時計を見ると平気で12時間経っているんですよね。

うーん・・・

_(:3」∠)_