Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-10-2005, 17:58   #1 (permalink)
Ein Reisender...
 
Benutzerbild von Syracus
 
Registriert seit: May 2004
Beiträge: 105
Wieder ein dynamisches Fensterproblem

Jungs, ich brauche eure Hilfe. Es geht darum, wie man das Problem am professionellesten Löst. Folgendes:

Ich habe ein dynamisches Rechteck welches ich bequem mit:

ActionScript:
  1. rahmenzeichnen (200, 300);

zeichnen kann. Jetzt will ich aber das Rechteck mit easing zu einer anderen Grösse wachsen oder schrumpfen lassen.

also:
ActionScript:
  1. rahmenzeichnen (Breite, Hoehe);

Es gibt viele Möglichkeiten, doch suche ich eine solide und beste. Was es gibt ist:

- mx.transitions (für mich das beste)
- ein Script (gehen Schleifen??? oder ist das oberbillig?)
- Die Penner sache ;o)

Was würdet ihr machen? Oder habt ihr weitere Ideen??

Gruss Syra
__________________
Handle so, dass die Maxime Deines Willens als Gesetzgebung gilt :o)

Geändert von Syracus (07-10-2005 um 18:06 Uhr)
Syracus ist offline   Mit Zitat antworten
Alt 08-10-2005, 00:57   #2 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
hi
deine frage ist sehr allgemein. allgemein gesprochen solltest du dich mit dem befassen, was du gut kannst. wenn mx.transitions für dich "das beste" ist, scheinst du dich damit gut auszukennen, es stünde dir also nichst im wege, dein ziel damit zu erreichen. allerdings kannst du einfache easing-geschichten auch sehr einfach mit simplen oEF schleifen erreichen, wie z.b.
ActionScript:
  1. mc.onEnterFrame = function () {
  2. this._width += Math.ceil((target - this._width) / 8); //target sei eine nummer
  3. if (this._width == target) delete this.onEnterFrame;
  4. }
zur breite des MC's mc wird bei jedem schleifendurchlauf ein achtel der differenz zur ziel-breite "target" addiert.

für spezielle easings, wie z.b. gefedertes abbremsen gibt es dann höchst komplizierte dinge wie die penner-easings... wenn du da durchblickst, dann nimm doch die. schleifen sind nicht oberbillig, sondern das A und O von easings, natürlich auch von linearen bewegungen.
ich persönlich habe mich bisher immer ausdrücklich davon distanziert, scripts zu benutzen, die ich nicht 100% durchblicke, wie die penner easings zum beispiel. simple schleifen wie o.g. beispiel haben den vorteil, dass ich zu 100% herr ihrer bin - damit kann ich nichts falsch machen.

soviel zu meiner meinung dazu....
gruß janosch
janoshnosh ist offline   Mit Zitat antworten
Alt 08-10-2005, 09:11   #3 (permalink)
Ein Reisender...
 
Benutzerbild von Syracus
 
Registriert seit: May 2004
Beiträge: 105
Danke Janosch aber...

Mein Problem ist folgendes. Ich möchte das Fenster:

ActionScript:
  1. rahmenzeichnen (Width, Hight);

eben neu zeichnen und mich nicht auf den movieclip beziehen. Also einfach in Worten gesagt.

- Zeichne Rahmen dynamisch einmal
- berechne easeing
- Zeichne Rahmen dynamisch ein zweitesmal

Also ich zeig Dir hier wie ich bounce nach herzenslust. ABER eben nicht wie ich will. Weil bei mir soll sich der mc ja nicht verziehen, sondern ich möchte das Rechteck neu gezeichnet haben also kein mc bouncing das kenne ich gut, sondern ein neues Zeichnen des Rechtecks...OHNE VERZERREN des mc.

Anhängend Code (da werden sich viele freuen - ich hoff es bringt auch mir was).

