[JavaScript] ECMAScript5(JavaScript 1.8.5)におけるstrictモードのまとめ

使用法

全体への適用

スクリプト全体の最初に「”use strict”;」と書く。

かならず他の文の先頭でなければならない(コメントは先に書かれていてもOK)。

途中に書いた場合は、strictモードにならない。

そのため、複数のファイルを動的に読み込んだ場合(requireなど)、ファイルの先頭に「”use strict”;」の宣言があっても、先に別のファイルのスクリプトが実行されていれば非strictモードになる。

関数内のスコープへの適用

スコープの先頭に「”use strict”;」と書く。

strictモードの詳細

グローバル変数への代入禁止

"use strict";
sample = 17; // throws a ReferenceError

// グローバルオブジェクトのプロパティを指定する場合は可能。
window.sample = 17; // OK

代入文で暗黙的に失敗するのがエラーになる

本来代入できない場合に、かならずエラーを出すようになる。

"use strict";

// グローバル変数「NaN」への代入
NaN = 1; // throws an Error

// 書き込み禁止のプロパティへの代入
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// getterしかないアクセサプロパティへの代入
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// 新しいプロパティを追加できないオブジェクトへの代入
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // throws a TypeError

削除できないプロパティを削除しようとするとエラーが発生

"use strict";
delete Object.prototype; // throws a TypeError

非strict モードでは何も起きない。

オブジェクトリテラル内のプロパティ名は重複できない

"use strict";
var o = { p: 1, p: 2 }; // !!! syntax error

非strict モードでは、最後の指定が有効になる。

関数の引数名の重複禁止

function sum(a, a, c) // !!! syntax error
{
  "use strict";
  return a + b + c; // wrong if this code ran
}

非strict モードでは、最後の指定が有効になる。つまり、それ以前の引数にはargumentsでしかアクセスできない。

8進数表記の禁止

"use strict";
var sum = 015 + // !!! syntax error
          197 +
          142;

そもそも8進数表記は、ECMAScriptの仕様に含まれていない(ただし、現状全ブラウザが対応済みなので、動くことは動く)。

withの禁止

"use strict";
var x = 17;
with (obj) // !!! syntax error
{
  x;
}

eval()のスコープを限定

非strictモードでは、「eval(“var x;”)」 というコードは変数xを周囲のスコープに展開するが、それをさせない。

strictモードの内部で実行されるeval()内の処理は、strictモードで実行される。

スクリプト全体や関数が非strictモードでも、「eval(“‘use strict’; var x = 42; x”);」と書けば、eval()で実行する文字列の文はstrictモードとして扱われる。

変数のdeleteを禁止

var x;
delete x; // !!! syntax error

eval、argumentsの保護

evalおよびargumentsという名前に対して言語構文でのバインドや代入を不可にする。以下は、すべて構文エラーになる。

"use strict";
eval = 17;
arguments++;
++eval;
var obj = { set p(arguments) { } };
var eval;
try { } catch (arguments) { }
function x(eval) { }
function arguments() { }
var y = function eval() { };
var f = new Function("arguments", "'use strict'; return 17;");

argumentsの値保持

argumentsが特殊なオブジェクトとして扱われる。関数呼び出し時の値をかならず保持する。

非strictモードでは仮引数の値を変更すると、対応するargumentsの各値も変わってしまう。

function f(a)
{
  "use strict";
  a = 42;
  return [a, arguments[0]]; // 非strictモードはarguments[0] === a
}
var pair = f(17);
console.assert(pair[0] === 42); // false
console.assert(pair[1] === 17); // true
var x = 17;
var evalX = eval("'use strict'; var x = 42; x");
assert(x === 17); // true
assert(evalX === 42); // true

arguments.callee、arguments.callerの廃止

"use strict";
var f = function() { return arguments.callee; };
f(); // throws a TypeError

thisの非オブジェクト化

通常thisは、どんな場合でもその関数の親オブジェクト(ない場合はグローバルオブジェクト)を返すが、Function#call()やapply()で指定した値をかならず返すようになる。

// 以下はすべてtrue
"use strict";
function fun() { return this; }
console.assert(fun() === undefined);
console.assert(fun.call(2) === 2);
console.assert(fun.apply(null) === null);
console.assert(fun.call(undefined) === undefined);
console.assert(fun.bind(true)() === true);

予約語の追加

implements、interface、let、package、private、protected、public、static、yield。

変数名などには使えない。

functionを使った関数宣言をスクリプトのトップレベルと関数内のみに制限

ifやforの{}内でも駄目。


