GithubHelp home page GithubHelp logo

phi-jp / tmlib.js Goto Github PK

View Code? Open in Web Editor NEW
209.0 209.0 41.0 35.33 MB

JavaScript をより使いやすく, より便利に, そしてより豊かに.

Home Page: http://phiary.me

HTML 21.22% CSS 0.40% JavaScript 78.37% Shell 0.01% Batchfile 0.01%

tmlib.js's People

Contributors

arosh avatar daishihmr avatar fukuyama avatar gitter-badger avatar minimo avatar omatoro avatar phi-jp avatar simiraaaa avatar yalab avatar yosuke-furukawa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tmlib.js's Issues

tm.Class を作る

tm.Class = {
    // クラスを作る
    create: function() { ... },
    // クラスを定義
    define: function() { ... },
    // デフォルトパスをプッシュ
    pushd: function() { ... },
    // デフォルトパスをポップド
    popd: function() { ... },
    // 取得
    using: function() { ... },
};

example

// グローバル領域に Hoge というクラスが定義される
tm.Class.define("Hoge", { ... });

// カレントが foo になる
tm.Class.pushd("foo");

// foo.Hoge というクラスが定義される
tm.Class.define("Hoge", { ... });

Texture や WebAudio の同期読み込み対応

Texture や WebAudio の同期読み込み対応する.

Image の同期読み込みは,
xhr の async:false で binary 形式で読み込んで
base64 に変換して url に入れればいけるかな?

memo

  • EventDispatcher とか継承して, load 時とかにちゃんと load を発火させる.
  • ~Manager とか使わなくても独立して使えるよう意識して作る.
  • ~Manager はあくまでオプショナル

dom の Attr や Style 生成時の引数を変更する

引数で HTMLElement を受け取っていたが,
tm.dom.Element も受け取るようにする.

デフォルトは tm.dom.Element を受け取り
HTMLElement だった場合はは tm.dom.Element(HTMLElement) としてから保持する.

Label の縦書き対応

縦書対応する

あと, Label の描画方法を毎回レンダリングするのではなく
Sprite に書き込んで描画する形式にするかも.

おそらくそっちのほうが高速.

描画幅はダミーで canvas 作ってその context 経由で
measureText を使って幅を取得する.

そのサイズで canvas 作って shape と同じ要領で描画する.

ついでに改行も対応するかも.

tm.app.BaseApp.prototype.popSceneのreturn値について

popScene関数を利用後、returnされる値はexitが呼ばれる予定のシーンとなっています。
私の感覚的にはpop後のシーンが取得できるのかと思っていましたが、この動作は仕様でしょうか。

pop後のシーンをreturnするのであれば、popSceneの戻り値は「e.target」になるかと思います。

Titled Map Editor 対応

Titled Map Editor に対応させる.
マップチップもだしオブジェクトレイヤーも.

TextBox 作る

ボックスに合わせた自動改行とか,
縦書とか対応する.

文字送りする MessageBox 的なやつも対応するかも.

popScene後に消えているはずである、クラスのupdate処理が一度だけ実行されてしまう

下記リンク先のサンプルを実行後、以下の手順で操作をしてください。

http://jsdo.it/omatoro/mp3D

  • chromeなどのデバッグ用コンソール画面を開いてください
  • メニューボタンを押下してください
  • ScreenInScrollPullDown - updateが実行されているのが確認できます(pop対象のクラスに所属しているクラスです)
  • 完了ボタンを押下してください
  • popScene後に、再度ScreenInScrollPullDown - updateが実行されているのが確認できます

ScreenInScrollPullDownクラスは、popScene後にpopされ削除されるシーンクラスに所属するクラスとなります。

できれば、popScene後は、popされるクラスに所属するクラスであってもupdateは実行されないほうが個人的に望ましいです。
(上記に上げたURLのサンプルでまずい処理をかませてるのでしょうか)

良い解決方法があればご教授頂きたいです。

以上、よろしくお願いします。

ラベルの位置がずれる

同じブラウザでもOS環境によってラベルの位置がずれるみたい。
Chromeで見た時に
Snow LeopardとLionでズレるのを確認しました。

恐らくSnow Leopardだとずれてるみたい。

tm.app.Interaction が持つ enable のデフォルト値検討

下記検討

現在は高速化の為, enable のデフォルト値は false となっているが
サクッとゲームを作るってことを考えると true でも良いのかもしれない.

重ければ明示的に false にする的な対応を推奨する.

namespace 機能を実装する

(function() {...})() だと最後の括弧を書き忘れたり,
そもそも読みにくかったりするので下記の機能を実装する

tm.namespace = function(ns, fn)
{
    fn(ns);

    //fn.call(ns, ns);
};


