重大発表です。私の中では。
今現在開発しているアプリ名が決定しました。アプリ名は
Lifegame Lightning
にしました!
‹‹(´ω` )/››
GPUのシェーダーを利用して、ハードウェア性能を極限まで引き出したライフゲームです。超細かいライフを稲妻のように超高速で動かすことが可能です!
昨日と今日はライフの動作を超高速化してました。超高速化の作業内容やコードは超企業秘密です。
あとは超売れればいいんだけど。
重大発表です。私の中では。
今現在開発しているアプリ名が決定しました。アプリ名は
Lifegame Lightning
にしました!
‹‹(´ω` )/››
GPUのシェーダーを利用して、ハードウェア性能を極限まで引き出したライフゲームです。超細かいライフを稲妻のように超高速で動かすことが可能です!
昨日と今日はライフの動作を超高速化してました。超高速化の作業内容やコードは超企業秘密です。
あとは超売れればいいんだけど。
今週の予定です。
134日目:タッチ時のパフォーマンス改善その1
135日目:タッチ時のパフォーマンス改善その2
136日目:iPhoneアプリでロード時にサイズがおかしい対策
137日目:iPhoneアプリでセーブ機能をネイティブ対応その1
138日目:iPhoneアプリでセーブ機能をネイティブ対応その2
139日目:iPhoneアプリでセーブ機能をネイティブ対応その3
140日目:予備日(次の週の予定を立てる)
いよいよ大詰です。今週の作業が終われば、一応iPhoneアプリとして完成となります。
追加機能を実装したい気持ちもありますが、いつまでたってもリリース出来なくなってしまうのでとりあえずサクッとリリースを目指したいと思います。
そういえばこのアプリの開発動機ってシェーダーの練習だったはずのなのに、もう130日も経ってたんだな・・・
今日の作業は「警告ウィンドウの表示」です。
javascriptのalertやconfirmを、WKWebViewで表示対応します。Swiftのバージョンは5.0.1です。
class ViewController: UIViewController, WKUIDelegate { private var _webView : WKWebView! override func viewDidLoad() { super.viewDidLoad() _webView = WKWebView() _webView.uiDelegate = self 〜以下略〜
上記の赤い部分でデリゲートを指定し、alertは以下のプロトコルを実装することにより、
func webView(_ _webView: WKWebView, runJavaScriptAlertPanelWithMessage alert: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
let alertController = UIAlertController(title: "", message: alert, preferredStyle: .alert)
let otherAction = UIAlertAction(title: "OK", style: .default) {
action in completionHandler()
}
alertController.addAction(otherAction)
self.present(alertController, animated: true, completion: nil)
}
confirmは以下のプロトコルを実装することにより、アプリで表示可能になります。
func webView(_ _webView: WKWebView, runJavaScriptConfirmPanelWithMessage confirm: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
let alertController = UIAlertController(title: "", message: confirm, preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
action in completionHandler(false)
}
let okAction = UIAlertAction(title: "OK", style: .default) {
action in completionHandler(true)
}
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
javasriptによりalertやconfirmを使うと
if (window.confirm('どっちにするんですかゴルァ?')) {
alert("やるのかゴルァ?");
} else {
alert("ごめんなさい。");
}
キャンセルを押します。
はい、アプリ上で表示されましたね。
以上です!
今日は、「RAND EDGE」が効かない事がある対策を行いました。
conwayのライフゲームは、ライフが一定のルールに従って状態が変化する様がとても面白いゲームです。
全てのライフをランダムに初期化した後、しばらくはライフが変化し続けて楽しめるのですが、一定時間が経つと状態が固定して動きが無くなってしまいます。
「RAND EDGE」とは、画面端のライフを常にランダマイズ処理して、常に動きをつけて楽しめるようにした機能です。
で、この機能なんですが、「LOOP」という画面端を繋げる機能をオフにすると効かなくなったので今日はその調査と対策を行いました。(ちなみに原因は、「LOOP」オフの場合には画面端が繋がらないのでランダマイズ範囲が狭すぎたためです。)
これで、どんな状況でも永遠にライフが動き続ける様子を、ぼーっと眺めて楽しめます。
ʕ•̫͡•ʕ*̫͡*ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ*̫͡*ʔ-̫͡-ʔ
今日の作業は「UIの表示が範囲外になる事がある対策」です。
今作っているWebGLライフゲームアプリのUIは、画面が横長の場合はUIが隠れてしまいます。
右側のSIZE、SPEED、COLORのその下の部分が見えていませんね。このUI部分をドラッグしてスクロールする事で、見えない部分を表示する事ができます。
ライブラリなしで自力で作り込んでいます。
で、ウィンドウサイズが変更された時に、場合によってはUIの表示範囲がおかしくなって何も表示されないことがあったため、今日はこの部分を調整していました。
具体的にはスクロールの最大量、現在のスクロール位置を確認して、範囲外には行かない制御ですね。コードにすると以下のような形になります。
if (0 < this.scrollMax) {
if (this.scroll < 0) {
this.scroll = 0;
} else if (this.scrollMax < this.scroll) {
this.scroll = this.scrollMax;
}
} else {
this.scroll = 0;
}
これでUIの表示が消えることはなくなりました!
今日は以上です!
本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)
今日の作業は「iPhoneアプリ化で起動時に画面を触るとずれる対策」です。
今作っているWebGLのガワネイティブ アプリはシングルページアプリケーション(SPA)なので、スクロールは不要です。
なので、WkWebViewのスクロール関連機能をオフにしました。
Swiftのバージョンは5.0.1(xcodeは10.2.1)です。
_webView = WKWebView()
// スクロール禁止
_webView.scrollView.isScrollEnabled = false
_webView.scrollView.panGestureRecognizer.isEnabled = false
_webView.scrollView.bounces = false
バージョンが5になってまた書き方が変わったようです。プロパティ名が変わった?のかな。
正直もう変わらないでほしいですね。頻繁に変わりすぎるからWebGLとかに避難する方向で行っています。
以上です!
今日の作業は「iPhoneアプリ化で音が出ない原因を調査して対策」です。
・・・
・・
・
mp3ファイルへのパス間違えていただけでした。
[二二ミ
∥ ヾ
∩∧∧ ヾ_
|| ゚∀) | |
/⌒二⊃= | |
( ノ %∴∵ ⊂⌒ヽ
) ) ) ) ̄ ̄(0_)
\)) (___) (_(
自作の音再生jsライブラリの中にmp3へのパスを書くんですが、自分で作っていてすっかり忘れてました。
正しいパスに直したら、全く何の問題もなくiPhoneアプリ内で音が鳴りました。
アプリ化が原因で鳴らないと思って真剣に悩んでたのに・・・
以上です・・・
本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)
今日の作業は「ライブラリロード直後にUIを閉じる」です。
尚、iPhoneアプリとして動くようになったので、今日の画像はiPhone実機のスクリーンショットです。
今作成しているWebGLのライフゲームは、「Library」というボタンがあって、有名なライフパターンを手軽に呼び出せる機能があります。
この機能でパターンをロードした後、ライフがどのように動くか鑑賞するのですが、その際にUIが邪魔になります。
はい、ご覧のようにUIでライフが隠れちゃってますね。そこで、ライブラリを呼び出した際は、UIを自動で閉じるようにしました。
今日はこれだけ!
本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)
やばい、本家の方の箱が溜まってきた・・・
今週の予定です。
127日目:ライブラリロード直後にUIを閉じる
128日目:iPhoneアプリ化で音が出ない原因を調査して対策
129日目:iPhoneアプリ化で起動時に画面を触るとずれる対策
130日目:UIの表示が範囲外になる事がある対策
131日目:「RAND EDGE」が効かない事がある対策
132日目:警告ウィンドウの表示
133日目:予備日(次の週の予定を立てる)
iPhoneアプリ化して昨日遊びまくってたら色々とバグっぽいのが出てきたので今週はそれを直して行きます。
本家デアゴGTR-NISMO箱積状況:3箱 (38号,39号,40号)
今日の作業は「jsの暗号化 — その2」です。
暗号化は一応昨日簡単なものを実装完了しました。今日はもう一段階難しい仕組みで追加実装しようと思いましたが、暗号化しても破られるときは破られるし、何よりあんまり難しい事すると
自分自身で復号化不能になる場合がある
ので追加実装はやめておきました。
今日はiPhoneにインストールしたアプリで色々遊んでいたのですが、結構ボロボロと直さなきゃならない点に気づいたので来週から改善作業を行いたいと思います。
作業が終わりそうで終わらないな・・・。早くリリースしたいなぁ。
本家デアゴGTR-NISMO箱積状況:3箱 (38号,39号,40号)