2011-02-08 22 views
0

まず、 "クラス"という用語は、私が作業しているもののメインの初期化ファイルとは別のファイルにあるかもしれないプロトタイプを持つ関数を意味します。JavaScriptクラス内でHTML5のキャンバスを正しく使用するにはどうすればよいですか?

私の質問/問題のために: 私はJavaScript/HTML5で何かを構築し、それを「正しく」プログラムしようとしています(つまり、標準のフォーマットでプロトタイプを使用しています)。私のメインのJavaScriptファイルでは、作成するメソッドは、キャンバスを設定するインスタンス(基本的にはOOP /プロトタイプベースのスクリプトのルートインスタンス)を使用しています。

また、クリック可能なボタンを作成するための 'クラス'を含む別のファイルがロードされています。今のところ、ボタンをキャンバスに描画しようとしていますが、インスタンスが有効範囲外であると考えてキャンバスのインスタンスにアクセスできません(これは問題ありません。インスタンスを参照するために長いドット表記法を含めることを私がすべて望む)。しかし、キャンバスに矩形を描画しようとすると、ボタンが入っている「クラス」を考慮して、それ以外のコンテキストを参照することができないので、これは私に問題を起こしています。

私はの線に沿って何かを使用してこの回避する方法を見つけました:

function CreateButton(btn_x, btn_y, btn_width, btn_height, btn_txt) { 

    // ... (check and define parameters) 

    CreateButton.prototype.custom_canvas = document.getElementById('root_canvas'); 
    CreateButton.prototype.ctxt = this.custom_canvas.getContext('2d'); 

    CreateButton.prototype.ctxt.fillStyle = '#666666'; 
    CreateButton.prototype.ctxt.fillRect(this.x, this.y, this.width, this.height); 
} 

基本的には同じ名前のキャンバスとキャンバスの上に書いていますか?後で普通のキャンバスを操作することはできますが、キャンバスが単一のキャンバス要素であるかのように動作すると思います。私はキャンバスを再描画すると多くのことが追加されたときに多くのメモリを消費するかもしれないと心配しましたが、方法にかかわらずキャンバスの上に書くことは避けられません。

何か提案や助け?それとも、同じクラスのキャンバスを別のクラスで使用するのが私の方法ですか?

フィードバックありがとうございます。

[UPDATE] うーんは、多分私は、パラメータとしてコンテキストを渡し、ちょうどそれを使用してみてください。

...キャンバスをグローバルオブジェクトにするだけでいいですか?助言がありますか?

答えて

1

私はあなたがキャンバスとあなたのウィジェットへの参照を保持する「WidgetManager」のいくつかの並べ替えを実装するために試みることができると思います。ウィジェットをレンダリングするためにコールバック機構を使用します。各ウィジェット(つまり、この場合はButton)には、ある種のレンダリング状態(押された、解放された)と何らかの内部状態があります。他のウィジェットは、より複雑な状態を持つかもしれません。 「WidgetManagerは」おそらく(ウィジェットがヒットされた)ウィジェット「Z」とユーザープレスを追跡する必要があることを

は注意してください。これに基づいて、ウィジェットにバインドされたハンドラをトリガできる必要があります。ある意味では、基本的なUIライブラリが何をしているかを再考する必要があります。 :)

私は実装段階に移行する前に、この方法で設計を進める方がよいと思います。多くのことは、あなたが本当に望むものに依存します。 :)あなたがレンダリングを簡素化し、複数のcanvasiiを使用して代わりのひとつで多くのことをチェックすることができます

注意。この場合、Z-インデックスと絶対的な位置付けに対処する必要がありますが、少なくともあなたは自分で実装することなく、既存のもののいくつかにピギーバックすることになります。

関連する問題