var hoge = {};

tm.namespace(hoge, function(ns) {

    ns.test = function() {
        alert("test");
    };

    tm.namespace(ns.test, function(ns) {
        ns.test = function() {
            alert("nest test");
        }
    });

});

hoge.test();
hoge.test.test();

TypeScript の module に近い感じ.
https://sites.google.com/site/jun1sboardgames/programming/typescript

Animationクラスのdurationを極端に小さくした場合、finish値に届く前にisAnimationがfalseになります

AnimationクラスのisAnimationがtrueの場合のみ、refreshを行う処理を作っていました。
すると、finishの値に届く前にisAnimationfalseとなってしまい、途中でアニメーションが終了してしまいます。

tm.app.Animation.prototype.updateの処理にて、アニメーションの終了チェックがthis.tweens.length <= 0となっていますが、this.tweens.length < 0と変更すると最後までアニメーションすることを確認しています。

上記修正が正しい処理かどうか判断できないため、再考して頂いてよろしいでしょうか。
以上です。

Sprite の引数について再考

↓今

var sprite = tm.app.Sprite(幅, 高さ, "画像名");

↓Sprite の引数を一個でも ok にする

var sprite = tm.app.Sprite("画像名");

画像のみ渡された場合はその画像のオリジナルサイズを
幅, 高さとしてとりあえず割り当てる.

その後変更可能.

って考えると, sprite の第一引数って画像じゃね?って思ってきた.

var sprite = tm.app.Sprite("画像名", 幅, 高さ);

draggable 機能を実装する

tm.app.Object2ddraggable 機能を持たせる.

setDraggable(flag) でドラッグ有効/無効を切り替える

Event

dispach event list

Name Description
dragstart ドラッグ開始時
drag ドラッグしている間
dragend ドラッグ終了時

Memo

  • setDraggable(true) すると内部で setInteractive(true) も呼ぶ
  • タッチの差分(tm.input.Touch.deltaPosition)の値をキャッシュしてタッチ終了後はその平均値で慣性っぽく止まるようにする
  • flick~ or drag~ ってプロパティで速度やらなんやら調整できるようにする

Feature

  • 親子関係考慮すると死ねるのでとりあえず見送る
  • 特定の要素上に来たら drop イベントとか発行させられるようにすると良いかも. (setDroppable(true))

3D サポート

自前で実装する予定だったが, three.js 使った方が良いかも!

今更作っても three.js には追いつけない.
色々な意味で...

ってことで three.js とうまくドッキングして使えるようにする予定

マルチタッチ対応

マルチタッチ対応する.

TouchList クラス作ろうかな?
Mouse と合わせるのが面倒そう.

Layer クラスを作る

CanvasLayer, GLLayer(or ThreeLayer) を作る.

これらは自分で canvas と render を持っており,
子どもたちの描画先を自分にする.

それを画像として親に描画する.

2d と 3d 描画を同時にやりたいときなどに活用できる.

tm.app.Animation の名前再検討

tm.app.Tween もしくは tm.app.Tweener の方が良い気がしてきた.

終了時のイベント animationend も AnimationSprite とかぶっちゃってるし.

DAT.GUI と Stats.js を取り込む

もう Unifiy, MInify するときに含めちゃう.
一応ライセンスを確認する.

もしくは loadDatGUI とか loadStats とか作る.

WebGL 描画対応

WebGL 描画対応する

daishi さんが作られた『GL-Shooter stage1』を参考にする.

描画は CanvasApp や CanvasElement でやらせるんじゃなくて, 下記のようにシーン単位で
分けた方が良いかも! daishi さんの拡張も Scene 拡張でやってる.

  • CanvasScene
  • CanvasElement
  • GLScene
  • GLElement

あと子供はやっぱり Element じゃなくて ContainerElement 的なものにしか持たせないように
したほうが良いかなぁ〜. 速度的に.

Loader or LoadManager を作る

想定

var lm = tm.app.LoadManager();

var texture = tm.graphics.Texture("hoge.png");
var sound = tm.sound.WebAudio("hoge.wav");

lm.add(texture);
lm.add(sound);

lm.onload = function() {
    alert("ぜんぶ読み込み終わったよ♪");
};

衝突判定の種類(円、矩形など)を自動判定するようにしてほしい

GlossyButtonクラスなどのinteractionオブジェクトにて以下の情報を設定しています。

this.interaction.enabled = true;
this.interaction.boundingType = "rect";

この情報を利用して、isHitPoint関数での衝突判定を自動選択してほしいです。

isHitPointCircle関数とisHitPointRect関数は別途用意する形になりますが、簡易的な衝突判定としてisHitPoint関数を用意しているのであれば有効な実装だと思います。

よろしくお願いします。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.