4

ディアブロ 3 ゲームのダメージ計算機を作成しようとしています (わかっています、わかっています)。

基本的には、キャラクターのアイテムを表す値の「前」と「後」の配列を持つという考え方です。「後」配列は、更新時に「前」配列を複製する必要があります。ただし、「後」の配列を変更しても、「前」の配列は更新されません。

次に、各配列に DPS (多いほど良い) の合計が表示され、2 つの違いが示されます。アイデアは、ゲーム内のオークションハウスを使用するときに、2 つのアイテムを簡単に比較できるようにすることです。

私は最初のビットをセットアップしました - 「前の」配列はうまく機能しています。ただし、「後」の配列を作成する方法については途方に暮れており、これを別の大きさの複雑さにしたかどうか疑問に思っています。2 つのビュー モデルを使用するか、jQuery で複製するか、マッピング プラグインを使用する必要がありますか? 私が求めているものとまったく同じものを見つけることができません。特にUI要件は少し問題があるようです

私がやっていることのフィドル: http://jsfiddle.net/kimadactyl/GuMuY/8/

4

1 に答える 1

2

これがあなたが始めるべき解決策です。HeroItem構成オブジェクトとオプションのリンクされたヒーローを取得するようにリファクタリングしました。

今のところ、配列は固定長であると想定しています。ディープコピーを実行するためにjqueryextendを使用afterして、新しい配列にマッピングすることにより、items配列から配列を作成します。HeroItem

alinkが渡されると、HeroItemはそのオブザーバブルの変更をサブスクライブし、指定されたとおりに一方向にのみ更新します。

function HeroItem(config, link) {
    var self = this, prop;
    self.item = config.item;
    self.int = ko.observable(config.int);
    self.ias = ko.observable(config.ias);
    self.critdmg = ko.observable(config.critdmg);
    self.critpc = ko.observable(config.critpc);
    self.min = ko.observable(config.min);
    self.max = ko.observable(config.max);

    if (link) {
        for (prop in link) {
            if (link.hasOwnProperty(prop) && ko.isObservable(link[prop])) {     
                console.log("subscribing " + prop);
                link[prop].subscribe((function(p) {
                    return function (newValue) {
                        console.log("updating " + p+ " to " + newValue);
                        self[p](newValue);
                    }
                })(prop));
            }
        }        
    }
}

self.after = ko.observableArray(ko.utils.arrayMap(self.items(), function(i) {
    return new HeroItem($.extend({}, ko.toJS(i)), i);
}));

http://jsfiddle.net/madcapnmckay/2MNFn/1/

カスタムバインディングは必要ありません。すべてのKOオブザーバブルが持つサブスクリプション機能を使用するだけです。これを拡張して動的長配列に対応する場合は、items配列にサブスクライブし、それに応じてafter配列をクリーンアップします。

お役に立てれば。

于 2012-06-22T17:42:44.343 に答える