Javascriptゲーム開発:『三國志 曹操伝』コンポーネント開発(4) マップブロックを使って大きな地図を作成_JavaScriptスキル
私たちは子供の頃、ジグソーパズルで遊んで、自分の手で組み立てました。今日はJavaScriptを使ってパズルを作成する方法を勉強します。こちらもパズルですが、手作業でやるよりもjsでパズルする方が面倒なので、将来的にはエンジンに最適化する予定です。
1. はじめに
上記は、あまり詳しくは説明しません。「曹操の伝説」に精通しているプレイヤーは、「三国志 曹操」のマップが小さなマップ タイルで構成されていることを知っています。それは、冒頭に書いてあることと同じです。非常に面倒です。しかし、トラブルさえもスキルであることに変わりはないので、ここでそれを共有します。気に入っていただければ幸いです。
2. コードの説明
今日は説明の仕方を変えて、まず原理を考えてみましょう。さて、写真がある場合は、それをいくつかの部分に切り、スクランブルします。では、js を使用してそれらを整理する場合、どうすればよいでしょうか?写真の順番については話さないでください。まず、写真をまとめるのが難しいです。この時点で、難易度を下げていくつかのオプションを提供します:A. マージンを使用してゆっくり調整します B. 配列を使用して配置します C. あきらめます
この質問で、A を選択するのは賢明ではありません。C を選択するということは、どちらかわからないことを意味します。選択肢Bが一番良いようです。配列を使用するように指示されているので、コードから始めましょう。みんなの興味をそらさないように。
js コード:
/*
*プロンプト:
*ハードルを追加したい場合は、文字列: "{{上にハードルを追加します。"そして、「{{ハードルを追加した後、上のベクトルにハードルを追加します。」お願いします。
*グリッドのタイプを追加または変更する場合は、文字列「{{上に新しいグリッドを追加します。」を検索します。
*地図の位置を変更したい場合は、「{{上の地図の余白を変更します。」という文字列を見つけてください。
※cridのアイコンを変更した場合はアイコンのサイズも変更する必要があります。 「{{上のアイコン サイズを変更する」を見つけます。サイズを変更するには。
*/
//ハードル、軍事、資源の地図。
var vView = [];
/*備考:
*L: 陸地 *S: 海 *R: 川 *W: 沼地 *A: 芝生 *B: 橋 *H: 家 *h: 病院 *w: 倉庫 * b: 証券取引所 *M: 陸軍士官学校 *m: 軍事工場
*r: 研究センター *P: 港 *D: ドック *s: 造船所
*/
var mScene = {
'L ': ['./land.png', '陆地']
, 'S': ['./sea.png', '河流']
, 'T': ['./tree. png', '树木']
, 'B': ['./bridge.png', '桥']
, 'C': ['./beach.png', '沙滩']
};
//{{上に新しいグリッドを追加します。
var mCurrent = {
マージン: {
左: -1
、上: -1
、右: -1
、下: -1
}
、位置: {
X: -1
、Y: -1
}
、タイプ: 'NONE'
};
var mTitle = {};
var sHurdleONE =
'S,S,S,S,S,S,S,S,S,S,S'
';T,L,T,T,T, T、S、S、S、S、T'
';T、L、L、T、S、S、S、S、S、L、T'
';T、L、L、 L,C,C,C,S,S,T,S'
';T,L,L,L,C,C,C,B,B,L,T'
';T, L、L、C、C、C、C、S、S、L、T'
';T、L、L、C、C、T、S、S、L、L、T'
//{{上にハードルを追加します。
var vHurdles = [sHurdleONE];
//{{ハードルを追加した後、上のベクトルにハードルを追加します。
function _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin)
{
var mCoordMember = {
左: nWidthBasic
、上: nHeightBasic
、右: nWidthBasic nPicWidth
、下: nHeightBasic nPicHeight
};
var mPositionMember = {
X: (mCoordMember.left - mMargin.x) / nPicWidth
, Y: (mCoordMember.top - mMargin.y) / nPicHeight
};
var mItem = {
座標: mCoordMember
、位置: mPositionMember
、タイプ: cType
};
mItem を返す;
}
function _loadHurdle(sHurdle)
{
var nBasic = 0;
var nWidthBasic = nBasic; //左マージン。
var nHeightBasic = 0; //マージントップ。
//{{上のマップの余白を変更します。
var nPicWidth = 45; //画像の幅はnBasicです。
var nPicHeight = 45; //ピクターンの高さはnHeightBasicです。
//{{上のアイコンのサイズを変更します。
var nSub;
var nRow;
var nCol;
var v = sHurdle.split(';');
var vRec = [];
for(nSub = 0; nSub
vRec[vRec.length] = vCrid;
}
for(nRow = 0; nRow
for(nCol = 0; nCol
var mMargin = {x: nBasic, y: nBasic};
vView[vView.length] = _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin);
nWidthBasic = nPicWidth;
}
nHeightBasic = nPicHeight;
nWidthBasic = nBasic;
}
}
// ベクトル 'vView' で地図を表示します。
function _showMap(sID)
{
var xDiv=document.getElementById(sID);
var xGrid;
var xImg;
var nTop = 0;
var nSub;
var sIdPrefix = 'ID_IMG_NUM_';
var sIdGrid = 'ID_A_NUM_';
for(nSub = 0; nSub
if(mGrid){
var xMargin = mGrid.Coord;
var cType = mGrid.Type;
var xProper = mScene[cType];
if(xProper){
xGrid = document.createElement('a');
xImg = document.createElement('img');
xImg.style.position = '絶対';
xImg.style.marginLeft = xMargin.left;
xImg.style.marginTop = xMargin.top;
xImg.src = xProper[0];
xImg.style.border = '0px ソリッド #000000';
xImg.id = sIdPrefix nSub;
xImg.style.width = 45;
xImg.style.height = 45;
xImg.style.display = 'ブロック';
xGrid.onclick = function(e){
var xCurrentGrid = e.target;
var sId = xCurrentGrid.id;
var nIdAsSub = parseInt(sId.substring(sIdPrefix.length, sId.length));
mCurrent = vView[nIdAsSub];
if(!mCurrent){
alert("エラー 0004.");
}
};
xGrid.title = xProper[1] '(' parseInt(mGrid.Position.X) ', ' parseInt(mGrid.Position.Y 2) ')';
xGrid.id = sIdGrid nSub;
xGrid.appendChild(xImg);
xDiv.appendChild(xGrid);
}else{
alert("エラー: 0003.");
}
}else{
alert("エラー: 0002.");
}
}
}
//ハードルのマップを表示します。
関数 _showHurdle(nHurdle)
{
if(vHurdles[nHurdle - 1]){
_loadHurdle(vHurdles[nHurdle - 1]);
_showMap('ID_DIV_BATTLEFIELD');
}else{
alert("エラー: 0001.");
}
}
ほら、このプログラムは 195 行しか使っていないので、ちょっと面倒そうです。大丈夫、ゆっくり説明して。
まず、ここに素材を置きましょう:
『曹操伝』のマップ素材を整理していないため、素材は『曹操伝』のものではありません。曹操」ということで、適当に見つけてきました。しかし、まだ使用できます。気にしないでください。
面倒なコードは最も混乱しやすいので、この時点ではスタイル設定とパズルのコアをしっかり区別してください。
パズルの核心はどこですか?ここ:
var mScene = {
'L ': ['./land.png', '陸地']
, 'S': ['./sea.png', '川']
, 'T': ['. /tree.png', '木']
, 'B': ['./bridge.png', '橋']
, 'C': ['./beach.png', 'ビーチ']
};
//{{上に新しいグリッドを追加します。
var mCurrent = {
マージン: {
左: -1
、上: -1
、右: -1
、下: -1
}
、位置: {
X: -1
、Y: -1
}
、タイプ: ' NONE'
};
var sHurdleONE =
'S,S,S,S,S,S,S,S ,S, S,S'
';T,L,T,T,T,T,S,S,S,S,T'
';T,L,L,T,S,S 、S、S、S、L、T'
';T、L、L、L、C、C、C、S、S、T、S'
';T、L、L、L ,C,C,C,B,B,L,T'
';T,L,L,C,C,C,C,S,S,L,T'
';T,L ,L, C,C,T,S,S,L,L,T'
//{{上にハードルを追加します。
var vHurdles = [sHurdleONE]/ /{{ ハードルを追加した後、上のベクトルにハードルを追加します。
まず、S、T、B、C、L を定義します。S は川、T は木、B はそれぞれを表します。橋、ビーチ、L は陸地を表します。 var mCurrent は後で役立つので、まだ説明しません。次に、var mTitle ですが、これは特にタイトルを表示するために使用されるため、説明は省略します。キーは以下のとおりです:
';T、L、T、T、T、T、S、S、S、S、 T'
';T,L,L,T,S,S,S,S,S,L,T'
';T,L,L,L,C,C,C,S, S,T,S'
';T,L,L,L,C,C,C,B,B,L,T'
';T,L,L,C,C,C, C,S, S,L,T'
';T,L,L,C,C,T,S,S,L,L,T'
これコードは、一緒に接続された S、T、B、C、および L の定義されたコアです。後で、S、T、B、C、L の幅と高さを定義してそれらを接続するだけです。また、配列内の位置を調整するだけでスタイルを変更できます。
マップの場合は後から追加されますが、マップが属する配列名を vHurdles 配列に追加するだけで、呼び出すときに対応する添字を直接記述することができます。
function _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin)
{
var mCoordMember = {
左: nWidthBasic
、上: nHeightBasic
、右: nWidthBasic nPicWidth
、下: nHeightBasic nPicHeight
};
var mPositionMember = {
X: (mCoordMember.left - mMargin.x) / nPicWidth
, Y: (mCoordMember.top - mMargin.y) / nPicHeight
};
var mItem = {
座標: mCoordMember
、位置: mPositionMember
、タイプ: cType
};
mItem を返す;
}
function _loadHurdle(sHurdle)
{
var nBasic = 0;
var nWidthBasic = nBasic; //左マージン。
var nHeightBasic = 0; //マージントップ。
//{{上のマップの余白を変更します。
var nPicWidth = 45; //画像の幅はnBasicです。
var nPicHeight = 45; //ピクターンの高さはnHeightBasicです。
//{{上のアイコンのサイズを変更します。
var nSub;
var nRow;
var nCol;
var v = sHurdle.split(';');
var vRec = [];
for(nSub = 0; nSub
vRec[vRec.length] = vCrid;
}
for(nRow = 0; nRow
for(nCol = 0; nCol
var mMargin = {x: nBasic, y: nBasic};
vView[vView.length] = _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin);
nWidthBasic = nPicWidth;
}
nHeightBasic = nPicHeight;
nWidthBasic = nBasic;
}
}
// ベクトル 'vView' で地図を表示します。
function _showMap(sID)
{
var xDiv=document.getElementById(sID);
var xGrid;
var xImg;
var nTop = 0;
var nSub;
var sIdPrefix = 'ID_IMG_NUM_';
var sIdGrid = 'ID_A_NUM_';
for(nSub = 0; nSub
if(mGrid){
var xMargin = mGrid.Coord;
var cType = mGrid.Type;
var xProper = mScene[cType];
if(xProper){
xGrid = document.createElement('a');
xImg = document.createElement('img');
xImg.style.position = '絶対';
xImg.style.marginLeft = xMargin.left;
xImg.style.marginTop = xMargin.top;
xImg.src = xProper[0];
xImg.style.border = '0px ソリッド #000000';
xImg.id = sIdPrefix nSub;
xImg.style.width = 45;
xImg.style.height = 45;
xImg.style.display = 'ブロック';
xGrid.onclick = function(e){
var xCurrentGrid = e.target;
var sId = xCurrentGrid.id;
var nIdAsSub = parseInt(sId.substring(sIdPrefix.length, sId.length));
mCurrent = vView[nIdAsSub];
if(!mCurrent){
alert("エラー 0004.");
}
};
xGrid.title = xProper[1] '(' parseInt(mGrid.Position.X) ', ' parseInt(mGrid.Position.Y 2) ')';
xGrid.id = sIdGrid nSub;
xGrid.appendChild(xImg);
xDiv.appendChild(xGrid);
}else{
alert("エラー: 0003.");
}
}else{
alert("エラー: 0002.");
}
}
}
以上の代コード很简单,自己可看看,提示自己:当你在开公開的过程中如果弹出一个エラー: 0002,エラー: 0003、エラー: 0001 のようなものは、問題を表しており、事前に検査する必要があります。これは、プログラムの公開時に一時的に起動するために設計されています。
次に参照:
function _showHurdle(nHurdle)
{
if(vHurdles[nHurdle - 1]){
_loadHurdle(vHurdles[nHurdle - 1]);
_showMap('ID_DIV_BATTLEFIELD');
}else{
alert("エラー: 0001.");
}
}
これは在你要弄出地图的调用関数数,当你在html代网里書上:源代网下載
三、演示效果 演示图在下:
は静的であるためデモは行われません。この方法は非常に面倒で、多くの図が表示されるのは非常に遅いですが、大家が優れた方法を持っている場合は、これは技術です。
大家多支持希望。谢谢。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









