カテゴリ : ゲーム

やっと…。やっとEversionの最終面をクリアすることが出来まました。ゲームのボリューム自体はそんな大きくないんですが、如何せん難しく思いの外クリアまで時間がかかってしまいました。とはいってもゲームバランスが著しく悪いということもなく、一見無理そうな場面も攻略の仕方は用意されていたりと、決してクソゲーではなくむしろ良作の部類なので、アクションゲームの腕に自信がある方は是非プレイしてみてください。


では、攻略方法というか行き詰まったところについて書いていきます。


まず、第7ステージまでクリアした時点で、GEMの数が足りていないとそこでゲームオーバーになってしまうので、各ステージで取り損ねたGEMを取り直す必要があります。基本的にはそんなに困難もなく回収できますが、それでも一工夫しないと回収が困難なところもありますので、その部分についてのみ記載します。


第3ステージでつまるところはステージ中盤でしょうか。このジャンプで超えられるブロックの高さは3ブロック分しかなく、普通にやるとブロックを飛び越えてGEMを回収することはできません。雲を足場に出来るようにEversionポイントを探すことや下の破壊可能なブロックを壊すことも考えましたが、これはどうも囮のようです。雲を足場に出来るEversionポイントがないことと(厳密には有るけどこの場面では出来ない)、ジャンプできる隙間がないときはブロックが破壊できないようになっています。

なので少し古典的ですが画面の左にいる敵をブロックの右端まで移動させてから、そいつを踏み台にしてブロックを超えてください。移動の仕方についてはEversionポイントで一つ前の世界に戻して、タイミングを計って再度Eversionして下さい。

8-18


続いては題4ステージ。これは攻略方法よりむしろアクションゲームの上手下手の問題でもありますが、ステージ直前のEverisionポイントで世界を切り替えると今まで取れなかったGEMが一部を除き簡単にとれるようになります。問題は下の画像のようなところ。上のブロックを回収するためには顔ブロックを足場にしなければなりませんが、この大きな手が非常に邪魔です。この手を出さなくするには世界を切り替えれば済むことですが、そうすれば逆に上のブロックの左右の端に物体が配置されジャンプで飛び越せなくなってしまいます。なのでここは世界を切り替えずに何とか上まで到達せねばなりません。方法としては足場のぎりぎりまで寄ってジャンプしながら周り込んで真上のブロックに飛び乗るしかありません。しかも二段目のブロックに飛び乗るときに赤い手にあたってしまうと死んでしまうので、回り込むときに膨らみ過ぎないように気をつけなければなりません。

8-19


続いては第5ステージです。ここはちゃんと攻略方法を知っていたらさして苦労することなくすべてのGEMを回収することが出来ます。ただ、初見ではすべてのGEMを回収することは難しいです。僕自身も何度か周回しないと攻略方法がわかりませんでした。

まずステージ序盤いきなり進めなくなります。

8-21
ここで少しもどってEversion出来るポイントを探します。2つほどEversionできるところがありますが、上のほうで世界を切り替えます

8-20


世界を切り替えたら、先ほどのブロックが踏んだら壊れるようになります。ここで注意なのですが、そのまま下に行かず一旦戻ってください。

8-22


戻って世界を戻し、もう一方のEversionポイントで世界を切り替えてください。

8-238-24
顔ブロックを叩くとGEMが出るようになります。ここでのGEMをすべて回収したらこのままステージ攻略を進めていきます。後はそんなに困難な場面もないので、GEMの回収にいそしみます。


第6ステージについては、困難な場面はもちろんありますが(ラストの強制スクロールなど)完全にスピードとの勝負なので、ここではあえて書きません。

次回は最終ステージの攻略と感想を書いていきます。皆さんも是非チャレンジしてみてください!

    このエントリーをはてなブックマークに追加 mixiチェック



前回のエントリーから真のエンディングを目指して、まずはすべてのGEM回収を目指しました。で、何度かくじけそうになりつつも、すべてのGEMの回収に成功し、第7ステージに臨みました。

EVE1

この段階ですでに前回と違ってここでEversionできるようになっています。よりおどろおどろしい感じにステージが変貌します。

EVE4

ステージはこんな感じでおどろおどろしいのですが、難易度はそんなに変わっていません。サクサクっとゲームを進めてステージクリアまで到達しました。いよいよエンディングと期待に胸を膨らませていたら、次のステージへ移動しました。

EVE6

どうやらこれが真のラストステージのようです。ふんどしを締め直してゲーム再開。

EVE9


いや、難しすぎるでしょ。。これ。これまでのプレイで相当に上達したつもりでしたが最終ステージは今までのステージと比べ物にならないほど難しいです。かなりわかりにくいところにEversionできるポイントがあり、しかもそれを見逃してしまうと延々と同じところをループする仕様となっていて、またこれが厄介なんすよ。今日はもう死にすぎて心が折れたのでここまでにします。クリア出来たら、GEMの回収の中でも難易度の高かったところや、最終面の攻略方法について改めて書いていきたいと思います。

alt=
    このエントリーをはてなブックマークに追加 mixiチェック



お盆の連休前にダウンロードしたenchant.jsですが、お恥ずかしながら今日まで何も始めていませんでした。さすがにこれではイカンと思い、まずは仕様の確認から始めました。

githubからダウンロードしたZIPファイルを解凍し、実際に動かせるモノはないかと物色したところ、「examples」フォルダがありましたので開いてみます。examplesフォルダ内に「beginner」「expert」「plugins」とありますので、まずは beginnerフォルダを開きます。