ActionScript:
  1. MovieClip.prototype.drawRahmen = function(c,a) {
  2.         //trace('drawRahmen called');
  3.         this.lineStyle(10,col,15);
  4.         this.moveTo(startX,startY);
  5.         this.beginFill(c,a)
  6.         this.lineTo(startX+breite,startY);
  7.         this.lineTo(startX+breite,startY+hoehe);
  8.         this.lineTo(startX,startY+hoehe);
  9.         this.lineTo(startX,startY);
  10.         this.endFill()
  11.         updateAfterEvent();
  12.         // drawShaddow();
  13. };
  14. MovieClip.prototype.drawRect = function(x1, y1, w, h,c,a,lthick,lc,la) {
  15.         this.lineStyle(lthick,lc,la);
  16.         this.moveTo(x1,y1)
  17.         this.beginFill(c,a)
  18.         this.lineTo(x1+w,y1)
  19.         this.lineTo(x1+w,y1+h)
  20.         this.lineTo(x1,y1+h)
  21.         this.lineTo(x1,y1)
  22.         this.endFill()
  23. };
  24.  
  25. MovieClip.prototype.blurredRect = function(x, y, width, height, blur, color, alpha) {
  26.         this.lineStyle();
  27.         var f = [];
  28.         var sum = 0;
  29.         for (var i = 1; i<blur+1; i++) {
  30.                 f[i-1] = i*i;
  31.                 sum += f[i-1];
  32.         }
  33.         var newfactor= 2;
  34.         var counter = 40;
  35.         do {
  36.                 factor=newfactor
  37.                 var b = 0;
  38.                 for (var i = 0; i<=blur; i++) {
  39.                         var ftemp = (f[i]*(factor*alpha)/sum)/100;
  40.                         b = b*(1-ftemp)+ftemp;
  41.                 }
  42.                 counter--;
  43.                 newfactor *= alpha/(100*b);
  44.         } while ((counter>0) && (Math.abs(100*b-alpha)>.5));
  45.         for (var i = 0; i<=blur; i++) {
  46.                 f[i] *= (factor*alpha)/sum;
  47.         }
  48.         for (var i = 0; i<=blur; i++) {
  49.                 this.beginFill(color, f[i]);
  50.                 this.roundRect(1+(x+i)-blur/2, 1+(y+i)-blur/2, x+width-i+blur/2-1, y+height-i+blur/2-1, blur-(i*2/3));
  51.                 this.endFill();
  52.         }
  53. };
  54. MovieClip.prototype.roundRect = function(x1, y1, x2, y2, r) {
  55.         r = Math.min(Math.abs(r), Math.min(Math.abs(x1-x2), Math.abs(y1-y2))/2);
  56.         var f = 0.707106781186548*r;
  57.         var a = 0.588186525863094*r;
  58.         var b = 0.00579432557070009*r;
  59.         var ux = Math.min(x1, x2);
  60.         var uy = Math.min(y1, y2);
  61.         var lx = Math.max(x1, x2);
  62.         var ly = Math.max(y1, y2);
  63.         this.moveTo(ux+r, uy);
  64.         var cx = lx-r;
  65.         var cy = uy+r;
  66.         this.lineTo(cx, uy);
  67.         this.curveTo(lx-a, uy+b, cx+f, cy-f);
  68.         this.curveTo(lx-b, uy+a, lx, uy+r);
  69.         cy = ly-r;
  70.         this.lineTo(lx, cy);
  71.         this.curveTo(lx-b, ly-a, cx+f, cy+f);
  72.         this.curveTo(lx-a, ly-b, lx-r, ly);
  73.         cx = ux+r;
  74.         this.lineTo(cx, ly);
  75.         this.curveTo(ux+a, ly-b, cx-f, cy+f);
  76.         this.curveTo(ux-b, ly-a, ux, ly-r);
  77.         cy = uy+r;
  78.         this.lineTo(ux, cy);
  79.         this.curveTo(ux+b, uy+a, cx-f, cy-f);
  80.         this.curveTo(ux+a, uy+b, ux+r, uy);
  81. };
  82.  
  83. function update(){
  84.         rahmen.clear();
  85.         rahmen.blurredRect(X, Y, breite, hoehe, sblur, scolor, sfarbint);
  86.         rahmen.drawRect(X+2,Y+1, breite-4, hoehe-4, rcolor, rfarbint, rrahmendicke, rrahmencolor, rrahmenint);
  87.        
  88. }
  89.  
  90. function rahmen(W, H) {
  91.         X = 10;
  92.         Y = 10;
  93.         breite = W;
  94.         hoehe = H;
  95.         rcolor = "0xFFFFFF";
  96.         rfarbint = 100;
  97.         rrahmenint = 10;
  98.         rrahmencolor = "0x000000";
  99.         rrahmendicke = 3;
  100.         sblur = 10;
  101.         scolor = "0x333333";
  102.         sfarbint = 55;
  103.        
  104.         rahmen = this.createEmptyMovieClip("rahmen",1);
  105.         update();
  106. }
  107. rahmen (500,600);
  108.  
  109. import mx.transitions.*;
  110. function tweenRahmen (instanz, easeMethode)
  111. {
  112.     var prop = "_width";
  113.     var anfang = 30;
  114.     var ende = 200;
  115.     var dauer = 60;
  116.     var signal = false;
  117.     var Rahmentween = new Tween (instanz, prop, easeMethode, anfang, ende, dauer, signal);
  118. }
  119.  
  120. starten_btn.onRelease = function ()
  121. {
  122.     tweenRahmen (rahmen, mx.transitions.easing.Elastic.easeOut);
  123. };

