デアゴスティーニ商法作業管理での136日目作業

今日の作業は「iPhoneアプリでロード時にサイズがおかしい対策」です。

現在作成中のライフゲームは通常の画像を読み込んでライフパターンとして利用する機能があります。

で、何枚か読み込んで気づいたのですが、小さい画像はその画像が収まるようにライフのサイズを調整して正常に読めていたのですが、大きい画像の場合はライフサイズを最小にしても画面からはみ出していただけでした。

画像サイズを調整して読み込むことも考えましたが、ドットバイドットで読み込めないとせっかく正確に作ったライフパターンが読み込めないケースが出てくると考え、画面に収まりきらない画像読み込み時は警告を表示することで対策としました。

今日は以上です!

デアゴスティーニ商法作業管理での134-135日目作業

重大発表です。私の中では。

今現在開発しているアプリ名が決定しました。アプリ名は

Lifegame Lightning

にしました!

‹‹(´ω` )/››

GPUのシェーダーを利用して、ハードウェア性能を極限まで引き出したライフゲームです。超細かいライフを稲妻のように超高速で動かすことが可能です!

昨日と今日はライフの動作を超高速化してました。超高速化の作業内容やコードは超企業秘密です。

あとは超売れればいいんだけど。

デアゴスティーニ商法作業管理での133日目作業

今週の予定です。

134日目:タッチ時のパフォーマンス改善その1
135日目:タッチ時のパフォーマンス改善その2
136日目:iPhoneアプリでロード時にサイズがおかしい対策
137日目:iPhoneアプリでセーブ機能をネイティブ対応その1
138日目:iPhoneアプリでセーブ機能をネイティブ対応その2
139日目:iPhoneアプリでセーブ機能をネイティブ対応その3
140日目:予備日(次の週の予定を立てる)

いよいよ大詰です。今週の作業が終われば、一応iPhoneアプリとして完成となります。

追加機能を実装したい気持ちもありますが、いつまでたってもリリース出来なくなってしまうのでとりあえずサクッとリリースを目指したいと思います。

そういえばこのアプリの開発動機ってシェーダーの練習だったはずのなのに、もう130日も経ってたんだな・・・

デアゴスティーニ商法作業管理での132日目作業

今日の作業は「警告ウィンドウの表示」です。

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("ごめんなさい。");
}

キャンセルを押します。

はい、アプリ上で表示されましたね。

以上です!

デアゴスティーニ商法作業管理での131日目作業

今日は、「RAND EDGE」が効かない事がある対策を行いました。

conwayのライフゲームは、ライフが一定のルールに従って状態が変化する様がとても面白いゲームです。

全てのライフをランダムに初期化した後、しばらくはライフが変化し続けて楽しめるのですが、一定時間が経つと状態が固定して動きが無くなってしまいます。

「RAND EDGE」とは、画面端のライフを常にランダマイズ処理して、常に動きをつけて楽しめるようにした機能です。

この画像には alt 属性が指定されておらず、ファイル名は スクリーンショット-2019-05-31-8.15.44-1024x574.png です

で、この機能なんですが、「LOOP」という画面端を繋げる機能をオフにすると効かなくなったので今日はその調査と対策を行いました。(ちなみに原因は、「LOOP」オフの場合には画面端が繋がらないのでランダマイズ範囲が狭すぎたためです。)

これで、どんな状況でも永遠にライフが動き続ける様子を、ぼーっと眺めて楽しめます。

ʕ•̫͡•ʕ*̫͡*ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ*̫͡*ʔ-̫͡-ʔ

デアゴスティーニ商法作業管理での130日目作業

今日の作業は「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号)

デアゴスティーニ商法作業管理での129日目作業

今日の作業は「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とかに避難する方向で行っています。

以上です!

デアゴスティーニ商法作業管理での128日目作業

今日の作業は「iPhoneアプリ化で音が出ない原因を調査して対策」です。

・・・

・・

mp3ファイルへのパス間違えていただけでした。

[二二ミ
  ∥   ヾ
  ∩∧∧ ヾ_
  || ゚∀)  | | 
 /⌒二⊃= | |
(  ノ  %∴∵ ⊂⌒ヽ
  ) ) )   ) ̄ ̄(0_)
  \)) (___) (_(

自作の音再生jsライブラリの中にmp3へのパスを書くんですが、自分で作っていてすっかり忘れてました。

正しいパスに直したら、全く何の問題もなくiPhoneアプリ内で音が鳴りました。

アプリ化が原因で鳴らないと思って真剣に悩んでたのに・・・

以上です・・・

本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)

デアゴスティーニ商法作業管理での127日目作業

今日の作業は「ライブラリロード直後にUIを閉じる」です。

尚、iPhoneアプリとして動くようになったので、今日の画像はiPhone実機のスクリーンショットです。

今作成しているWebGLのライフゲームは、「Library」というボタンがあって、有名なライフパターンを手軽に呼び出せる機能があります。

この機能でパターンをロードした後、ライフがどのように動くか鑑賞するのですが、その際にUIが邪魔になります。

はい、ご覧のようにUIでライフが隠れちゃってますね。そこで、ライブラリを呼び出した際は、UIを自動で閉じるようにしました。

今日はこれだけ!

本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)

やばい、本家の方の箱が溜まってきた・・・

デアゴスティーニ商法作業管理での126日目作業

今週の予定です。

127日目:ライブラリロード直後にUIを閉じる
128日目:iPhoneアプリ化で音が出ない原因を調査して対策
129日目:iPhoneアプリ化で起動時に画面を触るとずれる対策
130日目:UIの表示が範囲外になる事がある対策
131日目:「RAND EDGE」が効かない事がある対策
132日目:警告ウィンドウの表示
133日目:予備日(次の週の予定を立てる)

iPhoneアプリ化して昨日遊びまくってたら色々とバグっぽいのが出てきたので今週はそれを直して行きます。

本家デアゴGTR-NISMO箱積状況:3箱 (38号,39号,40号)