“use strict”;
if (true)
{
function f() { } // !!! syntax error
f();
}
for (var i = 0; i < 5; i++) { function f2() { } // !!! syntax error f2(); } function baz() // OK { function eit() { } // OK } [/javascript]

まとめ

全体的に非常に複雑で、あまりにも通常のJavaScriptと違いすぎて、かえって混乱の元になる。

個人的には、使わないほうがいいと思う。

参考サイト

Strict モード – JavaScript | MDN

26. 8月 2016 by takasho
Categories: JavaScript | Tags: |

マイクラ的ブロック系ゲームのまとめ:オープンワールドのサンドボックスゲーム、FPSなど

以下では、Minecraft(マイクラ)などに見られる、ブロックを使って建築などを行うサンドボックスゲームのタイトルを紹介する。

# 一部、サンドボックスゲームではないものも含まれる。

用語

voxel(ボクセル、ヴォクセル):3D座標での体積を示す1単位。ゲームでいうブロックのこと。
ビルド:ブロックを積み上げての建設
クラフト:アイテム作成
マイニング:採掘(採鉱)
生産:農業、漁業など
アバター:プレイヤーキャラなどのカスタマイズ(特に見た目)
RPG:ストーリーやプレイヤーキャラの成長要素などがあるか

ビルド要素のあるタイトル

Portal Knights

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:アクションRPG、サンドボックスゲーム
プレイスタイル:シングルプレイ、マルチプレイ
言語:英語(日本語対応なし)
課金形態:売り切り1480円
リリース状況:アーリーアクセス

見た目がきれいなサンドボックスゲーム。

ぶっちゃけ、全体的に『ドラゴンクエスト ビルダーズ』的な印象。RPG要素が強い。

プレイヤーキャラにはクラスが存在し、戦士・魔術師・レンジャー(弓使い)などを選べ、能力もカスタマイズできる。

基本、シングルプレイだが、4人までのマルチプレイも可能。

ワールドは、ランダムに自動生成される。

現在、アーリーアクセスなので、今後に期待。

Block N Load

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、アバター
ジャンル:FPS、サンドボックスゲーム
プレイスタイル:シングルプレイ、マルチプレイ
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:アーリーアクセス

フィールドを自分で構築できるFPS。

基本無料のオンラインゲームだが、シングルプレイも楽しむことができる。

FPSとしてはシンプルなので、飽きやすいという声も。

Creativerse

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:MMORPG、アクションRPG、サンドボックスゲーム
プレイスタイル:マルチプレイ
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:アーリーアクセス
システム要件:中

見た目のきれいなサンドボックスゲームのMMORPG。

Portal KnightsやドラゴンクエストビルダーズをMMOにしたような印象。

Cubic Castlesよりおすすめか?

Trove

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:MMORPG、アクションRPG、サンドボックスゲーム
プレイスタイル:マルチプレイ
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:正式
システム要件:中

カスタマイズ性が高く、乗り物もあるなど、さまざまな要素が入ったMMORPG。

ゲームとしての完成度は高いものの、その評価は賛否両論。というより、ヘビーユーザーからは厳しい意見が多い。

典型的なpay to winとのこと。

Cubic Castles

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:MMORPG、アクションRPG、サンドボックスゲーム
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:正式
システム要件:低

オーソドックスなタイプのMMORPG。

見た目はほどほどだが、ビルド・クラフト要素などサンドボックスゲームとして一通りの要素はそろっている。

低スペックのマシンでも動く。

Blockstorm

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:FPS、サンドボックスゲーム
プレイスタイル:マルチプレイ
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:正式
システム要件:低

フィールドもキャラも武器までも、すべてブロックでつくることができる。

本当にいろいろなことができるので、評価の高いサンドボックスFPS。

一部、ゲームパッドに対応している。

ドラゴンクエスト ビルダーズ

プラットフォーム:PS4、PS3、PlayStation Vita
表示タイプ:3D
要素:ビルド、クラフト、マイニング、生産、アバター
ジャンル:RPG、サンドボックスゲーム
プレイスタイル:シングルプレイ
言語:日本語
課金形態:売り切り PS4:8424円、PS3:7344円、PS Vita:6264円(パッケージ、ダウンロード)
リリース状況:正式

『ドラゴンクエスト1』の世界を舞台にしたオーソドックスなサンドボックスゲーム。

マイクラとは違い、明確なストーリー(シナリオ)があり、クリア目標が設定されている(ラスボスがいる)。

また、ドット絵ベースのマイクラとは異なり、グラフィックはきれい。

全体的に丁寧にわかりやすくつくられており、建物の「設計図」などもあって、サンドボックスゲームの初心者におすすめ。

PlayStationプラットフォームの「クロスセーブ」に対応。

視点に難があるのと、マルチプレイにまったく対応していないのが残念。ただし、他プレイヤーにデータを公開する機能はある。

StarMade

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:アクションゲーム、サンドボックスゲーム
プレイスタイル:シングルプレイ、マルチプレイ
言語:英語
課金形態:売り切り1480円
リリース状況:アーリーアクセス(アルファ)
システム要件:低

珍しいSFのブロックゲーム。宇宙船をブロックでビルドできる。

低スペックのマシンでも動くように開発されている。

Javaが必要。

キューブクリエイター3D

プラットフォーム:Nintendo 3DS(ダウンロードのみ)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、生産、アバター
ジャンル:サンドボックスゲーム
プレイスタイル:シングルプレイ
言語:日本語
課金形態:売り切り800円
リリース状況:正式

いっそ清々しいくらい、見た目もシステムも徹底的にMinecraftに似せている。正直、著作権的に大丈夫かと思えるくらい。

アクション時は主観視点、ビルド時は俯瞰視点と変えられる点が使いやすい。

日本ではアークシステムワークスがリリースしているが、海外のBig John Gamesが開発している。

Gunscape

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド
ジャンル:FPS、サンドボックスゲーム
プレイスタイル:シングルプレイ、マルチプレイ
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:正式
システム要件:低

フィールドもキャラも武器までも、すべてブロックでつくることができる。

本当にいろいろなことができるので、評価の高いサンドボックスFPS。

一部、ゲームパッドに対応している。

BLOCKADE 3D

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド
ジャンル:FPS、サンドボックスゲーム
プレイスタイル:マルチプレイ
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:アーリーアクセス
システム要件:低

フィールドをブロックでつくることができる。

4チーム最大32人まで同時バトルが可能。

Blockland

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド
ジャンル:アクションゲーム、サンドボックスゲーム
プレイスタイル:シングルプレイ、マルチプレイ
言語:英語
課金形態:売り切り980円
リリース状況:正式
システム要件:低

2007年リリースの古いゲームだが、けっこういろいろなことができる。

ただ、サーバはあまり安定していない模様。

ブロック系に近いサンドボックスゲーム

Empyrion – Galactic Survival

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:アクションゲーム、サンドボックスゲーム
プレイスタイル:シングルプレイ、マルチプレイ
言語:英語
課金形態:売り切り1780円
リリース状況:アーリーアクセス
システム要件:中

ブロック系というわけではないが、サンドボックスゲームとして必要な要素が一通りそろっているSFゲーム。

リアルなグラフィックが特長で、ユーザーがつくれるものも他のサンドボックスゲーム以上に美しくできる。

現状、リアル系としては最高クラスかも。

テラリア

プラットフォーム:PC(Steam)、PS4、PS3、PlayStation Vita、3DS
表示タイプ:2D
要素:ビルド、クラフト、マイニング、アバター
ジャンル:アクションゲーム、サンドボックスゲーム
言語:英語、日本語など
課金形態:売り切り Steam:980円
リリース状況:正式

ブロック単位のゲームというわけではないが、2Dのサンドボックスゲーム。

横スクロールのアクションゲームとして戦闘に重きを置いている。

2Dであるのと見た目がドット絵なので、好き嫌いが比較的はっきり分かれるゲーム。

Scrap Mechanic

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト
ジャンル:アクションゲーム、サンドボックスゲーム
プレイスタイル:シングルプレイ、マルチプレイ
言語:英語
課金形態:売り切り1980円
リリース状況:アーリーアクセス
システム要件:中

ブロックゲームに近いサンドボックスゲーム。

ライトな雰囲気のグラフィックが美しく、建物や乗り物のビルドなどができる。

アーリーアクセスだが、評価の高いタイトル。

8BitMMO

プラットフォーム:PC(Steam)
表示タイプ:2D
要素:ビルド
ジャンル:MMORPG、サンドボックスゲーム
言語:英語(日本語対応なし)
課金形態:基本無料
リリース状況:正式
システム要件:低

見下ろし視点(バードビュー)のサンドボックスゲーム。

ユーザーコミュニティは非常に大きいが、全体の評価はいまひとつ。

グラフィックは2Dのドット絵で、お世辞にもクオリティが高いとはいえない。

低スペックマシンでも動く。

その他

Stonehearth

プラットフォーム:PC(Steam)
表示タイプ:3D
要素:ビルド、クラフト、サバイバル
ジャンル:運営シミュレーション(SLG)
プレイスタイル:シングルプレイ
言語:英語(日本語対応なし)
課金形態:売り切り2480円
リリース状況:アーリーアクセス
システム要件:低

SLGとしての町づくりゲーム。ただし、ビルド、クラフト、サバイバル(戦闘)といった要素は一通りそろっている。まさに、マイクラを運営SLGに(ストラテジー)したようなゲーム。

ブロックゲーム的なのは見た目のみだが、キャラがさくさく動き、UIを含めたグラフィックが美しい。

ビルドはブロックをひとつひとつ組み上げるものではなく、全体を大まかに指定してそれをNPCが組み立てていく形になる。

地形は毎回ランダム生成される。

あくまでSLGなので、戦闘もNPCが行う。

やってみたいと思わせるゲーム。

Voxel Builder

プラットフォーム:PCブラウザ
表示タイプ:3D
要素:ビルド
ジャンル:3Dエディタ
言語:英語(日本語対応なし)
課金形態:無料
リリース状況:正式

ブロック単位で3Dオブジェクトを構築する無料のエディタ。ブラウザベース。

ゲーム要素はもちろんない。

似たようなエディタは「voxel editor」で検索すると、無数に出てくる。

評価

今となっては、マイクラ的ブロックゲームもけっして珍しいものではなくなった。

現状、玉石混淆といった感じだが、非常に魅力的なものも多い。

あと、基本無料や低価格のゲームがほとんどなので、気軽に始められる。

日本語対応していないものが多いのは残念だが、内容はシンプルなものが多いのでたいした問題にはならないだろう。

17. 8月 2016 by takasho
Categories: ゲーム |

[スマートフォン] パソコンで使える、無料のAndroidエミュレーター一覧:Windows向け

【2016年04月12日追記】Nox、YouWaveを追加

注意!

すでに、大半のゲームアプリがチート対策(不正対策)としてエミュレーターからは使えなくしているので、導入してももうあまり意味がない。

労力を考えると、素直に格安タブレットでも買って、そちらを使ったほうがよほど建設的。

Nox

今、一番おすすめできる完全無料のAndroidエミュ。

日本語版が正式にリリースされている、中国製のエミュレーター。日本語版公式ブログもある。

おそらく、無料で使えるもののなかでは最も安定している。特にゲームアプリの動作には定評がある。

一番のよさは、とにかく導入が簡単なこと。普通にアプリをインストールすれば、そのまますぐに使える。

また、標準でGoogle Playに対応済み。

マウス・キー入力のログ保存機能があるなど、開発者向け機能も充実している。

その他の特長

  • タッチ入力をキーボードでエミュレーション(割り当て)できる
  • ゲームパッド対応
  • 可変画面サイズ
  • マルチウィンドウ(マルチインスタンス)対応
  • スクリーンの動画撮影対応
  • バックアップ・復元機能
  • PCとのファイル共有方法
  • コマンドプロンプトからの動作設定・実行
  • スクリーンショット撮影機能

Bluestacks 2, 1

対応OS:Windows、Mac
UI:独自
ベース:独自
アプリの自動アップデート:対応

通常のアプリとして単純にインストールするだけですぐ使える。エミュレーター以前にパソコンのことがよくわからない人でも、Androidの知識があれば扱えるレベルなので、初心者におすすめ。

――だったのだが、今では無料版の制約やデメリットが大きすぎ、とてもおすすめできる代物ではない(ほとんどフリーソフトではなくなっている)。

くわしくはこちら


「BlueStacks=1つの仮想デバイス」という形なので、Android SDKのエミュや下記Genymotionのように複数の仮想デバイスをつくることはできず、細かい設定が全体的にしづらい。

動作は安定している。

ポートレート(縦向き・横向きの自動変更)に対応している。

デフォルトの解像度を変更するには、Windowsの場合、レジストリを直接いじるしかない(1の場合。Macの場合は不明)。

デフォルトでPCのキーボードやゲームパッドに対応しているが、設定が面倒。

メッセージ系アプリの『LINE』も動く。

くわしくはこちら

Andy

対応OS:Windows、Mac
UI:Androidオリジナル
ベース:VirtualBox

BluestacksやGenymotionよりも多機能であることを謳っている。実際のスマートフォンをコントローラ(ゲームパッド)として使えたり、マイクに対応していたりと確かに機能が豊富。

仮想環境の外にあるローカルファイルにアクセスすることができる。

Genymotion

対応OS:Windows、Linux、Mac
UI:Androidオリジナル
ベース:VirtualBox

無料版でもカメラやGPSのエミュレートに対応している。

高速をうたっているが、環境によっては起動も処理も遅い。

仮想デバイスを複数作成することができ、デフォルトでいろいろなバリエーションがある。Androidのバージョンも4.1から最新版までそろっている。

全体的に開発者向けという印象。ただし、無料なのは個人利用の場合のみ。商用利用は有料なので、自作アプリのテスト目的には使いづらい。

Android SDKの公式エミュレーターに近いためか、特定の環境では不具合が出ることがある。

現状、Google Playを手動でインストールしなければならず、またその手順がややこしいので注意。

Google Playのインストール方法

実は、GenymotionはARMエミュレータではなく独自にAndroidをエミュレートしている。だから、環境によっては高速に動作する。

しかし、そのために一部のアプリが動かない。

元々、無料版だけ提供されていたときにはARMエミュレータもGoogle Playも入っていたのだが、有料版を出す際、Googleの規約に抵触していたらしく、のちに削除された。

そこで、有志が下記のサイトで公開してくれているARMエミュレータ「Genymotion-ARM-Translation_v1.1.zip」をGenymotionの仮想デバイスにインストールする。

XDA Developers

このサイトはモバイル関連のプログラミングについてのサイト。上記のものは個人がつくったものだが、採用実績が豊富なようなので安心して使える。

ダウンロードしたファイルを起動した仮想デバイスのウィンドウにドラッグ&ドロップすればいい。

その後、再移動が必要になるが、この際、Genymotionのバージョンによっては、仮想デバイスのウィンドウを閉じてもVirtualBoxのプロセスが残ってしまうことがある。タスクマネージャで「VirtualBox.exe」を直接終了させるしかない。

次に、Google Playのアプリ・ファイルを同じページから仮想デバイスのAndroidバージョンに合わせてダウンロードする。

ARMエミュレータと同じように、起動した仮想デバイスにドラッグ&ドロップする。

もう一度再起動すると、Google Playがインストールされている。

Windroy

対応OS:Windows、Linux、Mac
UI:Androidオリジナル
ベース:独自

軽快に動くといわれているが、まだ発展途上の感が強い。

Google Playに非対応のため、.apkファイルを自分でエミュレーター用のフォルダに入れなければならない。

YouWave

対応OS:Windows
UI:Androidオリジナル
ベース:独自

低スペックのマシンでも動くことを謳っている。Windows XPにも正式対応。

無償版には、アドウェア(広告ウェア)がついてくる。有償版は、売り切り型で29.99ドル。

これといって特長がなく、しかもアドウェア付きなので使うべき理由はまったくない。

共通の注意事項

  • ライセンス上の問題でGoogle Playは手動でインストールしなければならない場合が多い。
  • ゲームのアプリは、チート対策なのか動かないものも多い(特にスクウェアエニックスのような大手のアプリ)
  • VirtualBox系のエミュは、Andoroid SDKのものとほとんど同じ。安定しているが、環境によっては処理も起動も遅い。

12. 4月 2016 by takasho
Categories: アプリケーション | Tags: |

[アプリ] おすすめAndroidエミュレーター『BlueStacks 2, 1』の使い方:まとめ

【2016年04月12日追記】BlueStacks 2について
【2014年12月17日追記】最新版の根本的な問題など
【2014年12月08日追記】問題の解決方法など

注意!

元々は手軽で誰でも使いやすい優良Androidエミュレータであったが、最新版の無料バージョンは制約やデメリットが大きすぎ、フリーソフトとは言えなくなっている。

メジャーバージョンアップして「BlueStacks 2」となったものの、状況は変わらず。

自作のアプリをテスト実行する環境としても使えない。

すでにおすすめできるエミュではないので、使わないほうがいい。

また大半のゲームアプリがチート対策(不正対策)としてBlueStacksからは使えなくしているので、もうあまり意味がない。

くわしくは下記を。

他に安定して完全無料のAndroidエミュレーターはいくつもあるので、無理をしてまでBlueStacksを使う意味はまったくない。

おすすめの他のアプリとしては「Nox」(くわしい説明)。

現時点(2016年04月12日)での根本的な問題

【確認途中】

Androidアプリの強制インストール

以前のバージョンのように勝手に自動インストールされることはなくなったようだが、毎日起動するたびに有料アカウントにするか、スポンサーのアプリをインストールするか専用の画面で迫られるようになった。

しかも、メニュー・ランチャー(ホーム・ランチャー)のアプリを導入すると、画面がブラックアウトして操作不能に陥る。つまり、かつての強制インストール回避方法が使えなくなった。

毎日インストールではさすがにしゃれにならないので、事実上、無料で使うのは難しくなった(フリーソフトとはいえなくなった)。

Genymotionを使うのがおすすめ。

あくまでBlueStacksを使うのなら、バージョン0.8.4がいいだろう。

BlueStacks 2

メジャーバージョンアップという名目だが、中身もサービス内容もほとんど変わっていない。

大きい変化としては、マルチタスク(マルチインスタンス)に対応した程度。

上記のとおり事実上、無料アプリではなくなっているので、使えない。

0.9.4について

さまざまな機能が加わった。

  • パソコン側のファイルの読み込み
  • 各種細かい設定
  • 全般的な高速化

ただし、無料版は問題点が多いので要注意(上記)。

ダウンロードとインストール

通常どおり。公式サイトからダウンロードしてインストールすればいい。

アドウェア、スパイウェアなどはないので安心。

Windows、Mac両対応。今のところ、Windows XP、Windows 8にも対応している(Windows 8.1やWindows 10 preview版は不明)。

Androidアプリが勝手にインストールされる問題

バージョン0.8.4くらいから、毎日BlueStacksを起動するたびにアプリが勝手にインストールされるようになった。

仮想ストレージを圧迫するのもお構いなしに、いくつもインストールされていく。

GamePopというBlueStacks独自のメニュー・アプリが原因。

最新版では、こちらのページに表示されているように、有料アカウントを取得するかスポンサーのアプリをインストールするか迫られる。

対処方法

0.9.x以降では、有料アカウントにするか、スポンサーのアプリをインストールするか迫られる専用の画面に移行する際、ブラックアウトしてしまう。

頻繁に起こるので、事実上使えない。


0.8.4ではメニュー・アプリを導入したら、アプリの自動インストールはなくなる。

おすすめのメニュー・アプリは「Nova Launcher」。

BlueStacksの終了のさせ方

ウィンドウを閉じても、タスクトレイにあるエージェント機能は動いたまま。

タスクトレイ・アイコンの右クリックメニューから「終了」を選択しても、一部のプロセス(.exeの実行ファイル)が残ってしまう。HD-Agent.exeやHD-UpdaterService.exeなど。

「HD-」で始まる名前のプロセスがそれなので、タスクマネージャなどから直接、手動で終了させるしかない。

アンインストール

【確認途中】普通にアンインストールすればいいが、Windows版では無駄なフォルダやレジストリが残ってしまうこともあるらしい。

それぞれ自分で検索して手動で削除するしかない。

サイズ(画面解像度)の変更

通常の方法では変更できない。レジストリの設定を直接いじる。

しかし、下記の大きなデメリットがあるので、基本的には変更しないほうがいい。

以下はWindows版の場合。

「ファイル名を指定して実行」から「regedit」を入力して、Windowsデフォルトのレジストリ・エディタを起動。

下記のレジストリを検索する。

\HKEY_LOCAL_MACHINE\SOFTWARE\Bluestacks\Guests\Android\FrameBuffer\0

そこの「Width」と「Height」を任意の値に変更する。

なお、縦横比は一定でなくてもかまわない。

デフォルトのウィンドウ・サイズ(画面解像度):1066 x 600

サイズ変更のデメリット

システムの表示が一部おかしくなる

メニューの一部が隠れてしまう、など。

バーチャルパッドのキー・エミュレーションがずれてしまう

パソコンのハードウェア・キーボードで操作できなくなる。

せっかくバーチャルパッドをキーボードのキーにバインドして(関連づけて)操作できるようにする機能がデフォルトで備わっているのに、初期状態で設定された有名アプリのバーチャルパッド情報がずれてしまい、事実上操作不能に陥る。

くわしくはこちら

ただし、バーチャルパッドの位置指定は画面サイズから計算した百分率で行うので、縦横比を変えなければ動作する可能性あり。

ともかく、バーチャルパッドで操作したいなら、サイズ、特に縦横比を安易に変更してはいけない

Google Playの利用

下記のことをしなくても、Googleにログインすればすぐ使えるようになる。


バージョンによってはトップからGoogle Playをすぐに使えないようだが、ブラウザからGoogle Playのページにアクセスしてログインすれば普通に使えるようになる。

現在の最新バージョン

0.9.4.4084(2014年12月6日現在)

内蔵Androidのバージョン

Android 4.4 KitKat

最新版のリリース情報

下記のサポート・サイトで確認。

なぜか本サイトにはアップデート情報がない。

バージョンの確認方法

タスクトレイ・アイコンの右クリックメニューには記載はないが、アイコン上でマウスオーバーしているとポップアップで表示される。

「プログラムの追加と削除」などのアンインストーラでBlueStacksを探すと、そこに明記されている。

アップデート方法

インストーラ(パッケージ)をダウンロードして、いちからインストールするしかない。

【確認途中】 WindowsではタスクトレイのBlueStacksアイコンの右クリックから「Check For Updates」で確認できるはずなのだが、うまくいかない。

日本語IMEの導入

Google Playなどのアプリストアから好きなIMEを導入すればいいだけ。

BlueStacksは、デフォルトでPCキーボードからの入力に対応している(変換なども)。

Android用メニューアプリの導入

ホーム画面のレイアウトなどを変更できるメニューアプリも、普通に使える。

BlueStacks自動起動の停止方法

BlueStacksをインストールすると、HD-Agent.exeという常駐プロセスが起動するようになってしまう。

これをやめさせるにはmsconfig.exeなどで、Windowsのサービスとして登録されている以下のものを停止させる必要がある。

  • BlueStacks Android Service
  • BlueStacks Log Rotator Service

さらに、スタートアップのBlueStacks Agentも停止させる。

これで「HD-」と名の付くBlueStacks関連のプロセスの自動起動を防げる。

これらを停止させても、任意でBlueStacksアプリ本体を起動させれば、なんら問題なく実行できる。

【確認途中】 上記の設定をしても、HD-Agent.exeだけ勝手に起動してしまうことがある。

パソコン・ブラウザからのAndroidアプリのインストール

BlueStacksをインストールすると、Google PlayではPCマシンをAndroidマシンとして認識してくれる。

【確認途中】 Androidブラウザと同じく、各アプリのウェブページで普通にインストールを選択すれば、BlueStacksの次回起動時に自動的にインストールされる。

ポートレートへの対応

端末に応じて画面の縦向き・横向きを切り換えるポートレート機能を有効にするには、タスクトレイのアイコンを右クリックして「ポートレイト・アプリを変える」で、自動、または有効化を選ぶ。

かならずしも、きちんと動くとは限らない。

キー・エミュレーション、ゲームパッドへの対応

基本

仮想ストレージの容量を増やす

バックバージョン

公式にCDNが用意されて配布されている。

BlueStacksは環境依存の部分が大きいので、最新版が動かない場合は古いバージョンを試してみる。

0.7.3.766

注意点

  • タスクトレイのメニューを見ると「beta中無料」と書かれている。将来的に一部有料になる可能性がある。

動作確認アプリ

モンスターストライク(モンスト):サクサク動く。BlueStacksの最新版では動かない可能性あり。
魔法使いと黒猫のウィズ(黒ウィズ)
イノティア戦記4:日本語版・英語版ともに。キーボード・エミュレーション対応
ドラゴンポーカー

不具合あり

チェンクロ:途中で止まることがある

動作しないアプリ

パズル&ドラゴンズ(パズドラ)
ラブライブ!スクールアイドルフェスティバル(スクフェス):以前は動いていたが、アプリの最新版では動かない

# スクウェアエニックス系はほぼ全滅
ピクトロジカ

【確認途中】
すごろくRPG 双刻のレガリア

12. 4月 2016 by takasho
Categories: アプリケーション | Tags: |

[プログラミング] Cocos2d-xとは:2Dゲームの無料クロスプラットフォーム統合ライブラリ 2016年版

基本

  • 統一されたAPIで、ウェブ(HTML5)、デスクトップ、モバイルのネイティブアプリ向けの開発を行える、クロスプラットフォームかつオープンソースの2Dゲーム開発用ライブラリ
  • WebGL、OpenGL、OpenGL ESをそれぞれ利用している
  • ウェブはJavaScriptオンリーだが、ネイティブアプリはC++/JavaScript/Luaでの開発が可能
  • ウェブ(Cocos2d-html)以外はサウンドもクロスプラットフォームで、オープンソースのOgg Vorbisを使える
  • 単なるOpenGL系のラッパーではなく、物理シミュレーション・GUI用クラス・背景マップ(Tiled Map Editor形式)など高級APIが充実している
  • 非常に速いペースで開発がつづけられている
  • 無償で使えるIDE、GUIエディタまである
  • AppleのObjective-C向けの「Cocos2d」、C#向けの「Cocos2d-XNA」など、いろいろなプログラミング言語・環境に対応している
  • 中国で開発されている

全体の構成

#バージョン3.x

  • Cocos2d-x(広義)
    • Cocos2d-x(狭義:C++版)
    • Cocos2d-x Lua(組み込み)
    • Cocos2d-JS(組み込み:JavaScript版)
    • Cocos2d-html(ウェブ版:Cocos2d-JSと統一されたAPI)

Cocos2d-JSとCocos2d-htmlは統合され、ネイティブアプリとウェブアプリの同時開発・同時出力(ビルド)が可能になっている。

APIの特徴

元が「Cocos2d」というObjective-C向けのライブラリだけに、iOSのAPIの影響を強く受けている。

基本的にFlashのActionScriptに似ているが、残念ながらそれよりは遥かにわかりづらく、使いづらい。

ただし、ゲームを開発する分には必要十分ともいえる。

ネイティブアプリ:狭義のCocos2d-x

各環境のネイティブコード(C++)用SDKを利用することで、C++単体でクロスプラットフォーム開発が可能になっている。

そのJavaScript版(バージョン2.x系では、JSB:JavaScript Bindingsと呼んでいた)とLua版は、C++向けの組み込みライブラリを使用しているだけ。JavaScript版は、MozzilaのSpiderMonkey。

C++版

狭義のCocos2d-x。

企業が採用しているのはほとんどがこちら。C++なので開発はしづらいが、内部の実装を隠蔽でき、セキュリティやチート行為への対策ができるためと思われる。

Lua版

中国を中心に、海外ではネイティブ版のCocos2d-JS(v2.x系のCocos2d-x JSB)よりもLua版のほうが人気が高かった(現在は不明。CocosCreatorではCocos2d-JSにのみ対応)。おそらく省メモリであるのと、組み込みでの運用実績がゲーム業界で特に豊富なためと思われる。

組み込み用のスクリプト言語なので、自作のC/C++部分と連携させる(バインドする)ことができる。

Cocos2d-JS(ネイティブ)

Cocos2d-JSのネイティブ組み込み版。

v3.xからウェブ版のCocos2d-htmlとAPIが統一され、より使いやすくなった。

Lua版と同じく、自作のC/C++部分と連携させる(バインドする)ことができる。

JavaScriptのエンジンはSpiderMonkeyでLuaエンジンより遥かに重ので、メモリをそれだけでけっこう消費するのを覚悟したほうがいい。

それが嫌なら、Lua版がおすすめ。

HTML版:Cocos2d-html

Cocos2d-JSのウェブ版(HTML版)。

WebGLを利用することでGPUによるハードウェア・レンダリングを可能にしたクロスブラウザのライブラリ。

ブラウザゲームやWebGLに対する印象が変わるくらい高速。

一部ブラウザ依存なので、サウンドはブラウザしだいになってしまう=クロスプラットフォームではない。その場合、別の汎用ライブラリである「CreateJS」にあるサウンド・ライブラリの「SoundJS」を併用する手もある。

機能性ではダントツ、しかし使いやすさではEaselJSなどにやや劣る。

バージョン

v3.x系

数々の不具合が修正され、処理速度もだいぶ向上した印象。

コマンドラインから実行できる各種ユーティリティ(Cocos)も充実し、簡単に新規プロジェクトの作成などができるようになっている(要Python)。

2015年くらいから、使えるツールも増えてきた印象。

ウェブでの話題は増えてきたが、実際の採用実績についてはあまり聞かなくなった。よって、実力・将来性ともに未知数といっていい。

v2.x系

以前は企業の採用実績が多く、最も情報の多いバージョンだったが、すでに終わっていると考えたほうがいい。

充実したGUI

拡張機能(extention)になるが、GUIライブラリも付属している。

いずれも必要十分で、もちろんハードウェア・レンダリングに対応しているので高速。

なお、v3.x系では名前空間が、ccsからccuiに変更されている

下記の専用エディタ「Cocos Studio」を使えば、WYSIWYGで簡単に画面を作成できる。

充実した機能

2Dゲームをつくるうえで必要なさまざまな要素にデフォルトで対応している。

アニメーション

ボーン(リグ)を使った動きやタイムラインベースのアニメーションに対応。

公式のCocos Studioを使えば、簡単に動きをつけられる。

外部の有名エディタSpine(有償)などにも対応。

マップエディタ対応

オープンソースの高性能2Dマップエディタ(レベルエディタ)であるTiled Map Editorのファイル形式「.tmx」に対応したTmx関連クラスが存在し、該当ファイルを読み込むだけでマップをLayerとして簡単に表示できる。

Cocos Studioでも対応している。

パーティクル対応

Particle Designerなど、有名パーティクル生成ツールのファイル形式に標準で対応し、簡単に表示・管理することができる(CCParticleSystem)。

Cocos Studioでも対応している。

なお、大半のパーティクル生成ツールは有償だが、無料でかつCocos2d-xに対応したParticle2dxというウェブアプリが存在する。

その他

  • 物理シミュレーション
  • 多重スクロール

その他ポイント

  • 3Dに一応は対応し、2.5D的なことや簡単な3Dゲームをつくることも可能。ただし、3D用のツールは存在しない。
  • 3D向けのまったく別のライブラリとしてCocos3dがある

開発環境

Cocos

プロジェクト管理機能と下記のCocos Studioを統合したもの。手軽に新規プロジェクトを作成したり、各種ライブラリやツールをダウンロードしたりできる。

ただし、「ストア」の更新が遅いのか、肝心のCocos2d-xエンジン(ライブラリ)の最新版をダウンロードできないことがある。

Cocos Studio

各種アニメーションの設定やGUI要素の構築をWYSIWYGで行える無料の公式エディタ。

有償のものと比べると見劣りする部分もあるが、全体として必要十分。

以前は「CocoStudio」という名前でWindows向けにしか提供されていなかったが、今ではMacでも使えるようになった。

このエディタそのものは、オープンソースではない。

CocosCreator

Cocos2d-x向けの新しい統合開発ツール(IDE)。

既存のツールと異なり、UIやアニメーションの編集からJavaScriptのコーディング、ビルドまで一括して行えるエディタのこと。

基本的にCocos2d-JS(JSB、html5)を前提としており、C++、Luaの編集には対応していない。

エディタ上において、WYSIWYGでひとつひとつの要素を編集し、その各イベントにスクリプトを割り当てていく形でアプリを組み上げていく。結果的にコーディング量は減る。

明らかにUnityを意識してつくられたもの。以前はfireballと呼ばれていた別のツールをCocos2d-xプロジェクトに取り込む形になった。

2016年4月現在、まだベータ版で先行きは不透明。

CocosSimulator

ChromeベースのCocos2d-html向けのデバッガ。といっても、Chrome標準の「デベロッパー ツール」を使っているだけ。

Cocosの「Cocos Store」からダウンロード、インストールできる。

メリットは、自前でローカルサーバを立ち上げる必要なく、ローカルにあるプロジェクトを実行できる点。

ただしその分、内部でローカルサーバを立ち上げるため、起動は遅い。

個人的には、自分で軽量のウェブサーバを立ち上げて、Chromeなど好きなブラウザでデバッグしたほうがいい気がする。

AnySDK

広告やアプリ内課金への対応を容易にするSDK。

残念ながら、日本でよく使われるサービスにはあまり対応していない。

Cocos Code IDE

組み込みのLua・JavaScript開発のための公式IDE。

すでに開発・公開ともに終わっている

現在は公式には公開されていないが、なぜかフォーラムにリンクが残っており、ダウンロードすることはできる。

v3.xのソースコードにも、今のところはある程度対応できている模様(もちろん非公式)。

Eclipseベース。

Unityのツールのように、実行中にリアルタイムにソースコードの変更を反映させることができる。

全体の問題点

不透明な開発の方向性

仕様変更がけっこうあって、ソースコードの修正を余儀なくされる場合がある。メジャー・バージョンアップではある程度仕方がないが、そこをどう割り切るか。

全体的に、新規開発によってどんどん新機能が追加されている一方、さらにカオス化進んでいるように感じられなくもない。

今のやや行き当たりばったりにも感じられる開発スタイルだと、将来的にどこかの段階で行き詰まりそうな気配がある。

ただ、プロジェクト全体が成熟してきたようで、安定感は増してきた。

仕様や命名規約・コーディング規約の不統一

全体の設計に統一感がなく、とりあえず必要なものをどんどん突っ込んでいったという印象。

C++版ではマクロや定数が乱立し、JavaScript版でもクラスにまとめればいいのに、なぜかグローバル変数・関数的なものが多い。

v3.xである程度改善されたが、APIの古い要素をだいぶ削除したために、かえって以下の問題が発生。

後方互換性のなさ

残念ながら、開発陣に後方互換性を維持しようという意識は稀薄らしく、メジャー・バージョンアップ時にかなりの要素が非推奨(@deprecated)ではなく、削除されてしまった。

旧APIをラップする関数なども一部しかなく、基本的に後方互換性はないと思ったほうがいい。

高速開発の裏面、というより負の側面か。

ゲームパッド未対応

@n

FlashのActionScript 3.0はゲームパッドに対応しているが、Cocos2d-xでは低級APIでも対応していない。

そのため、ゲームパッド部分はクロスプラットフォームで開発することはできず、自前でなんとかするしかない。

バーチャルパッドも用意されていないので、こちらもSpriteやLayerを使って自作する必要がある。

不完全なクロスプラットフォーム

せっかくクロスプラットフォームなのに、対応言語ごとにAPIに微妙な差異があって混乱させられる。

Lua版はともかく、JavaScript版(Cocos2d-JS)はシステムの根本にかかわる部分でもC++版と異なり、

言語ごとの仕様に関する部分は仕方がないが、統一できるはずの部分さえ異なっていたりするので不可解。

難解な実装・動作

ところどころトリッキーな動作をするところがあり、そこに引っかかることがよくある。どうしても、くわしい使い方を理解するまで時間と労力がかかってしまう。

特にイベントドリブン(イベントハンドリング)の仕組みがわかりづらい。シンプルなjQueryやActionScript 3.0のようにはいかない。

仕様だか不具合だかわからないようなところがけっこうあるため、それを検証しながらコーディングする覚悟が必要。

著作権など知的財産権のリスク

Githubを見ると、メインの開発者以外からのリクエスト(投稿)をどんどん採用しているように思われる。

大半のオープンソースでも似たような状況だが、開発方針やロードマップがはっきりと示されておらず、全体として開発者(貢献者)の数が多いだけに、どこまで知財権に配慮しているのかまったくの未知数。

おそらく、各ソースコードの所有権の確認や貢献者の身元チェックはまったくやっていない。

企業が一括してつくっているUnityに比べて遥かに高リスク(業務用では特に)。あまり知られていないが、かつてccUTF8の部分がLGPLだった(現在はLLVMライセンス)ため、もしそのバージョンを静的リンクしてビルドしていたら、ソースコードの開示要求を拒否できない。

情報の少なさ

まず、公式の情報が物足りない。リファレンスですら記述が少なく、中には実装されているメソッドなどでさえ未記載の場合すらある。

公式のマニュアルやWikiはあるものの、情報が古い場合が多く、参考程度にしかならない。

全体として実質的に、「ソースコードを自分で読め」という形になってしまっている(特にCocos2d-html:下記)。

ウェブ全体でも、全般的に情報が不足しがち。特に日本語資料が少なく、北米など英語圏ではあまり人気がないためか、英語での情報すら少なく、場合によっては中国語のサイトを翻訳サイトで訳しながら情報をかき集めるしかない。

出版されている書籍も、Unityに比べれば少ない。

結果的に、使う以前に情報収集に時間がかかってしまうのが問題。

Cocos2d-htmlの問題点

事業者の採用実績が乏しく、情報も不足しがち。

3Dに対応していない。

全体として、やや先行きが不透明か。

個人的な所感

開発コミュニティはそれなりに大きいようだが、全般的に個人の手作り感が否めない。その割には、「2Dゲームとしてやりたいことはほぼできる」という機能の豊富さが特長のライブラリといえる。

無料・多機能性の部分に重点を置くか、安定性を求めるかでまったく評価が変わってくるだろう。

いろいろなことができるが問題点も多く、正直、コーディングしていて楽しいだとか楽だとか感じることはめったにない。

全体を通していえることは、開発環境も含めて必要十分な機能はすばらしいのだが、一方で一定以上のデメリットとリスクも存在する。そこをどう判断するかで、このライブラリへの印象は人によって大きく異なると思われる。

将来的なことを考えて業務用では、個人的にUnityの2D機能をおすすめしたい。WebGLに対応しておかげで、かつてのプラグイン(Unity Web Player)なしでもクロスブラウザのブラウザゲームにも対応できるし、企業が運営母体になっている安心感がある。

ウェブ版は、EaselJSも今ではWebGLによる高速レンダリングに対応しているので、使いやすさを求めるならこちらのほうがいいかもしれない。

ともかく、メリットとデメリットを天秤に掛けて、各自で判断するしかない。「無償だから」という理由で安易にCocos2d-xを採用すると、痛い目を見る場合もあるので注意したほうがいい。

08. 4月 2016 by takasho
Categories: プログラミング | Tags: |

← Older posts