我们创建的视频游戏(第 12 部分:示例游戏创建第 5 部分)
时间:2022-12-18阅读:47来源:柠檬博客作者:柠檬博客
介绍
在 11 中,我们添加了选项模式。这次我想加个排名。
关于排名我们将使从标题屏幕进入排名屏幕并在那里检查排名成为可能。基本上,它将与添加最后一个选项屏幕相同。
[过渡图像]
我们使用本地存储来存储排名。
使用本地存储基本上,只要记住数据的存储、检索和删除这三种类型,就可以应付。
保持您可以使用 localStorage.setItem( 'key', 'val' ) 或 localStorage.key= 'val' 保存。
localStorage.jslocalStorage.setItem( 'key', 'val' ); localStorage.saveKey = 'val';
获得您可以使用 localStorage.getItem('key') 或 localStorage.key 获取值。
localStorage.jsvar val1 = localStorage.getItem( 'key' ); var val2 = localStorage.key;
删除使用 localStorage.removeItem( 'key' ) 删除特定键的值,您可以使用 localStorage.clear() 删除所有数据。
localStorage.jslocalStorage.removeItem( 'key' ); localStorage.clear();源代码
首先,添加处理初始化本地存储,并在游戏开始时读取排名数据。源代码如下。
本地存储初始化、保存、加载// 変数 var localScores = new Array(); var localRankinPos; // ゲーム後のローカルランキングの順位(1以上:順位、-1:ランク外、-2:オプション設定が初期値ではないため保存無し) function init(){ { // ローカルランキングスコア取得 localScores = localStorage.scores; if( localScores == null ){ // 保存されていない場合は初期化して保存 localScores = new Array( 5 ); for( var i=0; i<localScores.length; i++ ){ localScores[i] = 0; } localStorage.scores = localScores; } else { localScores = localScores.split( ',' ); } }
■ 实施要点
如果没有数据,则从本地存储读取并设置初始值 如果数据已经存在,则设置为变量* 虽然保存为数组,但实际上是本地存储内部的字符串,所以读取后必须转换为数组变量。接下来,标题画面的源代码如下。
标题画面// タイトル画面ループ function titleMainLoop() { drawText( "コインゲット", 0, 20, '#000000', 12, TEXT_HCENTER ); drawText( "ゲーム開始", 0, SC_H - 100, '#000000', 12, TEXT_HCENTER ); drawText( "オプション", 0, SC_H - 70, '#000000', 12, TEXT_HCENTER ); drawText( "ローカルランキング", 0, SC_H - 40, '#000000', 12, TEXT_HCENTER ); if( keyTrg == KEY_UP ){ cursorNum--; if( cursorNum < 0 ) cursorNum = 0; } if( keyTrg == KEY_DOWN ){ cursorNum++; if( cursorNum > 2 ) cursorNum = 2; } // 選択カーソル表示 if( cursorNum == 0 ){ drawFill( 100, SC_H - 98, 12, 12, 0x0000FF, null ); drawFill( 188, SC_H - 98, 12, 12, 0x0000FF, null ); } else if( cursorNum == 1 ){ drawFill( 100, SC_H - 68, 12, 12, 0x0000FF, null ); drawFill( 188, SC_H - 68, 12, 12, 0x0000FF, null ); } else if( cursorNum == 2 ){ drawFill( 78, SC_H - 38, 12, 12, 0x0000FF, null ); drawFill( 208, SC_H - 38, 12, 12, 0x0000FF, null ); } if( keyTrg == KEY_SPACE ){ if( cursorNum == 0 ){ gameInit(); // ゲーム画面初期化へ } else if( cursorNum == 1 ){ optionInit(); // オプション画面初期化へ } else if( cursorNum == 2 ){ localRankingInit(); // ローカルランキング画面初期化へ } } }
■ 积分
基本上与之前的选项画面添加相同的修改。接下来,排名画面的源码如下。
排名画面// ローカルランキング画面ループ function localRankingMainLoop() { drawText( "ローカルランキング", 0, 15, '#000000', 16, TEXT_HCENTER ); for( var i=0; i<localScores.length; i++ ){ drawText( ""+(i+1)+"位", (SC_W >> 1) - 100, 50+(i*30), '#000000', 12, TEXT_NONE ); drawText( ""+localScores[i]+"", (SC_W >> 1) + 50, 50+(i*30), '#000000', 12, TEXT_NONE ); } if( keyTrg == KEY_SPACE ){ titleInit(); // タイトル初期化へ } }
■ 积分
由于“localScores”变量包含5个排名数据,它们按顺序显示。接下来,将反映排名数据并显示结果。
排名数据反映,结果展示// ゲーム結果画面初期化 function resultInit() { localRankinPos = -2; if( updateLife == initLife && updateCoinChangeScore == initCoinChangeScore && updateCoinShowNumScore == initCoinShowNumScore && updateCoinShowNum == initCoinShowNum ){ localRankinPos = saveLocalRanking( score ); } gameState = 2; // ゲーム結果画面ループへ } // ゲーム結果画面ループ function resultMainLoop() { // ローカルランキングのランクイン状態表示 if( localRankinPos == -2 ){ drawText( "オプションが変更されているためランキング保存されません", 0, 70, '#000000', 10, TEXT_HCENTER ); } else if( localRankinPos == -1 ){ drawText( "ランク外でした", 0, 70, '#000000', 10, TEXT_HCENTER ); } else { drawText( "「"+localRankinPos+"位」にランクインしました", 0, 70, '#000000', 10, TEXT_HCENTER ); } } //----------------------------------------------------------- // saveLocalRanking : ローカルランキング保存 // 引数 : 保存データ // 戻り値 : データ保存位置(-1で保存無し) //----------------------------------------------------------- function saveLocalRanking( saveData ) { var savePos = -1; // データ保存位置 var i; // データの挿入位置をチェック for( i=0; i<localScores.length; i++ ){ if( saveData > localScores[i] ){ savePos = i; break; } } if( savePos != -1 ){ // ランクインした時のみローカルストレージに保存 for( i=localScores.length-1; i>savePos; i-- ){ localScores[i] = localScores[i-1]; // データを1つずらす } localScores[savePos] = saveData; localStorage.scores = localScores; savePos++; } return savePos; }
■ 积分
仅在选项设置未更改时应用排名数据 您是否在结果屏幕中排名?显示 样本更新下面是一个反映所有这些变化的例子。
看笔通过野岛() 上.
请尝试排名是否保存。
在最后这一次,我可以使用本地存储来保存排名。我认为有一些场景可以在web系统上使用本地存储,所以我认为值得了解。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308632013.html
47人参与,
0条评论
登录后显示评论回复