beginnerフォルダの中身は以下のような感じ。

・hellobearフォルダ
  ・index.html(ブラウザで表示するためのファイル)
  ・main.js(アニメーションなどメインの処理が記述されたプログラム)
  ・ui.enchant.js(UIを定義したプログラム)
これをブラウザ上で動かしてみるとこんな感じです。【サンプル

実際にどういった記述で動いているかを見てみましょう。

index.htmlはmain.jsとenchant.jsを呼び出しているだけのファイルなので、特筆することはありませんので、画面の実際に動作を定義しているmain.jsを見ていきます。

[main.js]
enchant();
   window.onload = function(){
   var game = new Game(
320, 320);
   game.preload("
chara1.png");
   game.onload = function(){
      bear = new Sprite(
32, 32);
      bear.image = game.assets["
chara1.png"];
      bear.x =
0;
      bear.y =
0;
      bear.frame =
5;
      game.rootScene.addChild(bear);
        bear.addEventListener("
enterframe", function(){
        
this.x += 1;
        this.frame =
this.age % 2 + 6;
        bear.addEventListener("touchstart", function(){
        game.rootScene.removeChild(bear);
        });
      };
    game.start();
};

※実際のプログラム内には仕様に関するコメントが記述されているのでプログラムの知識がなくてもある程度理解できるようになっています。


では一つづつ見ていきます。


enchant();
enchant.jsを利用するのに必要な処理です。これによりenchant.jsやプラグインで定義されているクラスを各々呼び出したプログラムで利用することが可能になります。

window.onload = function(){
ページの読み込みが開始されたときに実行される関数です。すべての処理はこの関数内で実行されることになります。

var game = new Game(320, 320);
ゲームオブジェクトの定義をします。Gameクラスのインスタンスを作成した時にゲーム画面のサイズを代入します。
new Game(横幅のサイズ[ピクセル], 横幅のサイズ[ピクセル]);

game.fps = 15;
fps(frame per second)、つまり一秒間の画面の更新回数を定義します。デフォルトでは15になっていますので、この数値を調整することでスピード感を調整で出来ます。ためしに100で設定するとこんな感じになります。
サンプル
new Game(横幅のサイズ[ピクセル], 横幅のサイズ[ピクセル]);

game.preload("chara1.png");
ゲームが開始される前に、ゲームに必要な画像などの素材をすべて前もってロードしておくための処理です。これによってゲーム中の動作が鈍ったりすることを防ぎます。ビギナー用のサンプルではchara1.pngしか使いませんが、必要に応じてファイルを指定する必要があります。

game.onload = function(){
ロード完了後に実行する処理の定義を記述します。

bear = new Sprite(32, 32);
オブジェクトの表示についての定義を行います。Spriteクラスのインスタンスを作成して(bearというSpriteオブジェクトの作成と言い換えられます。)表示サイズの初期値を代入します。
new Sprite(横幅のサイズ[ピクセル], 横幅のサイズ[ピクセル]);

bear.image = game.assets["chara1.png"];
表示する画像の指定を行います。先ほどのgame.preload()で前もってロードしておいた素材はgame.assetsにて格納されるので、その中から表示したい画像を指定します。

bear.x = 0;
bear.y =
0;
作成したSpriteオプジェクト「bear」のX座標と、Y座標の初期値を設定します。これを例えばbear.x = 50; bear.y = 50;という数値に変更したら、以下のような感じでクマが現れる最初の場所が変わります。
サンプル

bear.frame = 5;
 先ほど、Sptiteオブジェクトを作成したときの横32px×縦32pxのサイズでフレームを区切り、左上から数えて5番目に位置する箇所を一番初めに表示するための記述です。(chara1.pngは実際には以下のような画像で、左上から五番目にあたるのが白クマの立ち絵にあたります。)
chara1

game.rootScene.addChild(bear);
オブジェクト(bear)をノードツリーに追加するメソッドです。Game.rootScene は Group を継承した Scene クラスのインスタンスで、描画ツリーのルートになる特別な Scene オブジェクト。この rootScene に描画したいオブジェクトを子として追加する (addChild) ことで、毎フレーム描画されるようになります。

game.rootScene.addChild(bear);
Spriteオブジェクト(bear)をノードツリーに追加するメソッドで、この記述により、オブジェクトを子として追加することでbearを毎フレーム描画されるようになります。

bear.addEventListener("enterframe", function(){
this.x +=
1;
this.frame =
this.age % 2 + 6;
});
EventTarget#addEventListener(event, listener)
イベント取得時に行う処理(リスナ)について定義するコンストラクタ。
ここの処理を簡単に説明すると、新しいフレームを描画する前"enterframe"のとき、X座標を1ずつ移動し、その度にクマの画像が切り替わるようにフレームの処理を行うということになります。
 this.ageはオブジェクトの描画回数のことで、 % 2 はageを2で割ったときの余り、すなわち0か1となります。それに6を加算するので6→7→6→7番目のフレームを繰返して表示することを意味します。 

bear.addEventListener("touchstart", function(){
ame.rootScene.removeChild(bear);});
ここでの処理は、"touchstart"(クリックもしくはタップ)したとき、クマの』オブジェクトを文字通りrootSceneのツリーから除外する指定になっています。

game.start();
ゲームスタートの関数を実行します。

まずは、サンプルから雰囲気をつかむことから始めました。今後はここから機能を拡張していきたいと思います。_blankspan style=160color: #FF0000;span style=span style= ゲームスタートの関数を実行します。
    このエントリーをはてなブックマークに追加 mixiチェック