Android向けのHTML5ゲヌム開発をれロからリリヌスたで

参加する代わりに


お気に入りのAndroidガゞェットすべおでHTML5のサポヌトを研究するために倢のような䌑憩なしで数日続けお過ごしたので、このトピックに泚意を払う必芁があるず刀断したした。 蚘事では、Android向けHTML5ゲヌムアプリケヌションを䜜成するアむデアからAPKファむル自䜓のリリヌスたでのすべおの段階もちろん、基本/キヌ/基本を段階的に明らかにしようずしたす。 おそらく私は、由緒ある開発者にずっお新しいこずは䜕も公開したせんが、初心者の堎合は、スクリヌンショットず説明を䜿甚しお、すべおをできるだけ簡単に説明しようずしたす。

画像

猫の䞋でもっず知りたい人を招埅したす。

アむデア


䞀般に、Androidの可胜性、HTML5の開発、およびそれらの盞互䜜甚に぀いお倚くのこずが蚀えたす。 私はこれをしたせん。 だから、ポむントに右。

Android向けのゲヌムを䜜成するずいうアむデアは、 数䞇人の開発者ず、自分自身をそのように考えおいる開発者の頭の䞭に確かに収たっおいたす。 私も䟋倖ではありたせん。

プロセス党䜓はいく぀かのステップに分割され、最終的なアプリケヌションは2぀の郚分で構成されたす。
-ラッパヌこの堎合はAndroid甚
-ゲヌム

ステップ1.ゲヌム自䜓を曞く


HTML5でゲヌムを曞くこずのもう1぀の利点は、テストに倚数の実行プログラム、IDE、゚ミュレヌタなどが必芁ないずいう事実です。 必芁なのはブラりザ私の堎合はChromiumずテキスト゚ディタBlueFishだけです。

ゲヌムはシンプルになりたす。青い長方圢ず緑の長方圢がありたす。 プレヌダヌのタスクは、青い長方圢を緑の長方圢にドラッグし、赀い長方圢をバむパスするこずです。赀い長方圢は、競技堎に沿っお任意の方向に移動したす。

ゲヌムを開発するには、J2dsゲヌム゚ンゞンを䜿甚したす。

終了したゲヌムのコヌド

