スクラッチマニアの3぀の穎

こんにちは



最近、友人ず私は、Androidのアプロヌチで、 Windows Phoneプラットフォヌム甚のゲヌムScratch Maniaを公開したした。 ここでは、Kinectに関する最埌の出版物から姿を消した堎所ず、゚ンタヌプラむズ開発者がゲヌムを曞くのはどのようなものかに぀いおお話したす。









ゲヌムに぀いお
スクラッチマニアでは、プレむダヌは保護局によっお隠された絵を掚枬するように求められたす。 保護局は、画面に觊れるだけで消去されたす。 さらに、プレヌダヌは保護局の䞀郚のみを消去できたす。これにより、関心が高たり、同時に耇雑さが増したす。 写真は、スポヌツ、車、俳優、郜垂などのテヌマごずにアルバムにたずめられたす。 掚枬された写真ごずに、プレヌダヌはゲヌム内のコむンを受け取りたす。これは新しいアルバムず亀換できたす。



私たちはこのゲヌムを週末のハッカ゜ンのテヌマずしお考えたした誰かず䞀緒になっお、フレヌムワヌクを䜜成したす-実甚的なプロトタむプを䜜成し、1〜2か月で公開に適した状態にしたす。 そしお実際に玠晎らしい幎を過ごしたした。 1幎以䞊、カヌル 公平を期しお、私は仕事は通垞倕方、暇なずきに行われたこずに泚意したす。 今こそ、重芁な技術的解決策を怜蚎するずきです。



7回枬定する



私がゲヌムに぀いお話す人々から最も人気のある質問の評䟡を行う堎合、この質問が最初に来たす「うん、Windows Phone 真剣に??。”皮肉なサむンでさえ必芁ありたせん。 それでも、Cを知っおいるため、このプラットフォヌムを遞択したした。 たた、JavaもCから掟生した蚀語であるため、Androidバヌゞョンもバヌゞョン化するこずにしたした。珟時点では、準準備状態になっおいたす。 その結果、「スタむリッシュでファッショナブルな若者」Xamarinを䜿甚するか、ネむティブアプリケヌションを䜜成するかを決定するこずになりたした。 悲しいかな、Xamarinは負けたした。 䞻に同僚ずオンラむンコミュニティからの混合レビュヌが原因です。 フレヌムワヌクずの戊いに倚くの時間を費やしたくありたせんでした。 それに加えお、䟡栌は痛烈でした-個々の開発者に察しお月額玄20ドル。



Javaず.NETだけが競争盞手ではなく、javascriptなどの゚キゟチックなオプションも怜蚎されたした。 しかし、圌は遅すぎたす。 ずころで、埌でゲヌムのサむトにプロトタむプを䜿甚したしたが、良さは倱われたせん。



Windows PhoneずAndroidのバヌゞョンに぀いおは、簡単にするために、それぞれWP 8以降ずAndroid API 11以降で停止するこずにしたした。 ここでは䞻にWindows Phoneに぀いお説明したす。なぜなら、 Androidに぀いお話すのは時期尚早です。



嚁勢のいいトラブル開始



最初に蚈画したように、2日間の䌑みの代わりに、プロトタむプに玄2週間費やしたした。 JavaScriptで開始。 アむデアは単玔です。キャンバスをペヌゞに远加し、その䞭に絵を描きたす。 DOMに远加せずに、別のキャンバスを䜜成したす。 キャンバスのサむズは同じですが、その䞭に別の絵を描きたす。 OnMouseMoveむベントハンドラヌで、N×Nピクセルの領域をあるキャンバスから別のキャンバスにコピヌしたす。 次のようになりたす





しかし、それで誰も驚かないでしょう。そのため、Windows Formsで次のプロトタむプを䜜成したした。消去アルゎリズム自䜓は、画像゚ディタヌの゚アブラシツヌルずの類掚によっお䜜成されたした。 このプロトタむプでは、2぀の画像が互いに重ね合わされ、䞊郚のタッチゟヌンでアルファチャネル倀が倉曎されたした。 javascriptの第䞀人者はこのようなものを曞くこずができるず確信しおいたすが、これは私たちの間では芋぀かりたせんでした。



プロトタむプのコヌドはほずんど倉曎されずにスマヌトフォンに転送されたした。 Windows PhoneずAndroidのコンポヌネントはアルファチャネルで異なる動䜜をするこずが刀明したした。 Windows Phoneでは、チャネルは事前乗算されたすが、Androidではそうではありたせん。 これは、Androidではアルファチャネル倀がピクセルの色成分RGBに圱響を䞎えないのに察し、Windows Phoneでは匏に埓っお倉化するこずを意味したす。

A = alpha R = red × alpha / 255 G = green × alpha / 255 B = blue × alpha / 255
      
      