iPhone のデフォルトの地図は、Apple 独自の地理位置情報プロバイダーである Maps です。マップは改善されていますが、米国外ではうまく機能しません。 Googleマップと比べて何も提供するものはありません。この記事では、Google マップを iPhone のデフォルトの地図として使用するための実行可能な手順について説明します。 Google マップを iPhone のデフォルトの地図にする方法 Google マップを携帯電話のデフォルトの地図アプリとして設定するのは、思っているよりも簡単です。以下の手順に従ってください – 前提条件 – 携帯電話に Gmail がインストールされている必要があります。ステップ 1 – AppStore を開きます。ステップ 2 – 「Gmail」を検索します。ステップ 3 – Gmail アプリの横にある をクリックします

uniapp で地図および測位機能を使用する方法 1. 背景の紹介 モバイル アプリケーションの人気と測位技術の急速な発展により、地図および測位機能は現代のモバイル アプリケーションに不可欠な部分になりました。 uniapp は、Vue.js に基づいて開発されたクロスプラットフォーム アプリケーション開発フレームワークであり、開発者が複数のプラットフォームでコードを共有しやすくなります。この記事では、uniapp でのマップと位置決め関数の使用方法を紹介し、具体的なコード例を示します。 2. uniapp-amap コンポーネントを使用してマップ関数を実装します。