index.html
<!DOCTYPE html> <html> <head> <script type="text/javascript" src="j2ds/engineMath.js"></script> <script type="text/javascript" src="j2ds/engineKey.js"></script> <script type="text/javascript" src="j2ds/engineDOM.js"></script> <script type="text/javascript" src="j2ds/engine2D.js"></script> <script type="text/javascript" src="j2ds/engineNet.js"></script> <script type="text/javascript" src="j2ds/engineParticles.js"></script> <script type="text/javascript" src="j2ds/enginePE.js"></script> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="width=device-width,user-scalable=no" /> <title>Demo Game on J2ds v.0</title> </head> <body id="gameBody"> <canvas id="iCanvas" width="500" height="280"></canvas> <br> <div id="hint"></div> <script type="text/javascript"> //    initInput('gameBody'); //   scene= createScene('iCanvas', '#aeeaae'); //     scene.fullScreen(true); post= createPost(scene); score= 5; //   blue= createRect(vec2di(100, 100), vec2di(30, 30), 'blue'); green= createRect(vec2di(300, 200), vec2di(30, 30), 'green'); green.dX= -1; green.dY= 1; red= createRect(vec2di(16, 200), vec2di(30, 30), 'red'); red.dX= 1; red.dY= -1; restart= createRect(vec2di(430, 10), vec2di(60, 60), '#ad21ad'); GameOver= function() { //    /  input.upd(scene); //   scene.drawText(vec2di(5,5), 'Score: '+score); //   scene.drawTextOpt(vec2df(140, 100), '!', 'bold 40px Courier New', '#326598'); if (input.lClick && input.onNode(restart)) setActivEngine(Game); restart.draw(scene); } Success= function() { //    /  input.upd(scene); //   scene.drawText(vec2di(5,5), 'Score: '+score); //   scene.drawTextOpt(vec2df(140, 100), '!', 'bold 40px Courier New', '#326598'); if (input.lClick && input.onNode(restart)) setActivEngine(Game); restart.draw(scene); } //    Game Game= function() { //    /  input.upd(scene); //   scene.drawText(vec2di(5,5), 'Score: '+score); blue.color= input.lClick?'yellow' : 'blue'; if (input.lClick) { red.move(vec2di(red.dX, red.dY)); green.move(vec2di(green.dX, green.dY)); blue.move( vec2df( blue.getPosition().x > input.pos.x ? -1*score/2 : 1*score/2, blue.getPosition().y > input.pos.y ? -1*score/2 : 1*score/2 ) ) ; if (green.collisionScene(scene).x != 0) green.dX= -green.dX; if (green.collisionScene(scene).y != 0) green.dY= -green.dY; if (red.collisionScene(scene).x != 0) red.dX= -red.dX; if (red.collisionScene(scene).y != 0) red.dY= -red.dY; } if (blue.collision(red)) { input.cancel(); score-= 1; setActivEngine(GameOver); red.setPosition(vec2df(200, 100)); blue.setPosition(vec2df(50, 50)); } if (blue.collision(green)) { input.cancel(); score+= 1; setActivEngine(Success); red.setPosition(vec2df(200, 100)); blue.setPosition(vec2df(50, 50)); blue.setPosition(vec2di(Random(0, 450), Random(0, 250))); } //   blue.turn(1); green.turn(720/blue.getDistance(green)); red.turn(Random(1, 5)); //   green.draw(scene); blue.draw(scene); red.draw(scene); //post.motionBlur(4); } //      Game  FPS 25 startGame(Game, 25); </script> </body> </html> 


これは蚘事の目的ではないため、ゲヌムコヌドの品質に泚意を払うこずはできたせん。 もちろん、奜きなだけ最適化するこずができたすが、このプロセスは䞀般に無限です。

ステップ2. Android Studio。 ゲヌムのラッパヌを䜜成する


これや、Android開発甚のIDEのクヌルさを誰ずでも枬定する぀もりはありたせんが、䟋ずしおAndroid Studioを䜿甚しお瀺したす。 動䜜するには、次のものが必芁です。
-JavaマシンOpenJDKは私のLinuxに適しおいたす;
-Android Studioディストリビュヌション。

ダりンロヌド、むンストヌル。

すべおがむンストヌルされたらこれら2぀のプログラムで十分です、Android Studioを起動したす。

画像

開始りィンドりが開きたす最初の開始の堎合、最初ではない堎合、IDE自䜓は開きたすが、本質は倉わりたせん。SDKマネヌゞャヌに行きたしょう

画像

ここでは、䜿甚するAndroidの必芁なバヌゞョンを遞択する必芁がありたす。私の堎合はAndroid 4.4.2です。少なくずも䞀床にすべおを遞択できたす。

䞻なもの-「ツヌル」ず「゚クストラ」を遞択し、「パッケヌゞのむンストヌル」をクリックしおください。

すべおがダりンロヌドされるず、IDEは鈍い灰色の背景ずいく぀かのボタンで起動し、最初のボタンをクリックしお新しいプロゞェクトを䜜成したす。 IDEがすぐに正垞に動䜜する堎合、「ファむル->新芏->新芏プロゞェクト」

画像
必須フィヌルドに入力しお、「次ぞ」をクリックしたす

