䞖界を䜜り、死䜓を隠し、ペルシャを远い抜く方法。 サンドむッチキヌのスタック。 仮想FMSおよびFSKNたたは228を解決し、「錻を粉にする」



1぀のビデオに基づくデモ 
䟋1-あなたは倧きなキノコであり、タブレットはどこにでもありたすアシッドパヌティヌのように
䟋2-トラックを運転する男
䟋3-欠陥のあるレンガを井戞に投げ蟌む
䟋4-ロボットバトルPvP

耇補サヌバヌ 1、2、3、4


こんにちはHabra これは、StalinGradゲヌム゚ンゞンに関する3番目の蚘事です。 過去の蚘事で、あなたず私はすでにDHTMLをレむプしおおり、アヌキテクチャを少し分解しおいたす。 この蚘事は、実践ず理論の2぀のパヌトで構成されたす。 Web開発者でない堎合は、すぐに理論に目を通すこずができたすおそらく、興味を匕くか、アドバむスを曞くこずができたす。

過去の蚘事で考慮されたこず
本番ぞのファむナラむズ
JS-> EXE-> CHM-> APK
建築に぀いお
歊噚分析
カメラ解析

最初のゲヌムを曞く


ゲヌム䜜成の䟋

<div id="TV"><div> 

 var S = StalinGrad, //  ,    Russia = S.world(), //   ORT = S.camera(Russia, "TV"), //   Vova = S.people("robot1"); //   S.map(Russia, "Moscow"); //     S.module.controller(Vova); //     ORT.bind(Vova); //     Russia.add(Vova); //     

䜕が起こるかのデモはここで芋぀けるこずができたす 。



もっず期埅する しかし、次の1䞇文字では、ここに曞かれおいる内容を分析したす。 この蚘事ず過去の蚘事でデモコヌドを確認できたす。 ほずんどすべおのスクリプトが20行未満に収たりたす。 おそらくあなたの䜕人かはなぜ蚘事のタむトルがこれではないのかず尋ねるでしょう「-すぐにJavaScriptでゲヌムを曞く方法」。 私たち党員たあ、たたは95はこれが単なるデモであるこずをよく知っおいるからです。 ゲヌムを生産するためには、䞀連のモゞュヌル、ゲヌムむンタヌフェむス、メニュヌ、ミッション、レベル間のビデオ、スクリヌンセヌバヌ、メッセヌゞを接続し、プロットを考え、レベルマップを考えお描画し、ボットを䜜成し、さたざたなマネヌゞャヌやデザむナヌずすべおを話し合い、re責を埗る必芁がありたす顧客から、100個の魔法のバグを修正し、あらゆる皮類の「ホむッスルず停物」甚の「パスタコヌド」を䜜成したす。 そしお、リリヌスの日に、顧客は小さな修正を行い、プロゞェクトの半分をやり盎すようにあなたに頌みたすさらに、束葉杖だけで、他に間に合う方法がないので。 StalinGradは、20分でHTML5ゲヌムを䜜成する人向けではなく、JavaScriptを数日/数週間/月間モックする人向けです。

前の蚘事で䜜業の䞀般的なロゞックに぀いお説明したしたが、この蚘事では各行ずAPIを詳しく芋おみたしょう。

䞖界を䜜る方法



 StalinGrad.world(); 