小紅書が若者の間で人気が高まるにつれて、小紅書に店舗を開くことを選択する人が増えています。多くの初心者販売者は、店舗の住所を設定するときに困難に直面し、地図に店舗の住所を追加する方法がわかりません。 1. 小紅樹の地図に店舗の住所を追加するにはどうすればよいですか? 1. まず、あなたのストアが小紅書に登録されたアカウントを持っており、ストアが正常にオープンしていることを確認してください。 2. Xiaohonshu アカウントにログインし、ストア バックエンドに入り、[ストア設定] オプションを見つけます。 3. ストア設定ページで、[ストアアドレス] 列を見つけて、[アドレスを追加] をクリックします。 4. 表示される住所追加ページで、都道府県、市、区、郡、番地、番地などの店舗の詳細な住所情報を入力します。 5. 入力後、「追加を確認」ボタンをクリックします。小紅書が住所をお知らせします

ハイチャートを使用してマップ ヒート マップを作成するには、特定のコード サンプルが必要です。ヒート マップは、さまざまな色合いで各エリアのデータ分布を表現できる視覚的なデータ表示方法です。データ視覚化の分野では、Highcharts は非常に人気のある JavaScript ライブラリであり、豊富なチャート タイプと対話型関数を提供します。この記事では、Highcharts を使用してマップ ヒート マップを作成する方法を紹介し、具体的なコード例を示します。まず、いくつかのデータを準備する必要があります