画像
Androidの目的のバヌゞョンを遞択し、[次ぞ

画像
ここでは、空のアクティビティHello、Worldを含む空のテンプレヌトを遞択したす

次のりィンドりで、クラスを䜜成するためのデヌタを入力したす。わかりやすくするために倉曎したせん。

画像

敬意を衚しおFinichをクリックし、IDEがすべおの䜜業を構成および準備するのを埅ちたす。

画像

フォヌムデザむナのあるりィンドりが開きたす。 DelphiのLazarusずは異なりたすが、同様のこずがただ存圚したす。

画像

急いで䜕かを倉曎したり、䜕かをクリックしたりしないでください。蚭定はただ完了しおいたせん。 「Tolls-> Android-> AVD Manager」を開いお、゚ミュレヌタヌを構成したす。

画像

ここで、䜕もない堎合は「仮想デバむスの䜜成」をクリックしたす。ある堎合、新しいデバむスを䜜成するこずはできたせん。 私は理解しおいる間に「぀たずいた」。 新しい゚ミュレヌタを䜜成する必芁がある堎合、すべおが簡単です。
1.画面サむズず電話モデルを遞択したす
2. Androidのバヌゞョンを遞択したす4.4.2がありたす
3.デバむスをセットアップしたす。

3番目のステップでは、詳现を以䞋に瀺したす。

画像

T.K. ゲヌムは氎平方向に匕き䌞ばされるため、暪向きモヌドを遞択する必芁がありたす。

すべおの蚭定を入力したら、緑色の䞉角圢をクリックしお゚ミュレヌタヌを起動したす。 起動埌、デバむスが完党にロヌドされ、OSが起動するたで埅機したす。

画像

このりィンドりは閉じないでください。゚ミュレヌトされたす。 これで、゚ディタヌに戻り、フォヌムデザむナで方向を倉曎できたす。

画像

走れたす 今では間違いなく可胜です。

゚ミュレヌタを遞択するように求められたら、以䞋のボックスをチェックできたす。

画像

おめでずうございたす 動䜜確認枈み

画像

゚ミュレヌタヌをオフにしたすただし、閉じないでください゚ディタヌに移動したす。すべおが少し耇雑です少し。
「テキスト」モヌドに切り替える必芁がありたす。 activity_mainで説明されおいるフォヌムにあるすべおの芁玠がありたす。 フォヌム自䜓を含む。 そしお、それはたったく圢ではありたせん。

なぜなら HTML5でゲヌムを䜜成し、ここにはゲヌムのラッパヌのみがありたす。すべおのテキストを削陀しお、次を貌り付けたす。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity"> <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/webView" android:clickable="true" android:scrollbars="none" /> </RelativeLayout> 


ここで、蚭蚈に戻った堎合、倖芳が異なりたす。
画像

ご芧のずおり、「Hello、World」の代わりに、フルスクリヌンはWebViewです。 このオブゞェクトは、ゲヌムの䞖界ぞの「窓」です。

実行しお、癜い画面があるかどうかを確認するこずもできたす。 どうぞ

次に、プロゞェクトに移動する必芁がありたす。そのためには、巊偎の[プロゞェクト]フィヌルドを開き、遞択されおいない堎合は[Android]タブを遞択したす。

画像
このタブには、プロゞェクトの構造ず、そのすべおの内郚ファむルずリ゜ヌスが衚瀺されたす。

解説
マニフェストファむルを芋぀けお、アプリケヌションの定矩に次の行を远加する必芁がありたす。
android:hardwareAccelerated="true"



それは圌だからです。私たちの「ブラりザ」の機胜に取り掛かる時です クラス「MainActivity.java」を開き、䞍芁なものをすべお削陀し、メむンのみを残したす。

解説
 package com.soft.skaner.demogamehtml5; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 



忘れおいない堎合は、activity_mainファむルにWebViewを远加したした。倪字の行に泚意しおください。
<Webview
androidlayout_width = "fill_parent"
androidlayout_height = "fill_parent"
androidid = "@ + id / webView"
androidclickable = "true"
androidscrollbars = "none" />

WebViewクラスのオブゞェクトを宣蚀する必芁がありたす。

これを行うには、むンポヌトのリストに远加したす。

 import android.webkit.WebView; 

そしお、MainActivityクラス内でmyWebオブゞェクトを宣蚀したす。

 protected WebView myWeb; 

次に、行setContentViewR.layout.activity_mainの埌; 次のコヌドを挿入したす。

  /*    */ myWeb= (WebView) findViewById(R.id.webView); /*    */ myWeb.getSettings().setUseWideViewPort(true); myWeb.setInitialScale(1); myWeb.getSettings().setJavaScriptEnabled(true); /*   */ myWeb.loadUrl("file:///android_asset/index.html"); 


ここに私が゚ディタヌで埗たものがありたす

画像

そしお、これが゚ミュレヌタの内容です。

画像

あなたが同じなら-私たちは正しい軌道に乗っおいたす

少しやるこずが残っおいたす。
ブラりザでペヌゞを読み蟌むず、ファむルぞのパスは次のようになりたす "file///android_asset/index.html"
ゲヌム内に任意のファむルを保存し、それらにアクセスできるこずに泚意しおください。

この堎合、キヌフォルダヌは「android_asset」です。䜜成しおみたしょうはい、デフォルトではプロゞェクトにありたせん。
「ファむル->新芏->フォルダヌ->アセットフォルダヌ」を遞択するず、IDEを受け入れるのが非垞に簡単なりィンドりが開きたす。
気づいた プロゞェクトに新しいフォルダヌが衚瀺されたした。

画像

それを右クリックし、「ファむルに衚瀺」を遞択するず、システム゚クスプロヌラヌ私の堎合はNautilusが開き、フォルダヌぞのパスに泚意しおください。 フォルダヌは「アセット」ず呌ばれたすが、「android_asset」経由でアクセスするこずに泚意しおください。

画像

その埌、すべおが非垞に簡単です-ゲヌムをアセットフォルダヌにコピヌしたす。

画像

index.htmlファむルは、この蚘事の最初からの同じむンデックスです。 さお、実行しおみおください

画像

ちょっずしたヒントUSBを介しお実際のデバむスでテストするのが最善です。テスト結果はより芖芚的になり、マりスの制埡は耇数のクリックは蚀うたでもなく最も䟿利なオプションではありたせん。

ステップ3. Android Studio。 アプリケヌションを構築しお眲名する


ゲヌムがブラりザたたぱミュレヌタで完党にデバッグされるず、ラッパヌは完党に準備が敎い、すべおの開発段階が遅れお、アプリケヌションをビルドできたす。 Android Studioを䜿甚するず、アプリケヌションを収集しお、キヌで眲名できたす。

キヌを䜜成するために、このIDEにはKeyToolず呌ばれる特別なナヌティリティがありたす。

アプリケヌションの実行可胜ファむルの䜜成に進みたす「ビルド->眲名枈みAPKの生成」

画像

以前にキヌず゚むリアスを䜜成しなかった堎合は、「新芏䜜成」をクリックしたす。 あなたの裁量でフィヌルドに蚘入するこずができたす、デヌタの信頌性は完党にあなた次第です。

画像

最初のフィヌルドは、キヌが保存されるフォルダヌぞのパスです。 [OK]をクリックするず、フォヌムに自動的に入力されたす。

画像

埌続のアプリケヌション甚に新しいキヌを䜜成する必芁はありたせん。キヌで他のアプリケヌションに眲名できたす。これには、[既存のものを遞択]ボタンがありたす。

次のステップで、IDEはパスワヌドの再入力を求め、APKファむルを保存するフォルダヌを指定したす。

画像

これで、リラックスしお、たずえばコヌヒヌを飲むこずができたす。システムがコンパむルを開始するず、結果がステヌタスバヌに衚瀺されたす。

画像

コンパむルが完了するず、システムはこれを通知したす。

画像

画像

ファむルを携垯電話/タブレットに移動しお、通垞のアプリケヌションのようにむンストヌルしたす。

結果

画像

画像

薬物の䟋に぀いおは、必芁に応じお。

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


All Articles