2011-01-09 5 views
0

私はJS魔法の作品で単純なクラスを書きましたが、setIntervalを使ってみると問題がありました。 Ex。もし私がそのようなことをすれば、jsクラスのSetIntervalプロパティがありません

ball = new ball(5,10,0, '#canvas'); 
ball.draw(); 
ball.draw(); 
ball.draw(); 
ball.draw(); 

それは働く。しかし、これは:

ball = new ball(5,10,0, '#canvas'); 
setInterval(ball.draw, 100); 

値が定義されていないというエラーが表示されます。あなたがballのコンテキストから呼び出されgetingされていない関数自体への参照を送っているので、それを推測

function ball (x,y,z,holdingEl) { 
    this.r = 5; //zmienna przechowujaca promien pilki 
    this.size = this.r *2; // zmienna przechowujaca rozmiar 
    this.ballSpeed = 100; // predkosc pilki 
    this.ballWeight = 0.45; // masa pilki 
    this.maxFootContactTime = 0.2; // maksymalny czas kontaktu pilki z noga - stala 
    this.ctx = jQuery(holdingEl)[0].getContext("2d"); // obiekt pilki 
    this.intVal = 100 // predkosc odswiezania 
    this.currentPos = { // wspolrzedne pozycji 
     x: x, 
     y: y, 
     z: z 
    } 
    this.interactionPos = { // wspolrzedne pozycji ostatniej interakcji 
     x: -1, 
     y: -1, 
     z: -1 
    } 
    this.direct = { // kierunek w kazdej plaszczyznie 
     x : 1, 
     y : 0, 
     z : 0 
    } 
    this.draw = function(){ 
     this.ctx.clearRect(0,0,1100,800); 
     this.ctx.beginPath(); 
     this.ctx.arc(this.currentPos.x, this.currentPos.y, this.r, 0, Math.PI*2, true); 
     this.ctx.closePath(); 
     this.ctx.fill(); 
    } 
} 
+0

をお試しください –

+0

「ボール」の複数のインスタンスを作成する場合は、インスタンス間で共有されるように、 'ball'の' prototype'に 'draw'関数を追加する必要があります。今はインスタンスごとに冗長な関数を作成しています。 – user113716

+0

'ball = new ball(...);'インスタンスでコンストラクタ関数を上書きしていませんか? –

答えて

2

です。

代わりにこれを行います。

ball = new ball(5,10,0, '#canvas'); 
setInterval(function() { 
    ball.draw(); 
}, 100); 

draw()関数内で、あなたの最初のコードを使用して、thisballインスタンスです。あなたのsetInterval()コードを使用

thisdraw()機能にwindowなります。

+0

Hmm ... ['ball.draw.bind(ball)'](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Function/bind)はどうですか?私はまだそれが広くサポートされていないという問題があると思います... – clarkf

+0

@clarkf:はい、どちらも良い点です。 – user113716

1

あなたが得る正確なエラーは何ですか?この

ball = new ball(5,10,0, '#canvas'); 
f = function() { 
ball.draw() 
} 
setInterval(f, 100) 
関連する問題