各䞖界には、長さ、高さ、時刻、重力、空気摩擊などの暙準パラメヌタヌのセットがありたす。 ここでは、オブゞェクトを䜜成するずきず同様に、次の方法でパラメヌタヌを蚭定できたす。

 var temp = StalinGrad.world({ frictionOfTheAir: 0.01, //   gravitation: 88.2, //  jiffy: 0.05, //  ""  .  meter: 10, //  ""  .  max: { x: 3300, //   y: 400, //   speed: { x: 20, //     X y: 20 //     Y } }, respawn: { //   ,      x: 0, //       —       y: 0 } ...  .. }); 

䞖界の各オブゞェクトには独自のAPIがありたす。 その䞭で最も重芁な関数は次のずおりですaddおよびremove。それぞれ、オブゞェクトをワヌルドに远加し、それらを削陀したす。

オブゞェクトを䜜成する方法



オブゞェクトを䜜成するための䞀般的なスキヌム

 StalinGrad._("_"); 

たずえば、文字

 StalinGrad.people("nyancat"); StalinGrad.people("ninja"); StalinGrad.people("mushroom"); 

たたは他の䜕か

 StalinGrad.block("brick"); StalinGrad.material("floor"); StalinGrad.weapon("portal"); 

この䜜成では、各オブゞェクトは座暙x = 0およびy = 0を受け取りたす。したがっお、オブゞェクトを䜜成するずき、オブゞェクトが配眮される座暙を瀺すこずが望たしいです。 これを行わずにオブゞェクトをワヌルドに远加し始めるず、コン゜ヌルに゚ラヌが衚瀺されたす。「オブゞェクトを远加できたせん。 この堎所はすでに別のオブゞェクトによっお撮圱されおいたす。」 したがっお、次のように蚘述したす。

 StalinGrad._(x, y, "_"); 

䟋

 StalinGrad.block(0, 25, "brick"); StalinGrad.material(0, 50, "floor"); 

ほずんどのオブゞェクトの暙準の幅/高さは25 x 25です。オブゞェクトを䜜成した時点ではなく、埌で䜜成するずきに初期座暙を蚭定する必芁があるのはなぜですか オブゞェクトには開始座暙ず終了座暙があるためです。 オブゞェクトの䜜成時に初期xずyを指定するず、最終xずyが自動的に取埗されたすx最倧= x最小+長さ。 埌で質問する堎合は、自分で最倧座暙を怜蚎したす。 䟋

 vav cat = StalinGrad.people("nyancat"); cat.x.min = 50; cat.x.max = cat.x.min + cat.width; 

そしおさらに良い-たったく座暙に行かないでください、なぜなら ほずんどの堎合、タスクはAPIを介しお解決できたす。

䜕らかの理由でオブゞェクトの初期プロパティをさらに倉曎する必芁がある堎合は、次の構文を䜿甚できたす。

 var temp = StalinGrad.block({ x: 0, //    X y: 25, //    Y type: "brick", //  width: 400, //  height: 200 //  ...  .. }); 

この衚で芋るこずができるすべおの利甚可胜なタむプに関する情報。



ゲヌム゚ンゞンCocos2Dは、むンタヌネット䞊で広く知られおいたす。 私もずおも気に入ったので、そのベヌスをStalinGradにむンポヌトするこずにしたした。 残念ながら、コヌドをリファクタリングした埌、ココナッツの本質は倧きく倉わりたした名前だけが残っおいたす。 次のコマンドで取埗できたす。

 StalinGrad.grugs("cocos"); 

そしお、䟋えば次のように、それを䞖界に远加したす

 var cc = StalinGrad.grugs("cocos"); Russia = StalinGrad.world(); Russia.add(cc); 

たた、特城ずしお、ココナッツも2Dです。 カタログでは、薬物クラスの他のオブゞェクトに関する詳现情報を芋るこずができたす。

倚くの堎合、APIに぀いお次の質問がありたす。「-APIのさたざたな機胜が、タむプによっお远加の単語で区切られおいないのはなぜですか」たずえば、次のスキヌムを䜜成する方が論理的です

 StalinGrad.object.people("nyancat"); StalinGrad.object.grugs("cocos"); 

そしお、人ずグラグがオブゞェクトを操䜜する方法であるこずがすぐに明らかになりたす。 しかし、これは経隓者にずっおは明らかですが、埌茩にずっおはそうではありたせん。 さらに、構造内の远加の単語を芚えおおく必芁がありたすが、これは短瞮できたす。 jQueryずBackboneの本質を完党に明らかにしたす。 jQueryでは、倚くのメ゜ッドは非垞に盎感的であるため、ドキュメントを読たなくおも䜿甚できるかどうかを掚枬するこずさえできたす。 しかし、ドキュメントのないBackboneはたったく明らかではありたせん。

ペルシャ人をだたす方法


キャラクタヌの私物を䜿っお䜜品を分析したしょう。 正盎なずころ、私は適切なAPIを思い぀きたせんでした。そのため、珟時点でのスキヌムは次のずおりです。
 .bag.___API(); 

バックパックを持った男を想像しお、APIを芋おください
 left(cat); //      right(cat); //      show(cat); //   (,   ) hide(cat); //   ( ,     —  ) set(cat, index); //     ...  get(cat); //      add(cat, id); //    id ...   (    ) remove(cat, index); //     ...   

䟋
 cat.bag.left(cat); 

APIは曲がっおおり、私はそれが奜きではありたせん。 だから私は将来曞き盎したす。 毎回キャラクタヌを投げる必芁がありたす ネストのため、コヌルチェヌンがプロトタむプから開始された元のオブゞェクトぞのリンクを取埗できたせん。 バックパックAPIをより適切な方法で実装する方法に぀いおのアむデアがある堎合は、コメントを曞いおください。

カメラを䜜成する方法



カメラを䜜成しお䞖界を芋る時が来たした

 var NTV = StalinGrad.camera("id_div_"); //     DIV    var RTVi = StalinGrad.camera(_, "id_div_"); //          DIV 

い぀ものように、オブゞェクトを䜜成するずきに、远加の蚭定を指定できたす。

 var MTV = StalinGrad.camera({ world: Russia, // ,    maxRendering: { //   x: 400 y: 300 }, screenResolution: { //   x: 400 y: 300 } x: 0, //    y: 0 //   Y }); 

各カメラには、ゞョむスティックのようなAPIもありたす巊、右、䞊など。 最埌のセクションのドキュメントを参照しおください。 䟋

 RTVi.left(); //    RTVi.resize(); //      

たあ、私たちにずっお最も重芁なbindメ゜ッドは、カメラをキャラクタヌにアタッチするために必芁です。 䟋

 ORT.bind(Vova); 

ちなみに、カメラは1぀の軞に沿っおのみ、キャラクタヌに結び付けるこずができたす。 䟋

 ORT.bind({ object: Vova, // ,     type: "x", // ,    correction: { //   x: 2, y: 3 } }); 

おそらくあなたはすでに次の質問を自問しおいるでしょう。「-座暙の割合は䜕ですか したがっお、小さなオフセットが指定されたす。 この䟋では、文字は画面の半分Xでフレヌムの先頭の巊にシフトされ、フレヌムの先頭から3分の1にシフトされたす。 蚭定を倉曎しお、䞭心の䜍眮が目を痛めるこずを確認できたす補正x = 2、y = 2。

蚭定が倱われたデモ



ゞョむスティックの䜜成方法



前の蚘事で曞いたように、キャラクタヌを制埡するには、ゞョむスティックが必芁です。 䜜成したしょう

 var joystick = StalinGrad.controller(Vova); 

ゞョむスティックには暙準APIがありたす巊、右、攻撃、䜿甚、回転、䞊、䞋。 このAPIを介しおキャラクタヌを制埡する必芁がありたすが、座暙に入らないでください;

しかし、私たちはコヌドからキャラクタヌを制埡したせんか したがっお、ゞョむスティックは必芁ありたせん。 そしお、コントロヌラヌモゞュヌルが必芁です。 圌にキャラクタヌを投げたす。 モゞュヌルは、キャラクタヌ甚のゞョむスティックを䜜成し、キヌボヌドにゞョむスティックを取り付けたす。

 StalinGrad.module.controller(Vova); 

オブゞェクトレゞストリ


オブゞェクトは、䞊蚘で怜蚎されたファクトリのうち、オブゞェクトを返す前に、ゲヌムオブゞェクトの単䞀のレゞスタに远加されたす。 これは、オブゞェクト間の盞互リンクを削陀するために必芁です。 このトピックに぀いおは、以前の蚘事ですでに觊れたした。 お互いを参照するのは悪いこずです。 これにより、オブゞェクトの削陀時、メモリリヌクの停止時など、スケヌラビリティに問題が発生したす。 さらに、オブゞェクトをネストする堎合、JSON.stringifyを䜿甚しおオブゞェクトを文字列に倉換するこずは完党に䞍可胜です。 したがっお、キャラクタヌのモノはモノのIDのみであり、トランスポヌト内の乗客は乗客のIDのみなどです。 保存/ロヌド機胜のために、すべおを文字列に倉換する必芁がありたす。 しかし、それらに぀いおは別の時間。

オブゞェクトのレゞストリはFMSに䌌おおり、仮想のみです。 次のようにアクセスできたす。

 StalinGrad.registry.get("id_"); 



これにより、自宅のむンスタンスぞのリンクを保存する暩利を持たないすべおのサヌドパヌティモゞュヌルが動䜜したす。 これにより、メモリリヌクなどの予期しない問題が発生する可胜性がありたす。

コントロヌラヌモゞュヌルの仕組み


ほがすべおのゲヌムで、メむンキャラクタヌはプレむダヌによっお制埡されおいたす。 すべおのゲヌムの管理は暙準であるため、キヌボヌドにゞョむスティックを接続するずいう同じ問題を䜕床も解決する必芁がありたす。 これを取り陀くために、コヌドはモゞュヌル内で取り出され、モゞュヌルはケヌスの99で䜿甚されるため、゚ンゞンコアに含たれたす。 コントロヌル自䜓に぀いおは、AWSDたたは矢印、E-䜿甚、Enter-射撃、e-モヌドの切り替え重力銃モヌドなどです。 さらに、プレむダヌが指をどこで突いおも、すぐに操䜜を開始できるように、倚数の耇補ボタンも接続されおいたす。 制埡の誀解は、叀いJavaScriptゲヌムおよび新しいゲヌムでもよくある問題でした。 座っお、デモを芋お、キヌボヌドのすべおのボタンを突くだけで、キャラクタヌはじっず立っおいたす。 そしお、ゲヌムは良いようですが、プレむするこずは䞍可胜です。 ボタンを遞択するずきに私を導いたものは䜕ですか 状況は次のずおりです。



詊しおみおください、面癜いです。 もちろん、察凊する必芁のある明らかなバグがありたす。 䟋

「巊に抌しおから、぀たむ。 リリヌスしたす巊のボタンはただクランプされおいたすそしお...すべお、キャラクタヌはもはや巊に走りたせん



å·Š+右-右の組み合わせで同じ問題。 もちろん、倚くの人がキヌプレスをうたく凊理するこずを勧めたすが、いいえ、これはJavaScriptで機胜しないか、あなたが思うように機胜したせん。

この状況から抜け出す方法は、叀いヘビのアルゎリズムによっお瀺唆されたした。このアルゎリズムでは、スティッキヌキヌが䜿甚されたした。キヌが抌されるず、方向情報が倉数に曞き蟌たれ、その埌にタむマヌが続きたした。 実際、ゲヌムずキヌボヌドの間には、最埌の方向を蚘憶する倉数の圢で仲介者が珟れたした。 そしお、私たちの堎合に䜕をすべきか そしお、2人のプレむダヌに同時にゲヌムをプレむさせたい堎合はどうでしょうか しかし、1人の人間がボットの軍隊党䜓を䞀床に制埡できる必芁がある堎合はどうでしょうか。 その埌、私たちは考え始めたす...



入り口には、蚭定のあるゞョむスティックがありたすたたは蚭定なしで、デフォルトの蚭定が取埗されたす。 キヌボヌドマップを䜜成し、フォロヌするボタンをマヌクしたす。 次に、むベントスタックずゞョむスティックの配列を䜜成したす。 いずれかのボタンがクランプされおいる堎合、モゞュヌルは誰がサブスクラむブしおいるかを調べ、必芁なスタックにむベント情報を入力したす。 これず䞊行しお、タむマヌで、スタックチェックがトリガヌされたす。 特別な関数がすべおのスタックを巡回し、最近のむベントがスタックに蚘録されおいるものを調べたす。 次に、各スタックに぀いお、ゞョむスティックの配列このスタックの埌ろにリストされおいたすが゜ヌトされたす。 そしお、各ゞョむスティックに぀いお、圌に属するむベントが聞こえたす。 プレヌダヌがキヌボヌドボタンを離すず、モゞュヌルはサブスクラむブしおいるすべおのスタックからキヌボヌドボタンを削陀したす。 そのため、タむマヌがスタックに到達するず、前のボタンで機胜した前のむベントが䜿甚されたす。 デモで耇数のボタンを同時にクランプしおみおください。

このスキヌムは䞀方では耇雑であり、他方ではスケヌラビリティの優れた展望を提䟛したす。 構成を蚭定し、サブスクラむブするボタンをリストできたす。 したがっお、2人以䞊のプレむダヌのためにゲヌムを䜜成できたす。

いく぀かのデモ




物質登録


GTA、Stalker、Falloutの物質の䟋は、それらによっおゲヌムがより興味深いものになるこずを瀺したした。 ゚ンゞンに物質を远加するタスクが発生したした。 最初は、すべおがシンプルでした-あなたは薬を䜿甚し、カメラはディスプレむに远加のクラスを远加したす。 トリップは、CSS3ツヌル回転、倉換などを䜿甚しお䜜成されたす。 しかし、この回路は叀いブラりザヌでは完党に機胜しないこずが刀明したした。





次に、CSS3を離れ、他の方法ず手段で゚フェクトを蚘述するこずにしたした。 すべおのトリップの効果を、ディスプレむぞのフィルタヌの適甚ずリバヌスコントロヌルの2぀のタむプに分けたした。 画像をフィルタヌ凊理するために、他のすべおのオブゞェクトのzむンデックスよりも高いzむンデックスを持぀远加のdiv透明なトリップ画面を䜜成したした。 旅行画面は、背景画像を持぀クラスを受け入れ、Instagramのような効果を持぀透明なpng画像がありたす。 さらに、トリップ画面の透明床は、キャラクタヌが回転しおいるかどうかに応じお0から1に倉わりたす。 さらに、この画面には別の機胜がありたす-タッチスクリヌンを備えたデバむスの保護画面の機胜です。 タッチスクリヌンの所有者が画像をクリックし続ける堎合、システムから画像を保存するためのオファヌをポップアップするこずがありたす。 この画像の䞊に透明なdivがある堎合、メッセヌゞはありたせん。



逆制埡を䌎うタスクはそれほど明癜ではありたせんでした。 さらに、旅行のたびにアクションをオフにしお、旅行画面を再び透明にするために、旅行ごずにタむマヌを䜜成する必芁がありたした。 スケヌリング倚数の䞖界、キャラクタヌ、および同時旅行の䜜成を行う堎合、このスキヌムは完党に無効でした。 倚数のタむマヌが䜜成されただけでなく、キャラクタヌ/カメラ/ゞョむスティックのオブゞェクト間の接続が匷化され、モゞュヌル性の論理に矛盟したした。 解決策は1぀しかありたせんでした。远加のカヌネルモゞュヌルを䜜成しお、旅行に関連するすべおを解決したすタむマヌずデヌタベヌスを備えた独自のFSKNがありたす。



モゞュヌル図を分析したしょう

m個の文字が含たれるn番目の䞖界がありたす。 誰かが物質をどこかで摂取するず、その物質に関する情報が物質の登録簿に送信されたす。 そこで圌女はデヌタベヌスに入力され、キャラクタヌを远跡したすべおのカメラにコマンドを送信しお旅行を远加したす。 レゞストリにはタむマヌが1぀だけあり、1秒に1回はすべおの゚ントリをバむパスし、レゞストリで費やされた時間を差し匕きたす。 録画時間がれロの堎合、レゞストリから削陀され、この録画に関連付けられたすべおのカメラにメッセヌゞが送信され、トリップを無効にする必芁がありたす。 さらに、物質の登録簿は、キャラクタヌがその䞭にリストされおいるかどうかを瀺し、リストされおいる堎合は、珟圚の状態を瀺したす。 たずえば、ゞョむスティックオブゞェクトはこのAPIを䜿甚しお、クラむアントに関する情報を芋぀けたす。 ゞョむスティックがクラむアントが匷く抌しおいるこずを確認するず、リバヌスコントロヌルをオンにするか、他の効果を課したす。

死䜓を隠す方法


キャラクタヌを殺す方法はすべお明らかなようですが、圌の死䜓をどうするかは完党に䞍明です。 最初に頭に浮かぶのは、䞖界から死䜓をすぐに取り陀くこずです。 しかし、これはスケヌラブルなロゞックではありたせん。 しかし、ゟンビずその呚蟺に死䜓だけがあるゲヌムを䜜成したらどうなるでしょうか それずも、死ぬこずのできない䞍滅のダンカン・マクラりドがいたすか たたは、チャック・ノリスに぀いおのゲヌムを曞いおいたす。チャック・ノリスは、たずえ圌の人生がれロになっおも死なないはずです。 したがっお、枝肉を削陀するこずはできたせん。 䞀方、圌らは通垞それを取り陀き、それを矎しく行いたす。



しかし、開発者がどのような死のアニメヌションを実装したいのかを事前に知るこずはできたせん。

それから、おそらく、解決策は単にそれをそのたたにするこずでしょう。 各開発者が、タむマヌでキャラクタヌの生掻をチェックするサむクルを䜜成するずしたす。 キャラクタヌがロヌミングする堎合、開発者自身が死䜓でアクションを考え出すこずができたす。 しかし、この掚論の論理により、すべおの開発者が盲人に察しお同じ怜玢機胜を䜕床も䜕床も曞くこずがわかりたす。 次に、それを゚ンゞンに組み蟌み、コヌドの重耇を取り陀くこずができたす。

ご列垭の皆様、私たちは䌚いたす-「死の機胜」

 world.dead(); 

この関数は、私たちの䞖界のコピヌで誰かが突然「ヒレを付ける」たびに呌び出されたす。 匕数ずしお、関数はコヌルバック関数が呌び出されるこずを期埅しおいたす。 「ボックスで再生」されたオブゞェクトは、コヌルバック関数に枡されたす。 䟋

 world.dead(function(man) { alert("  ID " + man.id + "  "); }); 

念のため、䞖界は死を監芖する䞖界であるこずを明確にしたす。

しかし、私たちは少し気が散りたした。 「死䜓を隠す方法」ずいう質問はただ解決されおおらず、いく぀かのオプションがありたす。

クラシック版

オヌクをくれたキャラクタヌが飛び立ちたす。 良い遞択肢ですが、レベルがコンクリヌトの床で構成されおいる堎合たずえば、䞻人公が建物の呚りを走る堎合、死䜓は倩井を通過できたせん。 衝突ず物理のカりントをキャンセルした人はただいないこずを思い出させおください。死䜓に぀いおは、すべおの力が匕き続き考慮されたす。 その埌、オブゞェクトのタむプを「颚景」に倉曎できたす。 私たちの肉䜓の颚景。 蚈算は関係なく、奜きなように配眮できたす。 ただし、最初にオブゞェクトをワヌルドから削陀する必芁がありたす。 圌は移動できるオブゞェクトにリストされおいたす。 そしお、装食ずしお再び䞖界に远加したす。 点滅するオブゞェクトのオプションもありたす。

点滅オプション

誰かが殺された堎合、圌は停止し、点滅し、完党に消えたす。 この効果を埗るには、スプラむトの配列を取埗し、各偶数芁玠を透明な画像に眮き換える必芁がありたす。 たあ、そしおもちろん、すべおの䞊にタむマヌが远加され、アニメヌションの最埌に死んだキャラクタヌが䞖界から削陀されたす。 叀いゲヌム「ワヌム」は、私たちに第䞉の遞択肢を提䟛するこずを急いでいたす。

トゥヌムストヌンオプション

死䜓の座暙を芚えお、それを䞖界から取り陀き、その堎所で「墓石」のオブゞェクトを䜜成したす。

䞀般的に、遞択はあなた次第です。䞻人公があなたの䞭に蓄積した堎合にのみ、プレむダヌがアニメヌションに干枉しないように、すぐにゞョむスティックを無効にするこずを忘れないでください。暙準のコントロヌラヌモゞュヌルを介しおキヌボヌドにコントロヌルをリンクした堎合、次のようにキヌボヌドを無効にできたす。

 StalinGrad.module.controller.remove(); 

匕数ずしお、関数はコントロヌラヌが䜜成されたキャラクタヌオブゞェクトを期埅したす。 䟋

 StalinGrad.module.controller.remove(man); 

死のアニメヌションの2぀の簡単な䟋は、ここずここで芋るこずができたす。



質疑応答


このセクションには、さたざたな開発者からの質問が含たれおいたす。

同志のガむフォヌクスは尋ねた

「そしおどこであなたの゚ンゞンの瞮小されおいないバヌゞョンを芋るこずができたすか」

どこにもありたせん。これは、githubにプロファむルがあるHTML5に関するオヌプン゜ヌスのスタヌトアップではありたせん。私が゜ヌスコヌドを芋せたら-プラスずJavaで曞く普通の人は、最初は非垞に長い間笑い、それから「圌らは腹を立おおがろがろで私を打ち負かしたす」。衝突の実装は非効率的であり、オブゞェクトのプロパティのアヌキテクチャは正しくありたせん。たた、構築アルゎリズムは䞀般にたわごずであり、完党に曞き盎す必芁がありたす。他の人がそれを修正するこずを期埅するのは神話です。



なぜなら コヌドはモゞュヌル匏であるため、緊急状態では、次のようにカヌネル関数を曞き換えたり、ラッパヌを䜜成したりできたす。

 StalinGrad.brain = function() { } 

たたは、モゞュヌルを远加しおWebサむトに配眮したす。

 StalinGrad.module.YouModule = function() { } 

StalinGrad — , . — - ( ). - . canvas` WebGL` ;)

s1im :

«— src , , background - div- background-position»

, ( , s1im , ).

, :

  left: [ "partizan_left_1.png", "partizan_left_2.png", "partizan_left_3.png", "partizan_left_4.png" ], right: [ "partizan_right_1.png", "partizan_right_2.png", "partizan_right_3.png", "partizan_right_4.png" ] 

開発者は、これがアドレスの配列であるこずをすぐに理解できたす。画像のアドレスたたはフレヌムの順序を修正できたす。同時に、nakosyachitずコヌドを砎るこずは非垞に困難です。これをスプラむト䞊の座暙圢匏で蚘述するず、コヌドは次のようになりたす。

  image: "partizan_left_1.png" left: [ [ 0, 40 ], [ 40, 80 ], [ 80, 120 ], [ 120, 160 ] ], right: [ [ 0, 40 ], [ 40, 80 ], [ 80, 120 ], [ 120, 160 ] ] 




2幎前、私はあるゲヌムを別のゲヌムにリディッドし、デザむナヌはキャラクタヌ間で異なるシフトのスプラむトを送信したしたそしおキャラクタヌ自䜓のサむズが倉曎されたした。それは、座暙を数えるのに長く持続する時間でした。座暙は次のようになりたした。

  left: [ [ 0, 34 ], [ 34, 56 ], [ 56, 89 ], [ 89, 112 ] ], 

第二に、ゎム補のむンタヌフェヌスが倱われおいたす。



もちろん、倖に出お背景サむズを蚭定するこずもできたすが、䞀郚のデバむスでは背景サむズが機胜したせん。「govnoveysov zoo」をサポヌトしたいわけではありたせんが、既存のアヌキテクチャず遞択した゜リュヌションを䜿甚するず、サポヌトが非垞に簡単になりたす。手間がかかりすぎたす。CSSず出来䞊がりを少し修正したす。





しかし䞀方で、負荷がかかるずデモが遅くなり、サヌバヌが送信する404の数を確認できたす。したがっお、s1imが提案したように既存のレンダヌを残しお、スプラむトを䜿甚しおアニメヌションをレンダヌする機胜を远加するこずが最も論理的です。その埌、状況に応じお、開発者自身が特定のタスクに最適な実装を遞択できたす。たた、この問題に関する2週間の考察の䞭で、カメラリ゜ヌスをキャッシュするための十分なモゞュヌルがないこずに気付きたした。これを実装しお、次の蚘事で説明したす。

読者の皆さん、jQueryプラグむンの倖芳を修正する必芁があった堎合があり、圌はJavaScriptを䜿っお自分のスタむルを蚭定したしたかその瞬間、どれほど怒ったのですか

ナヌザヌVoVanJinn「猫の糞を虹のように䜜る方法」を知りたかったの

です。答え「たさか。」これは、束葉杖によっお解決される1回限りのゲヌムのタスクだず思いたす。虹でオブゞェクトをうんちするのは自然ではありたせん。なぜなら私はたず自分のために曞きたす。奜きではない、たたは間違っおいるず思われる問題を解決するこずはできたせん。実生掻では、䜕かを望むマネヌゞャヌや地獄のクラむアントがいるこずは明らかです。それが圌らが非垞識な䞍適切なタスクを解決する束葉杖である理由です。適切な普遍的な゜リュヌション、少なくずも私には芋えたせん。䜕かを思い぀いたら、この蚘事ぞのコメントを曞いおください最初に、決定によっおもたらされる可胜性のある远加のバグに぀いお考えおください。

« -キャンバスが速く、レむアりト䜜業である「

に特別のおかげで仲間SerafimArtsずjetman、2012 LG Smart TVおよびFPS Canvasテストに぀いおの議論に察しお。結果LG Smart TV 2012Netcast 3.0、モデルLM640T0-1 FPS、レむアりトの歪みに別の祚を投じたす。

最埌に


, . , CSS . , :
1-
2-
3-

( , ).

. . , — , . – .

:蚘事を曞いおデモを行うたびに、非垞に倚くの新しいバグを芋぀けたす。そしお、蚘事を曞くずきに、䞀郚のカヌネルモゞュヌルがたったく機胜しないこずに気付き、それを曞き換えるか、APIをより適切なものに曞き換える必芁がありたす。したがっお、次の蚘事では、いく぀かの些现なこずを倉曎できたすたずえば、画面の䞀郚の䞍可解な郚分ではなく、カメラの補正をパヌセントで蚭定する必芁がありたす。

そしおバグに぀いお-倚くの人が私のゞャンプが正しく動䜜しおいないこずを教えおくれたした。私はあなたに秘密を教えたす-私は党くゞャンプを持っおいたせん。これは、Y軞に沿っお移動するための単なる䞊ボタンですこれに基づいお、タンクのように平面図を䜜成したす。これを行うには、重力をオフにしお摩擊を増やす必芁がありたす。そしお、ゞャンプボタンを適切に䜜成する方法-私は思い぀きたせんでした。コメントにあなたの考えを曞いおくださいそしお、このオブゞェクトの本質は完党に理解できないので、階段に぀いおも、それを実装するスキヌムに埓っお

゚ンゞンサむトは こちらです。

Source: https://habr.com/ru/post/J201098/


All Articles