サービス開始から 1 年後、Google マップは新しい機能をリリースしました。地図上に目的地までのルートを設定すると、移動ルートがまとめられます。旅行が始まると、携帯電話のロック画面からルート案内を「参照」できます。 Google マップを使用すると、到着予定時刻とルートを確認できます。旅行中は、ロック画面でナビゲーション情報を表示できます。また、携帯電話のロックを解除すると、Google マップにアクセスせずにナビゲーション情報を表示できます。携帯電話のロックを解除すると、Google マップにアクセスせずにナビゲーション情報を表示できます。携帯電話のロックを解除すると、Google マップにアクセスせずにナビゲーション情報を表示できます。 携帯電話のロックを解除すると、Google マップにアクセスせずにナビゲーション情報を表示できます。 Google マップにアクセスせずにナビゲーション情報を表示できます。

進化し続けるテクノロジーの世界では、デジタル マップをナビゲートする能力は不可欠なスキルとなっています。この記事では、iPhone および iPad で Apple Maps Guides を使用する方法についての包括的なガイドを提供します。この機能は、ユーザーが周囲を探索し、旅行を計画する方法に革命をもたらす機能です。 Apple マップはすべての Apple デバイスに組み込まれたアプリケーションであり、シームレスなナビゲーション エクスペリエンスを提供するために常に更新および改善されています。最も注目すべき機能の 1 つは、世界中のさまざまな都市で訪れるべき興味深い場所の厳選されたリストを提供するガイド機能です。この機能は旅行者にとって有益であるだけでなく、自分の街の新しい魅力を発見したいと考えている地元の人々にとっても有益です。 iOS で Apple マップを使用する方法ガイド まず、Apple マップにアクセスします

上記および著者の個人的な理解 協調的で接続された自動化されたモビリティ (CCAM) では、インテリジェント運転車両が周囲の環境を認識、モデル化、分析する能力が強化されるほど、車両はより認識し、理解して意思決定を行うことができます。複雑な運転シナリオを安全かつ効率的に実行できます。高精度 (HD) マップは、センチメートルレベルの精度と車線レベルのセマンティック情報で道路環境を表現し、インテリジェント モビリティ システムの中核コンポーネントであり、CCAM テクノロジーを実現する重要な要素となっています。これらのマップは、自動運転車両が周囲の状況を理解する上で強力な利点を提供します。 HD マップは、物理センサー (マップ)、つまり LIDAR、カメラ、GPS、IMU からの知識を統合して道路環境のモデルを構築するため、隠れセンサーまたは仮想センサーともみなされます。 HDマップ

HTML、CSS、および jQuery を使用してインタラクティブなマップを作成する方法 マップは、ユーザーが地理的位置および関連情報をより簡単に理解し、ナビゲートするのに役立つ一般的な視覚化ツールです。 HTML、CSS、jQuery を使用すると、インタラクティブなマップを作成し、楽しくて便利な機能を追加できます。この記事では、これらのテクニックを使用して独自のインタラクティブなマップを作成する方法について説明します。 HTML 構造の作成 まず、マップを保持する HTML 構造を作成する必要があります。以下は基本的なものです