この堎合、ピクセル倀を蚈算する操䜜は実際にはピクセルコンポヌネントを加算するこずになるため、この圢匏で衚瀺される画像は簡単に重なりたす。たずえば、Rres〜R1 + R2です。 詳现は、Charles Petzold amazon の著曞Programming Windows第6版にありたす。





しかし、トラブルが䞀人で来るわけではありたせん。 Touch.FrameReportedむベントAndroidのonTouchEventは、䞡方のプラットフォヌムで非垞に遅いです。 たずえば、ハンドラヌのタッチポむントでアルファチャネルの新しい倀を蚈算するためにこのむベントをサブスクラむブするず、FPSは玄20になりたす。これは非垞に小さいためです。 遅延は肉県で芋えるようになりたす。 Androidでは、圌らはそれを延期し、リリヌスの近くで修正するこずにしたした。 Windows Phoneでは、玄25ミリ秒に1回画面をポヌリングし、タッチポむント通垞は耇数ありたすある堎合を受信し、アルファチャネルの倀を蚈算するバックグラりンドスレッドを䜿甚しお問題を解決したした。 これにより、FPSレベルを30〜40に保぀こずができたす。



さらに、Windows Phoneでは、画像の䞀郚が無効化されおいないこずを芚えおおく必芁がありたす。倉曎埌は、画像党䜓を曎新する必芁がありたす。 たた、タッチ凊理に远加の制限が課せられたす。䞀床に凊理されるポむントが倚いほど良いです。 䞀方、あたり倚くのポむントを凊理するこずはできたせん。 ゞャヌクが目立ちたす。



完璧さに制限はありたせん



矎しい消去は最初の「キラヌ機胜」であり、2番目は写真アルバムです。 このような重芁なコヌドには察応する態床が必芁であるこずを認識しお、圌らは蚭蚈を真剣に受け止めたした。 システムは階局化されたした-個々のアルバムの䜎レベルのパヌサヌから、むンストヌルされたアルバムやダりンロヌド可胜なアルバムの高レベルのマネヌゞャヌたで。

アルバムに぀いお
ゲヌムでは、写真付きの3぀のアルバムが最初にプリむンストヌルされ、残りのアルバムはサヌバヌに保存されたす。 これにより、プレヌダヌは興味のあるアルバムを決定しおアップロヌドできたす。たた、新しいアルバムの配垃プロセスを簡玠化できたす。プレヌダヌには、アルバムリストで「新芏」ずマヌクされたアルバムが衚瀺されたす。



ここで私たちは「脳の゚ンタヌプラむズ」ずしお説明できる倱態を䞎えたした。 クラス図を芋おください。



䞀芋、すべおがそれほど怖いわけではありたせんが、ダむアグラム䞊で簡略化されおいたす䞀郚のタむプが瀺されおいない、すべおのむンタヌフェむスのコヌドコントラクト、ヘルパヌクラスなど このファミリは数回リファクタリングされ、察応し、最終的には、ほがすべおのむンタヌフェむスずファクトリが削陀されたした。



間違いから孊ぶ



理想的なアヌキテクチャを䜜成する詊みは、叀兞的な教科曞ですが、私たちにずっおは有益ではありたせん。 正しい結論が時間通りになされおいれば、ゲヌムは6か月前に準備ができおいたでしょう。



これが、4か月でなんずかできたこずです。 フレヌムの準備が完了したした。むンストヌル枈みのアルバムを切り替えたり、2぀のモヌドで写真を掚枬提案されたオプションからスペルず遞択したり、既に掚枬した写真を衚瀺したりできたした。 しかし、ただただありたした。UIの描画、スコアリングの実装、アルバムのアップロヌド、゜ヌシャルネットワヌクずの統合-「友達に教える」、Googleアナリティクスの远加、ゲヌム内での賌入。



「透かし」のすべお



ゲヌムのサヌバヌ郚分をMicrosoft Azureにデプロむしたした。 元の写真ず完成したアルバムはBlob Storageに保存されたす。 識別子、物理的な堎所Blob内、ゲヌム内のアクセシビリティなど、アルバムのメタデヌタを保存するため Azure SQLで䜿甚されたす。 これらのコンポヌネントの䜿甚は、RESTfulサヌビスによっお隠されおいたす。 これがメむンストリヌムであるため、私たちは぀いおいくこずにしたした。



実際、私たちのサヌビスは3぀の方法のセットですアルバムのリストを取埗する、アルバムに関する詳现情報を取埗する、アルバムをダりンロヌドする。







アルバムをダりンロヌドするために、サヌビスは有効期間が制限されたリンクを生成したす。 Azureは、既成のメカニズム-共有アクセス眲名を提䟛したす。 この手順の本質は次のずおりです。有効期間はURLに瞫い付けられ、その埌、URLは秘密鍵で眲名されたす。 これにより、URLぞの倉曎がなくなりたす。 日付を指定する必芁はありたせん。コンテナのアクセスポリシヌを䜜成し、URLでこのポリシヌを参照するだけです。 ただし、短呜リンクの堎合、このオプションはあたり䟿利ではありたせん新しい期間ごずに新しいポリシヌを䜜成する必芁がありたす。



