Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Flo_W95

Doppel-As

Dabei seit: 27.09.2010

Beiträge: 114

 

1 Zum Seitenanfang

Sonntag, 23. Januar 2011, 23:57

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:

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)

 

lorenz

Haudegen

Dabei seit: 05.11.2002

Beiträge: 647

 

2 Zum Seitenanfang

Montag, 24. Januar 2011, 01:15

mh ich kann mir net so ganz vorstellen was du meinst mit sie sollen sich zu den seiten geringfügig vergrößern/verkleinern ;)
 

Flo_W95

Doppel-As

Dabei seit: 27.09.2010

Beiträge: 114

 

3 Zum Seitenanfang

Montag, 24. Januar 2011, 01:38

Meine die Kreise sollen Ellipsen werden ... Und zwar so animiert... Ein fliessender Avale Effekt von scalemin zu scalemax...
 

lorenz

Haudegen

Dabei seit: 05.11.2002

Beiträge: 647

 

4 Zum Seitenanfang

Montag, 24. Januar 2011, 01:59

der code muss unten in deine renderCanvasCircle function

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 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 ;)
 

Flo_W95

Doppel-As

Dabei seit: 27.09.2010

Beiträge: 114

 

5 Zum Seitenanfang

Montag, 24. Januar 2011, 18:00

Thx es funktioniert jetzt ;)