Denkt dran, ich will ein dynamisches Fenster, bei dem die Schattendicke immer gleich bleibt kein bouncing. Also ein anderer Ansatz aber ich komme nicht drauf...verflixt nochmal...

Gruss Syra
__________________
Handle so, dass die Maxime Deines Willens als Gesetzgebung gilt :o)
Syracus ist offline   Mit Zitat antworten
Alt 08-10-2005, 09:18   #4 (permalink)
Ein Reisender...
 
Benutzerbild von Syracus
 
Registriert seit: May 2004
Beiträge: 105
Also...

Also..das KANN ich von oben. WAS ICH ABER WILL:

ich habe ein viereck mit weißem hintergrund und grauer linie drumrum dynamisch gezeichnet plus Schatten (siehe oben).

Edel wäre über z.B xml, Werte für die Breite und die Höhe zu speichern die ich als nächstes brauche. Wie komme ich aber mit den mx.transitions oder anderen easing-methoden auf die aktuelle Höhe oder Breite.
Also ich verändere hier aber nicht breite und höhe des vierecks sondern zeichne es neu, ebenso zeichne ich den schatten neu - das wäre die Idee.

letztlich wiederholen sich immer die selben schritte, ich will auf eine andere seite:
- größe ermitteln
- aktuellen inhalt löschen
- größe verändern
- neuen inhalt einbauen

Bitte um Hilfe - ich weiss ihr habt das drauf Leuts...und mir wäre sehr daran gelegen das endlich zu kapieren...

Gruss an die Community, Syra
__________________
Handle so, dass die Maxime Deines Willens als Gesetzgebung gilt :o)
Syracus ist offline   Mit Zitat antworten
Alt 09-10-2005, 22:51   #5 (permalink)
Ein Reisender...
 
Benutzerbild von Syracus
 
Registriert seit: May 2004
Beiträge: 105
hmm...

muss sagen dass ich etwas enttäuscht bin...weiss niemand weiter hier?? Ich meine Code da...Erklärung da, eigene Ansätze da...? Also zu komplex is es sicher nicht, ihr habt schon Gröberes gemacht hier...an was fehlts?

Gruss Syra...
__________________
Handle so, dass die Maxime Deines Willens als Gesetzgebung gilt :o)
Syracus ist offline   Mit Zitat antworten
Alt 10-10-2005, 21:30   #6 (permalink)
Ein Reisender...
 
Benutzerbild von Syracus
 
Registriert seit: May 2004
Beiträge: 105
Viele Klicks aber keine Hilfe

na toll...ich denk das wird nichts mehr...
__________________
Handle so, dass die Maxime Deines Willens als Gesetzgebung gilt :o)
Syracus ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele