jgame.jsはオープンソースのHTML5向け2dゲームフレームワークです。
MITライセンスなので、商用非商用を問わずご自由にご利用いただけます。
動作はjavascriptですが、製作はtypescriptで行われているため、typescriptライブラリともいえます。
enchant.jsよりも少し使いにくく結構高速なライブラリとなることを目標としています。
詳しくはサンプルをご覧ください。
HTML5用2dゲーム向けフレームワーク、jgame.jsの2.0です。
1.1から50以上の改変を行い、TypeScriptやJavaScriptでのゲーム製作をサポートします。
かなりの部分を1.xから引き継いでいますが、コンストラクタ引数の追加、名前空間の追加などが行われているため、1.xとの互換性はありません。
1. inputDown, inputMove, inputUpのみだった入力系イベントをポインティングイベント系のpointDown, pointMove, pointUpとキー系のkeyDown, keyUpに分離
※既存コードかなり修正必要になります。ご利用いただいていた方々にはお手数おかけして申し訳ないです。
2. Sceneごとの入力管理をすることが多そうだったので、SceneにもpointDown, pointMove, pointUp, keyDown, keyUpイベントを追加。
※デフォルトはundefinedなので、これらのイベント利用にはnewが必要
3. ロゴ追加
4. E.scrollプロパティを追加。Layerのx, yを特殊処理してスクロールさせる処理を専用プロパティに移行した事で、小さいサイズのレイヤーをサポート
5. Areaクラスを廃止。CommonAreaに全置換
6. draw系でareaの受け渡しを全面的に廃止
7. Tweenクラスを見直し。サブプロパティを操れるように
8. TimelineクラスにscrollToとscrollByを追加
9. クリッピング領域のサンプル追加。クリッピング機能をエフェクトに使うための内部機能ではなく、正式な機能として扱う形に
10. MultilineText、TextLineInfoクラスを追加し、複数行のテキストをサポート
11. window.getTimeを廃止。ネイティブ関数のperformance.nowを直接呼ぶ形に。(performance.nowが存在しない場合、performance.nowはDate.nowになる)
12. ユニバーサルトランジションをサポート
13. エフェクト関係のサンプルのため、主にユニバーサルトランジションのルール画像をデフォルト素材に追加
14. アドベンチャーゲームのサンプルのため、キャラクターなんとか機で作った画像ファイルをデフォルト素材に追加
16. Filter.tsをImageFilter.tsに修正
17. ユニバーサルトランジションを利用したエフェクトを追加(ただしEnumでは指定出来ない)
18. Easingクラス、Tweenクラスのeasingフィールドにそれぞれ型情報を追加
19. attachEvent/detachEventのサポートを打ち切り
20. ポイントイベント入力用handlerのdisplayをblockからinline-blockに変更。横幅が余計にあり、ポイントのカットが面倒だったため
21. 実機テストしたところ反応が悪かったので、touch系イベントをサポートしている機種の場合タッチ系イベントを使うよう修正
22. JGUtilクラスにproxy関数を追加、Gameクラスのポイントならびにキーボード処理を通常のメンバ関数に移動
23. performance.nowはブラックベリーなど一部の環境で非常に動作が不安定だったため、Date.now利用に切り替え
また毎回自分でとるのではなく、requestAnimationFrameの引数を利用する形に修正
Date.nowはrequestAnimationFrameの引数が存在しない場合か、requestAnimationFrameがない場合にのみ利用
24. ImageDataを直接扱うためのPixelクラスを追加。将来的にモジュールに移す可能性あり
25. Enum型を大文字に統一。また、ほとんどのenum型にUnknownを初期値として追加
26. Characterクラスの下方向移動が、movePixelの値に関わらず64ピクセルに固定になっていた問題を修正
27. Tileクラスで複数マップチップをサポート
28. Tileクラスでオートタイルをサポート
29. CharacterクラスにbeginMoveイベントを追加。移動直前に移動可否を呼び出し元で判断できるように修正
30. Timeline.scrollByが動作していなかったのを修正
31. SpriteにsrcWidth、srcHeightを追加。width, heightの修正で、drawOptionを使わなくてもリサイズが出来るように。
逆にresizeToといった処理で、元画像の表示範囲を少しずつ拡張する、ということは出来なくなっている。この場合tweenでsrcWidthとsrcHeightを直接いじりつつ、widthとheightも同時にいじらないといけない
32. BufferedRendererのcreateImage、createSpriteにcanvasSize引数を追加
33. Resourceクラスにclearを追加。リソース解放の暫定処置
34. TimelineのscaleTo, scaleBy, resizeTo, resizeByがTypeScriptで記述した際、4つ目の引数を利用できない問題を修正
35. Gameクラスのコンストラクタに可変長引数を追加
36. TweenクラスでFilterの解放処理にバグがあったのを修正
37. universalTwinエフェクトを、フェードインとフェードアウトのエフェクトパターンを逆転させる形に修正
38. ReverseUniversalTransitionをサポート
39. UniversalTransitionならびにReverseUniversalTransitionに差分画像を指定できるよう修正
40. レイヤーの位置を動かしていた場合、BufferedRendererのrenderSceneで正しく描画されない問題を修正
41. Mersenne Twisterによる乱数処理を追加
42. Mersenne Twister導入に伴い、GameクラスにsetSeedとrandomメソッドを追加
Easing.RANDOMに引数を追加し、Math.randomの利用を取りやめ。
ImageFilter系のコンストラクタにgame引数を追加(NoiseFilterが乱数を使うため)。
43. GameイベントのenterFrameイベントを廃止。時間制フレームワークとして統一
44. ポイントイベントの座標値算出方法をpageX,pageYからに統一。offsetX/offsetY,layerX/layerYは挙動が少し怪しいため利用中止
45. 入力イベントの発生場所をメインループ内に修正。メインループ内のイベント発生順序は以下の通り
keyDown/keyUp/pointDown/pointMove/pointUp
update
timer
render
46. preloadでloadingSceneを指定する構造を見直し。LoadingScene.preloadOtherも廃止し、Resource.loadManualに移動
47. GameTimerのtryFireの引数を、これまでの累積ではなくupdateと同じ差分に修正
48. InputPointEventのイベント対象抽出処理を、イベント発生時からイベント発火時に修正。発火時では、リプレイなどで問題になるため
49. Eクラスにopacityフィールド、show/hideメソッドを追加。globalAlphaの操作についてはこちらの通常プロパティに昇格という形。また、合わせて親が半透明な場合、子供すべても半透明になる形に修正。
従来のものは親が半透明+子が一切半透明ではない場合に子も半透明になったが、子の透明度が操作されている場合親の透明度は無視されていた。
従来のsetDrawOptionによるglobalAlphaも継続して利用する事は出来て、こちらを使うと親が半透明になると子供も半透明になる、という事はなくなる。
50. 指定漏れが起きやすいため、Eクラスのx, y値のデフォルト値をundefinedから0に変更
51. ResourceStructure機構を導入。デフォルトのimg/やsound/の構成を変更可能なように。
また.や/、http:などで始まるパスを指定した場合、そのURLを例外としてimg/などのルールを適用しない形に修正。
52. E.append、E.insert、E.removeChild、E.removeDrawOption時に自動でupdatedをかける形に修正
少しオーバーヘッドがあるが、update漏れが多く現状の作りはデメリットの方が大きいため。
ただupdatedを利用する形は少しオーバーヘッドが大きいので将来的には見直す可能性あり。
53. UIWindowクラスを追加。またMessageWindowクラスをUIWindowクラスを継承した形に修正
54. 全クラスをjg名前空間内に変更。またこれまでのコードを動作させやすいよう、jg.globalizeを追加
55. Spriteクラスの構造を見直し。これまでのSpriteクラスの役割を担うFrameSpriteクラスを導入し、Spriteクラスを単純化
Spriteクラスにwidth, heightを指定する必要性が無くなったため、SpriteとCharacterでコンストラクタ引数の順番が変更になってしまっている点に注意
56. 各種サンプルのfps_show内が空だとfps表示前と表示後でマウス座標がずれる。適切なサンプルではなかったため、fps_showにデフォルトでnbspを追加した
57. jg.globalizeをかけた前提の定義ファイルを追加
58. SimpleSoundでwebaudio.d.tsを利用する形式をとりやめ、HTMLAudioElementベースとした。
これにより、ビルド時にwebaudio.d.tsが不要となったため、libからwebaudio.d.tsを削除