Problem mit Canvas-Skript II
Hallo, sry dass ich euch mal wieder nerven muss, aber habe schonwieder ein scheinbar unlösbares Problem...
Ich wollte Canvas mit JS animieren und hab es soweit(mit kleiner Hilfe bei einem Denkfehler) geschafft, dass ich beliebig viele Kreise größer und wieder kleiner machen kann...
Das einzige Problem ist noch folgendes:
ich wollte die scale funktion einsetzen, damit die kreise sich geringfügig zu den Seiten vergrößern/verkleinern... würde bestimmt ganz gut aussehen, hab ich mir gedacht... jedoch das ist dabei rausgekommen:
Code für das Canvas:
link zu online-version: (kann firefox zum absturz bringen)[!] http://93.181.39.145/canvas/
Hoffe irgendwer kann erkennen, was das Skript falsch macht ... ich hab Alles mehrmals nachgeprüft, und nach meiner "pre-alpha" logik müsste es klappen
Aber es will halt nicht, deswegen hab ich mich an euch gewendet
Ich wollte Canvas mit JS animieren und hab es soweit(mit kleiner Hilfe bei einem Denkfehler) geschafft, dass ich beliebig viele Kreise größer und wieder kleiner machen kann...
Das einzige Problem ist noch folgendes:
ich wollte die scale funktion einsetzen, damit die kreise sich geringfügig zu den Seiten vergrößern/verkleinern... würde bestimmt ganz gut aussehen, hab ich mir gedacht... jedoch das ist dabei rausgekommen:
Code für das Canvas:
|
|
Javascript-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
function draw(){ var canvas = document.getElementById('canvas'); if (canvas.getContext){ ctx = canvas.getContext('2d'); } circle = new Array(); circle[0] = new CanvasCircle(120,150,26,40,"#fe6622"); circle[1] = new CanvasCircle(234,190,10,25,"#fedcba"); circle[2] = new CanvasCircle(150,220,25,30,"#abcdef"); circle[3] = new CanvasCircle(240,100,25,45,"#2c4f1a"); setInterval("renderAll(circle);",400); } function renderAll(renderThis){ ctx.clearRect(0,0,500,500); for(i=0;i<renderThis.length;i++){ renderThis[i].render(); } } function CanvasCircle(x,y,minSize,maxSize,color){ this.x=x; this.y=y; this.minSize=minSize; this.maxSize=maxSize; this.color=color; this.size = (maxSize+minSize)/2; this.change = "up"; this.scaleChangeAC = "AC"; this.scaleChangeBD = "BD"; this.minScaleAC = 0.5;//x-scale-richtung this.minScaleBD = 0.3;//y-scale-richtung this.maxScaleAC = 1.5;//maximal scale in x-richtung this.maxScaleBD = 1.2; this.scaleAC = 1;//aktueller scale in x richtung this.scaleBD = 1; this.scaleStepsAC = 0.01;//Abstände zwischen den Scales this.scaleStepsBD = 0.01; } function renderCanvasCircle() { //Size if(this.change == "up" && this.size >= this.maxSize){ this.change = "down"; } else if(this.change == "down" && this.size <= this.minSize){ this.change = "up"; } if(this.change == "up"){ this.size++; } else{ this.size--; } //ScaleAC if(this.scaleChangeAC == "AC" && this.scaleAC >= this.maxScaleAC){ this.scaleChangeAC = "CA"; } else if(this.scaleChangeAC == "CA" && this.scaleAC <= this.minScaleAC){ this.scaleChangeAC = "AC"; } if(this.scaleChangeAC == "AC"){ this.scaleAC = this.scaleAC+this.scaleStepsAC; } else{ this.scaleAC = this.scaleAC-this.scaleStepsAC; } ctx.fillStyle = this.color; ctx.scale(this.scaleAC,this.scaleBD); ctx.beginPath(); ctx.arc(this.x,this.y,this.size,0,Math.PI*2, true); ctx.closePath(); ctx.fill(); } CanvasCircle.prototype.render=renderCanvasCircle; |
link zu online-version: (kann firefox zum absturz bringen)[!] http://93.181.39.145/canvas/
Hoffe irgendwer kann erkennen, was das Skript falsch macht ... ich hab Alles mehrmals nachgeprüft, und nach meiner "pre-alpha" logik müsste es klappen

Aber es will halt nicht, deswegen hab ich mich an euch gewendet
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Flo_W95« (23. Januar 2011, 23:57)
der code muss unten in deine renderCanvasCircle function
du hast einfach jedes mal dein ganzes canvas obj verzogen und verbogen
es is in den meisten fällen einfacher einfach den stand vor transformationen, scalierungen etc zu speichern und dann den stand davor wieder herzustellen
Ps. wenn du insgesammt noch bissel was über canvas lernen willst kannst mal auf https://developer.mozilla.org/en/Canvas_tutorial vorbeigucken da lernt man par grundzüge
|
|
Javascript-Quelltext |
1 2 3 4 5 6 7 8 |
ctx.save(); ctx.beginPath(); ctx.translate(this.x,this.y); ctx.scale(this.scaleAC,1); ctx.arc(0,0,this.size,0,Math.PI*2, true); ctx.closePath(); ctx.fill(); ctx.restore(); |
du hast einfach jedes mal dein ganzes canvas obj verzogen und verbogen
es is in den meisten fällen einfacher einfach den stand vor transformationen, scalierungen etc zu speichern und dann den stand davor wieder herzustellenPs. wenn du insgesammt noch bissel was über canvas lernen willst kannst mal auf https://developer.mozilla.org/en/Canvas_tutorial vorbeigucken da lernt man par grundzüge
Ähnliche Themen
-
(X)HTML & CSS & DHTML & Javascript »-
Problem mit einem Canvas-Skript
(21. Januar 2011, 00:28)
-
Sonstige Programmiersprachen »-
Delphi: Problem mit FormKeyDown
(14. Dezember 2008, 12:35)
-
Sonstige Programmiersprachen »-
[DELPHI]Parabel mit Canvas zeichnen
(16. Januar 2005, 11:46)
-
(X)HTML & CSS & DHTML & Javascript »-
Delphi und Uhrzeit wie geht das ?
(7. Januar 2004, 19:31)