服で䌚いたしょう



人生の過酷な真実は、プレむダヌはゲヌム内に隠されおいるものや、数分を喜んで費やすために費やされた工数を気にしないずいうこずです。 したがっお、䟿利で盎感的なむンタヌフェむスを構築するこずが重芁です。 私たちはすべおを自分で描くこずを詊みるこずにしたした。 おそらく、プロのアヌティストを探す䟡倀はありたしたが、圌の䜜品の費甚は自由な時間で報われたでしょう。



スケッチするのに玄1か月かかりたした。 Expression Designが゚ディタヌずしお遞択された理由は、a持っおいた、b䜿いやすい、cファむルがXAMLたたはPNGに簡単に゚クスポヌトされたからです。 したがっお、ゲヌムに倉曎を加えるこずなく、ほがすべおのスタむルずアむコンを転送するこずが刀明したした。

PNGぞのデザむン
倚数のExpression DesignファむルをPNGたたはJPEGに゚クスポヌトする必芁がある堎合、自動化せずにプロセスが退屈になる可胜性がありたす。 Expression Design APIを䜿甚しお小さなコンバヌタヌを䜜成したしたこれは、1぀の䞀般的な "リフレクタヌ"を䜿甚しおアセンブリを調べお取埗した、文曞化されおいないAPIです。



2぀のアセンブリが必芁です。

ProgramFiles\ Microsoft Expression \ Design 4 \ GraphicsCore.dll

ProgramFiles\ Microsoft Expression \ Design 4 \ Microsoft.Expression.Design.dll

そしおそのようなコヌド

 const string from = @"..."; //   *.design  const string to = @"..."; //    *.png  Module.Instance.Initialize(); var doc = Module.Instance.OpenDocument(from, false, null); ExportImageInfoHandler exportHandler = doc.ExportImage(to, (Enum)ImageFormat.Png); exportHandler.Info.Resolution = 96.0; exportHandler.Info.DocumentUnits = UnitType.Pixel; exportHandler.Info.ConstrainProperties = false; exportHandler.Execute();
      
      







党䜓的な知芚に圱響を䞎えるゲヌムのもう1぀の重芁な芁玠は、プレむダヌが掚枬する写真です。 私たちは、無料のラむセンスず同様に、面癜くお高品質を遞択しようずしたした。 各アルバムには玄20〜30枚の写真がありたす。 圌らの人生を簡玠化するために、圌らは写真が同じサむズであるべきであるず決めたした。 この仮定の副䜜甚は、アルバムを䜜成する際の远加の努力でした。各画像のサむズを調敎する必芁がありたす。 しかし、今日䜿甚するこずを決定した解像床が明日倉曎された堎合はどうなりたすか



すべおの写真を再線集する必芁があるこずがわかりたした。 そこで、アルバムデザむナヌを䜜成するずいうアむデアを思い぀きたした。 その結果、完党な管理システムが完成したした。 デザむナヌは、さたざたな蚀語のアルバムの䜜成ず線集珟圚、英語ずロシア語の2぀の蚀語で利甚可胜だけでなく、それらを公開するこずもできたす。 ゲヌムで利甚可胜にしたす。





䜕がくるのか



ゲヌムの広告に玄3,500ルヌブルを費やしたした。 これには、VKontakte、Bing、およびWindowsストアの広告が含たれたす。 実践が瀺しおいるように、Redditでの広告は冬に雪を買うようなものです。$ 20-0ナニット。



しかし、ニュヌスは゜ヌシャルネットワヌク䞊のモバむルゲヌム専甚のグルヌプで公開されおいたす。 最も簡単な方法は、ゲヌム、Windows Phoneなどに特化したグルヌプを芋぀けるこずです。 広告を公開するリク゚ストを管理者に連絡しおください。 珟圚、この方向で䜜業を続けおおり、䞻にゲヌムのレビュヌを公開する準備ができおいる人々の連絡先を探しおいたす。 これたでのずころ、1800 Pocket / PCの人だけが䌚議に参加しおレビュヌを公開しおいたす。



リリヌスによるAndroidのバヌゞョンはあたり積極的に開発されおいたせん。 これが近い将来の目暙です。 iOS甚のバヌゞョンはありたすか ただ明確ではなく、Windows PhoneずAndroidのゲヌムの成功に倧きく䟝存しおいたす。



PSでは、゚ンタヌプラむズ開発者は䜕のためにゲヌムを曞いおいたすか 有益です。 耇雑な高負荷システムを蚭蚈するか、ビゞネスプロセスを自動化するか、独自のオンラむンストアを曞くかは問題ではありたせん。シンプルに保ちたす。 それだけです Trite ... :)



All Articles