Antworten auf deine Fragen:
Neues Thema erstellen

Smoothing von Text (CS5 / AS3) / An ssandner

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Guten morgen Stephan,


nein, ich muss zugeben dass DU es geschafft hast ein dynamisches Textfeld zu tweenen!!!

Wäre das Ergebnis so wie bei Lee ausgefallen, dann hättest Du eine absolute Revolution auf dem Flash Markt ausgelöst!

Dennoch bekommst Du eine Millionen Däumchen von mir! :daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch::daumenhoch:..........

Außerdem bedanke ich mich für die letzte FLA die Du mir gesendet hast! Habe zwar noch keine Zeit gehabt sich mit dem Code zu beschäftigen aber neugierig war ich doch schon. Dein Ergebnis sieht schon sehr viel versprechend aus! Ich melde mich dann am Montag bei Dir gebe Dir das Resultat bekannt.

Auch Dir wünsche ich ein schönes und erholsames Wochenende!

Liebe Grüße,

Michael
 

ssandner

Nicht mehr Newbie

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Soo, hier für alle die es interessiert eine kurze Erklärung, was ich verändert habe, damit der Text schön "smooth" getweent wird.
Bei unserem ersten Ansatz haben wir mit der scrollV und maxScrollV Eigenschaft des Textfeldes gearbeitet. Diese Eigenschaften beziehen sich aber auf die Zeilen eines Textfeldes und somit springt der Text auch in Zeilenabständen. Um dies zu verbessern, muss man mit der y-Position arbeiten, dies funktioniert aber nicht so ohneweiteres mit dem Textfeld.
Deshalb habe ich auf der Bühne einen leeren Movieclip platziert und diesen dann maskiert damit nur der gewünschte Bereich sichtbar ist.
Per Script erzeuge ich dann eine nues textfeld und füge es per script dem leeren movieclip hinzu.
Code:
var textfeld:TextField= new TextField();
textfeld.htmlText=someText;
textfeld.multiline=true;
textfeld.wordWrap=true;
textfeld.width=this.info_textfenster.foto_beschreibung.width;
textfeld.autoSize= TextFieldAutoSize.LEFT
textfeld.x=this.info_textfenster.foto_beschreibung.width/2*(-1);
textfeld.y=this.info_textfenster.foto_beschreibung.width/2*(-1);

this.info_textfenster.foto_beschreibung.addChild(textfeld);
Der leere Movieclip passt sich in der Größe dem Textfeld an, wobei ich vorher festgelegt habe, dass das Textfeld nicht breiter als der sichtbare Bereich sein soll.

Die Funktion die den Text tweent, muss natürlich an diesen neuen Aufbau angepasst werden:
Code:
function thumbMove(e:MouseEvent):void
{
	this.info_textfenster.scrollbar_eins.scrollbalken_eins.y = mouseY - yOffset;
	if(this.info_textfenster.scrollbar_eins.scrollbalken_eins.y <= yMin)
		this.info_textfenster.scrollbar_eins.scrollbalken_eins.y = yMin;
	if(this.info_textfenster.scrollbar_eins.scrollbalken_eins.y >= yMax)
		this.info_textfenster.scrollbar_eins.scrollbalken_eins.y = yMax;
	var sp:Number = this.info_textfenster.scrollbar_eins.scrollbalken_eins.y / yMax;
	Tweener.addTween(this.info_textfenster.foto_beschreibung, {y:(-sp*(this.info_textfenster.foto_beschreibung.height-this.info_textfenster.masker.height)), time:0.5, transition:"easeOutQuart"});
	e.updateAfterEvent();
}
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

ich habe momentan so viel um die Ohren das ich es noch nicht geschafft habe Deinen Vorschlag zu testen! Ich hoffe aber dass ich am Wochenende mal dazu komme. Habe Dich also nicht vergessen!!!

Liebe Grüße,

Michael

 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,


heute hatte ich endlich mal die Zeit Deinen Vorschlag umzusetzen!

HIP, HIP, HURRA - ES KLAPPT UND SIEHT SEHR GUT AUS!

STEPHAN ICH DANKE DIR, DANKE, DANKE, DANKE!!!

Bei der Maskierung hatte ich ein paar Probleme da ich über und unter dem maskierten Textfeld noch ein zusätzliches Textfeld sowie eine Schaltfläche implementiert hatte.
Diese Elemente sollten schließlich weiter sichtbar bleiben. Also war wieder rätseln angesagt aber auf die Lösung bin ich schließlich selbst draufgekommen. Neue Ebene 3 anlegen und dort die zwei Elemente unterbringen, fertig. Schon sind die Elemente wieder sichtbar.

Bezüglich der Größenanpassung des Textfeldes hatte ich bis jetzt noch keine Probleme festgestellt und demnach brauchte ich kein neues Textfeld per AS erstellen. Vielleicht liegt es auch daran, dass ich auf der Bühne dem Textfeld die kleinste Höhe von 19,60 und der Maskierung eine Höhe von 283 angegeben habe. Ich gebe zu das ich bis jetzt nur mit vier unterschiedlichen Textlängen gearbeitet habe, morgen nehme ich mir eine noch längere vor als die, die ich Dir letztens gegeben habe. Mal schauen was sich daraus ergibt.

Vor zwei Problemen stehe ich aber immer noch:

1. Das Textfeld mit dem Mausrad scrollen;
2. Das Textfeld mit der Tastatur (Pfeiltasten) rauf und runter bewegen (wegen der Barrierefreiheit).

Wäre zwar schön wenn das auch mit dem Smooth gehen würde, aber ich bin schon zufrieden damit wenn man überhaupt mit diesen zwei zusätzlichen alternativen Scrollen kann. Das könnte man doch irgendwie über die Scrollbar laufen lassen oder hast Du noch eine andere Idee?

Ach ja, schau Dir mal diese Flashanimation an und immer wieder auf Start klicken ;):

http://biggeekdad.com/2009/11/parental-control/

Die Freiwillige Selbstkontrolle (FSK) würde bei dieser Zensur vor neid erblassen! :D


Vielen Dank nochmals und liebe Grüße,

Michael
 

ssandner

Nicht mehr Newbie

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Indium,

freut mich zu hören, dass es alles schon mal soweit klappt.
Zum Thema Mausrad habe ich folgendes rausgefunden:
Das MouseWheelEvent hat eine Eigenschaft "delta", die letzendlich die Bewegungsrichtung des Mausrades und die "Geschwindigkeit" liefert. Der Wert der geliefert wird, ist ein positiver/negativer Integer. Das Vorzeichen liefert die Mausradrichtung und der Wert ist die Änderungsrate, welche im Betriebssystem eingestellt werden kann. Mein Mausrad liefert den Wert "+3" bzw. "-3". Abfangen kann man den Wert, indem man einen EventListener erzeugt und dann in einer Funktion das Delta abfragt:
Code:
stage.addEventListener(MouseEvent.MOUSE_WHEEL,mouseWheelF);

function mouseWheelF(event:MouseEvent)
{
	trace("delta hat den Wert: " + event.delta);
}
Einen kleinen Bug habe ich festgestellt: Wenn man dies in Flash testet (Strg + Enter), dann feuert der Event erst, wenn man einmal auf die Bühne geklickt hat. Dies ist bei mir aber nur in der Vorschau in Flash, sobald man die fla veröffentlicht und die swf öffnet, funktioniert dies einwandfrei.

Nun mein Lösungsvorschlag zu deiner Datei. Ich bin mal davon ausgegangen, dass das Scrollen mit dem Mausrad nur ausgeführt werden soll, wenn sich die Maus über dem Textfeld befindet, falls nicht einfach die Verschachtelung mit MouseOver/MouseOut weglassen:
Code:
[...]
this.info_textfenster.foto_beschreibung.addEventListener(MouseEvent.MOUSE_OVER, addWheelF);
this.info_textfenster.foto_beschreibung.addEventListener(MouseEvent.MOUSE_OUT, removeWheelF);
[...]
function addWheelF(event:MouseEvent)
{
	stage.addEventListener(MouseEvent.MOUSE_WHEEL,mouseWheel);
}

function removeWheelF(event:MouseEvent)
{
	stage.removeEventListener(MouseEvent.MOUSE_WHEEL,mouseWheel);
}

function mouseWheel(event:MouseEvent)
{
	if(this.info_textfenster.scrollbar_eins.scrollbalken_eins.y <= yMin)
		this.info_textfenster.scrollbar_eins.scrollbalken_eins.y = yMin;
	if(this.info_textfenster.scrollbar_eins.scrollbalken_eins.y >= yMax)
		this.info_textfenster.scrollbar_eins.scrollbalken_eins.y = yMax;
	this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=this.info_textfenster.scrollbar_eins.scrollbalken_eins.y - event.delta;
	var sp:Number = this.info_textfenster.scrollbar_eins.scrollbalken_eins.y / yMax;
	Tweener.addTween(this.info_textfenster.foto_beschreibung, {y:(-sp*(this.info_textfenster.foto_beschreibung.height-this.info_textfenster.masker.height)), time:0.5, transition:"easeOutQuart"});
	event.updateAfterEvent();
}
Ich habe hier einen kleinen Trick angewendet: Ich bewege die Scrollbar mit dem Mausrad, genau wie in der Funktion thumbMove aus meinem Lösungsvorschlag oben, frage dann die Position der Scrollbar ab und führe wieder den gleichen tween aus wie ursprünglich um den text zu tweenen. Also bei mir funzt.
Die Steuerung mit den Tasten sollte eigentlich auf die gleiche Art und Weise funktionieren. Es werde es mal ausprobieren und melde mich wieder.

Gruß Stephan

P.S. So sieht es bei mir aus:



P.P.S: Danke an ad86 für den Tipp mit swfcabin
 
Zuletzt bearbeitet:

ssandner

Nicht mehr Newbie

Tastatursteuerung

Hallo Indium,

so hier jetzt mein Lösungsvorschlag für das Scrollen mit den Pfeiltasten:
Code:
(....)
stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressedF);

(...)

function KeyPressedF(event:KeyboardEvent)
{
	var Keystep:Number=0;
	switch (event.keyCode)
	{
		case Keyboard.UP :

			Keystep=Keystep-3;
			trace(Keystep);
			break;

		case Keyboard.DOWN :
			Keystep=Keystep+3;
			trace(Keystep);
			break;
	}
	if (this.info_textfenster.scrollbar_eins.scrollbalken_eins.y<=yMin)
	{
		this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=yMin;
	}
	if (this.info_textfenster.scrollbar_eins.scrollbalken_eins.y>=yMax)
	{
		this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=yMax;
	}
	this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=this.info_textfenster.scrollbar_eins.scrollbalken_eins.y+Keystep;
	var sp:Number=this.info_textfenster.scrollbar_eins.scrollbalken_eins.y/yMax;
	Tweener.addTween(this.info_textfenster.foto_beschreibung, {y:(-sp*(this.info_textfenster.foto_beschreibung.height-this.info_textfenster.masker.height)), time:0.5, transition:"easeOutQuart"});
	event.updateAfterEvent();
}

Man könnte jetzt noch zur Codeoptimierung die letzten zwölf Zeilen in eine eigene Funktion ausladen und dann in allen drei Fällen (Mausbewegung, Mausrad und Pfeiltasten) nur noch die Funktion aufrufen. Macht den Code noch schlanker. Habe ich jetzt aus Gründen der Übersichtlichkeit nicht gemacht ;-)

Mein Beispiel sieht jetzt so aus:



Gruß

Stephan
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Guten morgen Stephan,

Deine letzten zwei Beiträge sind der absolute Oberhammer!

Für so viel Aktivität, Anteilnahme, Begeisterung, Beschäftigung, Beteiligung, Eifer, Enthusiasmus, Hingabe, Interesse, Mitwirkung, Teilnahme und Unterstützung ein fettes Dankschön! :)

Bezüglich des Scrollens mit dem Mausrad habe ich zwar zwei Bugs festgestellt aber da gehe ich die nächsten Tage darauf ein, da ich jetzt noch einiges Erledigen muss.

Fällt mir noch was ein: Ist es überhaupt möglich einen kompletten Tween (Tweener Caurina) aus einem Array per Zufall zu starten? Ich stelle mir das ungefähr so vor:

PHP:
var tw_array:Array = new Array(); 
tw_array [0] = "Tweener.addTween(mc, { x: 500, time: 5, transition: "linear", onComplete: mc_schliessen } );";
tw_array [1] = "Tweener.addTween(mc, { x: 400, time: 2, transition: "linear", onComplete: mc_schliessen } );";
tw_array [2] = "Tweener.addTween(mc, { x: 200, time: 1, transition: "linear", onComplete: mc_schliessen } );";

function zufall_aus_array():void
{
Code für die Zufallauswahl
Code für Ausgabe und starten des Tweens Bsp.: tw_array [2] 
}

Wenn dies möglich wäre dann könnte man z. B. einen MC jedes Mal irgendwo anders hin bewegen oder die Farbe eines Scrollbalkens oder den Scroller neu einfärben. Es wären dann kaum noch grenzen gesetzt. Vielleicht wäre das auch für Deine Projekte interessant. ;)

So jetzt muss ich los.

Wegen den Bugs melde ich mich diese Woche noch!

Vielen Dank nochmals und liebe Grüße,

Michael
 
Zuletzt bearbeitet:

ssandner

Nicht mehr Newbie

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Indium, dies:
Code:
var tw_array:Array = new Array(); 
tw_array [0] = "Tweener.addTween(mc, { x: 500, time: 5, transition: "linear", onComplete: mc_schliessen } );";
tw_array [1] = "Tweener.addTween(mc, { x: 400, time: 2, transition: "linear", onComplete: mc_schliessen } );";
tw_array [2] = "Tweener.addTween(mc, { x: 200, time: 1, transition: "linear", onComplete: mc_schliessen } );";
wird nicht funktionieren. Du kannst einen String nicht als Anweisung benutzen. Soweit ich das ergoogelt habe, verstößt das gegen E4X-Standards, an die sich auch AS3 hält. Ich habe es auch mal getestet, entweder bekommt man Fehlermeldungen oder es passiert nichts.
Nichts destotrotz gibt es aber schon eine Lösung.
Die Zufallsfunktion bekommt man in as3 ziemlich einfach hin:
ich habe mal auf der Bühne einen Button platziert, Instanzname "zufall_btn" und ein dynamisches Textfeld, Instanzname "zufalltext_txt" (Nur damit man nicht immer neu testen muss, sondern per buttonclick einen neuen Zufallswert bekommt:

Code:
var temp:uint=0;
this.zufall_btn.addEventListener(MouseEvent.CLICK, zufallF);
this.zufalltext_txt.text=temp.toString();//nur damit das textfeld am Anfang nicht leer ist

function randomNumber(low:Number=0, high:Number=1):Number
{
  return Math.floor(Math.random() * (1+high-low)) + low;
}

function zufallF(event:MouseEvent)
{
	temp=randomNumber(0, 9);
	this.zufalltext_txt.text=temp.toString();
}

Bei jedem Buttonclick wird jetzt eine Zufallszahl im Textfeld angezeigt.
Um jetzt einen Movieclip zu tweenen, muss man die einzelnen Parameter des Tweens in Variablen packen. Ich habe dies mal anhand deines Beispiels mit der x-Postion gemacht:
Vorher habe ich einen Movieclip auf der Bühne platziert, Instanzname "symbol1_mc".
Code:
import caurina.transitions.*;

var temp:uint=0;
var tw_array:Array = new Array(); 
tw_array [0] = "500";
tw_array [1] = "-400";
tw_array [2] = "200";
this.zufalltext_txt.text=temp.toString();
this.zufall_btn.addEventListener(MouseEvent.CLICK, zufallF);

function randomNumber(low:Number=0, high:Number=1):Number
{
  return Math.floor(Math.random() * (1+high-low)) + low;
}

function zufallF(event:MouseEvent)
{
	temp=randomNumber(0, 2);
	this.zufalltext_txt.text=temp.toString();
	var temp2:String=tw_array [temp];
	Tweener.addTween(this.symbol1_mc, {x:temp2, time: 3, transition: "linear"});
}

Jedesmal wenn ich den Button betätige, wird jetzt der Movieclip per Zufall getweent.
Ich denke dies lässt sich ausbauen.....

Gruß Stephan
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

hier ein wenig Stuff für Dich (und das an einem Freitag). ;)

Ich fange mal mit den zwei Fehlern an die ich letztens angedeutet habe;


Fehler 1:

Beim Scrollen mit dem Mausrad und den Pfeiltasten der Tastatur wurde zu weit nach oben und nach unten gescrollt. Zu sehen waren ungefähr 3 Zeilen ohne Text.

Abhilfe:


Verschiebung der AS3 Zeile mit dem event.delta; in die dritte Zeile der function mouseWheel.


PHP:
  function mouseWheel(event:MouseEvent)
  {
  this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=this.info_textfenster.scrollbar_eins.scrollbalken_eins.y - event.delta;
  if(this.info_textfenster.scrollbar_eins.scrollbalken_eins.y <= yMin)
  this.info_textfenster.scrollbar_eins.scrollbalken_eins.y = yMin;
  if(this.info_textfenster.scrollbar_eins.scrollbalken_eins.y >= yMax)
  this.info_textfenster.scrollbar_eins.scrollbalken_eins.y = yMax;
  var sp:Number = this.info_textfenster.scrollbar_eins.scrollbalken_eins.y / yMax;
  Tweener.addTween(this.info_textfenster.foto_beschreibung, {y:(-sp*(this.info_textfenster.foto_beschreibung.height-this.info_textfenster.masker.height)), time:0.5, transition:"easeOutQuart"});
  event.updateAfterEvent();
  }


Gleiches gilt für die function KeyPressedF. Hier die Zeile 25 mit dem …scrollbalken_eins.y+Keystep; auf die Zeile 17 verschieben.


PHP:
  function KeyPressedF(event:KeyboardEvent)
  {
   var Keystep:Number=0;
   switch (event.keyCode)
   {
    case Keyboard.UP :
   
    Keystep=Keystep-3;
    trace(Keystep);
    break;
   
    case Keyboard.DOWN :
    Keystep=Keystep+3;
    trace(Keystep);
    break;
   }
  this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=this.info_textfenster.scrollbar_eins.scrollbalken_eins.y+Keystep;
   if (this.info_textfenster.scrollbar_eins.scrollbalken_eins.y<=yMin)
   {
    this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=yMin;
   }
   if (this.info_textfenster.scrollbar_eins.scrollbalken_eins.y>=yMax)
   {
    this.info_textfenster.scrollbar_eins.scrollbalken_eins.y=yMax;
   }
  var sp:Number=this.info_textfenster.scrollbar_eins.scrollbalken_eins.y/yMax;
  Tweener.addTween(this.info_textfenster.foto_beschreibung, {y:(-sp*(this.info_textfenster.foto_beschreibung.height-this.info_textfenster.masker.height)), time:0.5, transition:"easeOutQuart"});
  event.updateAfterEvent();
  }


Schon ist das Problem mit dem zu weit nach oben und unten Scrollen gelöst.



Zu Fehler 2:


Bei zu wenig Text wird der Scrollbalken ausgeblendet. Trotzdem wird der Text beim Mausrad noch um eine Zeile gescrollt.


Abhilfe:


PHP:
name_des_textobjects.mouseWheelEnabled = false;



Des Weiteren habe ich noch einen Fehler entdeckt aber der ist richtig ärgerlich;


Zu Fehler 3:


Beim betätigen des Mausrades wird nicht nur der Text gescrollt sondern auch die komplette Browser Seite (HTML) wenn diese größer ist oder jemand Symbolleisten im Browser installiert hat. Hierbei handelt es sich um einen Bug von AS3. In AS2 gab es dieses Problem nicht soweit wie ich das gelesen habe.


Drei Abhilfen die meines Erachtens keine sind:


Entweder keine Wheelfunktion im swfobject anbieten, die ganze Arbeit auf AS2 umschreiben oder auf eine JavaScript Steuerung ausweichen. Bei der Javascript Steuerung merke ich an, dass diese auch nur dann funktioniert wenn der User auch JavaScript (z. B. Activescripting) aktiviert hat und das swfobject ebenfalls über JavaSript angesteuert wird. Falls ich etwas Falsches geschrieben habe dann bitte ich um Korrektur, Danke. Nichts desto trotz, hier zwei Links über Flash, JavaScript und Mousewheel:







Zur Codeoptimierung brauche ich aber noch mal Deine Hilfe.

Ich habe den Code jetzt soweit am laufen, dass man mit Maustaste, Mausrad und Pfeiltasten der Tastatur inkl. Smooth Scrollen kann. Hierbei habe ich die function, in der der Smooth ausgeübt wird, nicht mehr mit KeyboardEvent oder MouseEvent deklariert sondern einfach nur mit (ev) :void.

Jetzt ist es so das nach dem Scrollen mit den Pfeiltasten das Scrollen mit dem Mausrad nicht funktioniert. Erst wenn ich einmal auf den Scrollbalken klicke funktioniert das Scrollen mit dem Mausrad wieder. Klicke ich anstatt auf den Scrollbalken auf das Textfeld, dann funktioniert das Scrollen mit den Pfeiltasten nicht mehr richtig. Da bei gedrückter Pfeiltaste (rauf/runter beides gleich) das Scrollen normalerweise durchgängig ist, bleibt der Text jedoch jetzt stehen bis ich loslasse. Hier hüpft der Text an die Stelle wo der Scrollbalken stehen blieb. Klicke ich jetzt auf den Scrollbalken funktioniert es wieder bestens. Ich hoffe Du hast mich ein wenig verstanden. Hier mal mein laienhafter Versuch der Codeoptimierung (schaue nicht auf die vielen geschwungenen Klammern, einige kommen noch weg):


PHP:
  var yOffset:Number;
  var yMin:Number = 0;
  var yMax:Number = info_textfenster.textbox.scrollbar_eins.scrollbalkenhintergrund_eins.height - info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.height;
  var scroll_freigabe:Number;
   
  // Textscroll mit Maustaste
  // -----------------------------------
  info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.addEventListener(MouseEvent.MOUSE_DOWN, thumbDown);
  stage.addEventListener(MouseEvent.MOUSE_UP, thumbUp);

function thumbDown(ev:MouseEvent):void
{
scroll_freigabe = 1;
stage.addEventListener(MouseEvent.MOUSE_MOVE,scrolltext_smooth);
 yOffset = mouseY - info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y;
}
  function thumbUp(ev:MouseEvent):void
  {
   stage.removeEventListener(MouseEvent.MOUSE_MOVE, scrolltext_smooth);
  }
   
  // Textscroll mit Mausrad
  // ----------------------
  info_textfenster.textbox.foto_beschreibung.addEventListener(MouseEvent.MOUSE_OVER, addWheelF);
  info_textfenster.textbox.foto_beschreibung.addEventListener(MouseEvent.MOUSE_OUT, removeWheelF);
   
  function addWheelF(ev:MouseEvent)
  {
   scroll_freigabe = 2;
   stage.addEventListener(MouseEvent.MOUSE_WHEEL, scrolltext_smooth);
  }
  function removeWheelF(ev:MouseEvent):void //
  {
   stage.removeEventListener(MouseEvent.MOUSE_WHEEL, scrolltext_smooth);
  }
   
    // Textscroll mit Keyboard (Pfeiltasten)
  // ----------------------------------------------
  stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressedF);
   
  function KeyPressedF(ev:KeyboardEvent):void //
  {
   scroll_freigabe = 3;
   scrolltext_smooth(ev);          
  }
   
    // Textscroll & Smooth Funktion
  // ----------------------------
  function scrolltext_smooth(ev):void
  {
   if (scroll_freigabe === 1)
   {
    info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y = mouseY - yOffset;
   }
   if (scroll_freigabe === 2)
   {
    info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y = info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y - ev.delta;
   }
    if (scroll_freigabe === 3)
   {
    var Keystep:Number=0;
    switch (ev.keyCode)
    {
     case Keyboard.UP :
     Keystep=Keystep-3;
     trace(Keystep);
     break;
   
     case Keyboard.DOWN :
     Keystep=Keystep+3;
     trace(Keystep);
     break;
    }
    info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y = info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y+Keystep;
   }
   if(info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y <= yMin)
   info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y = yMin;
   if(info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y >= yMax)
   info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y = yMax;
   var sp:Number = info_textfenster.textbox.scrollbar_eins.scrollbalken_eins.y / yMax;
   Tweener.addTween(info_textfenster.textbox.foto_beschreibung, {y:(-sp*(info_textfenster.textbox.foto_beschreibung.height - info_textfenster.masker2.height)), time:1, transition:"easeOutQuart"});
   ev.updateAfterEvent();
  }


Vielleicht findest Du ja den Fehler oder hast einen anderen Vorschlag parat.


Wegen dem Vorschlag mit dem Array ein dickes Dankeschön aber das schaue ich mir mal morgen genauer an.


So jetzt wünsche ich Dir erst einmal ein schönes und erholsames Wochenende!!!


Grüße,


Michael
 
Zuletzt bearbeitet:

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,


da ich seit meinem letzten Eintrag vom 15.04.2011 noch nichts von Dir gehört habe, gehe ich mal davon aus, dass Du entweder im Stress oder aber auch vielleicht im verdienten Urlaub bist.

Wie dem auch sei, Deine gesamten Tipps sowie auch die Erklärung zum Array waren absolut Super aber, ich weiß gar nicht wie ich das alles wiedergutmachen kann! Ein Dankeschön alleine reicht bei langem schon nicht mehr aus! Für den Anfang dennoch erst einmal :danke: !!!

Wegen dem Array möchte ich Dir mitteilen das man einen String als Anweisung benutzen kann, nur in einer anderen form als wie ich das vorher gedacht habe. Dein Vorschlag hat mich dazu gebracht komplette Tweens zufällig zu starten, und zwar mit befüllen einer Variablen aus Deinem Array und der Zufallswert wird dann mit den vordefinierten Ifs verglichen.

Beispiel:

PHP:
  var temp:uint = 0;
  var tweener_array:Array = new Array(); 
  tweener_array[0] = "0";
  tweener_array[1] = "1";
  tweener_array[2] = "2";
  var tweennum = temp.toString();
   
  function zufallszahl(low:Number = 0, high:Number = 1):Number
  {
  return Math.floor(Math.random() * (1+high-low)) + low;
  }
   
  function grosses_bild_schliessen():void 
  { 
  temp = zufallszahl(0, 2);
  tweennum = temp.toString();
  var zufallsausgabe:String = tweener_array [temp];
   
  if (zufallsausgabe === "0")
  Tweener.addTween( grosses_bild, { x: -510, scaleX: 0, scaleY: 0, y: Math.random() * 350 + 1, time: 1.2, transition: "linear", onComplete: grosses_bild_entfernen } );
  if (zufallsausgabe === "1")
  Tweener.addTween( grosses_bild, { x: -510, scaleX: 1, scaleY: 1, y: Math.random() * 350 + 1, time: 1.2, transition: "linear", onComplete: grosses_bild_entfernen } );
  if (zufallsausgabe === "2")
  {
  Tweener.addTween( grosses_bild, { x: 0, time:0.5, transition: "easeInQuart"});
  Tweener.addTween( grosses_bild, { y: 15, time:1, transition: "easeOutBounce", delay: 1.5, onComplete: grosses_bild_entfernen});
  }
  }

Mag sein das diese Zusammensetzung für AS Programmierer ein absoluter Horror ist aber es funktioniert schon mal für den Anfang. Wenn ich mal wieder richtig Zeit habe werde ich natürlich versuchen Deinen Vorschlag auszubauen und zwar mit nur einem einzigen Tweener.addTween().

Bis bald und viele Grüße,

Michael
 

ssandner

Nicht mehr Newbie

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Michael, so jetzt hatte ich mal etwas Zeit zum Experimentieren.
Der Reihe nach:
1. Scrollproblem im Browser. Ich habe auch mal recherchiert und viele Leute beklagen dieses Problem. Allerdings glaube ich nicht wirklich dass es am Actionscript 3 liegt. Ich habe in einigen englischen Foren auch Beiträge gefunden, die behaupteten, dies wäre schon immer so gewesen. Ich glaube das Problem liegt im Browser, also liegt die naheliegendste Lösung bei Javascript. Ich bin allerdings auch auf eine Flashlösung gestossen, die zumindest bei mir funktioniert:
QuickTip: Scrolling Only in SWF, not on Page. | Rasmus Wriedt Larsen - Flash Game Development
Schau dir mal seine Methode eins genauer an. Ich habe es bei mir getestet, indem ich eine html-seite mit sehr viel Text erstellt habe (Dadurch mit Scrollbar im Browser) und dann unsere smoothing text swf oben auf der HTML-Seite eingebunden. In Firefox und IE funktioniert es bei mir. Durch den Code der importierten Klasse bin ich noch nicht durchgestiegen, aber wenn es funzt??!! So what....
Einfach mal die Klasse runterladen, ins flash verzeichnis kopieren und dann zuoberst
Code:
import ru.etcs.ui.MouseWheel;
Die Funktion "addWheelF" wird ergänzt
Code:
function addWheelF(event:MouseEvent)
{
	stage.addEventListener(MouseEvent.MOUSE_WHEEL,mouseWheel);
	MouseWheel.capture() ; // diese Zeile kommt dazu
	
}
Die Funktion "removeWheelF" wird ergänzt
Code:
function removeWheelF(event:MouseEvent)
{
	MouseWheel.release() ; //diese Zeile kommt dazu
	stage.removeEventListener(MouseEvent.MOUSE_WHEEL,mouseWheel);
}


2. Codeoptimierung: Kurz gesagt - vergiss es. Deinen Code konnte ich nicht testen, irgendwo sind unsere Datei unterschiedlich-ich bekomme nur Fehlermeldungen. Aber ich habe auch meinen Code noch versucht zu optimieren - so ziemlich jeder Versuch ging irgendwie in die Hose, weil irgendetwas nicht funktionierte (entweder Mausrad oder Tastatursteuerung oder beides ;-) ). Ich würde vorschlagen, wir bleiben beim Ursprungscode, dort funktionierte wenigstens alles (Außer das unter 1. beschriebene Doppelscroll-Problem im Browser), so lang ist ja auch unser Code nicht.

Auf deine random-tweening Lösung bin ich schon mal gespannt.

Gruß Stephan
 
Zuletzt bearbeitet:

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

Dankeschön!!! :)

Ich muss leider eingestehen das ich momentan etwas verhindert bin, kann also noch ein paar Tage dauern bis ich alles durchgeschaut habe.

Melde mich wieder!

Gruß,

Michael
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

heute hatte ich endlich mal wieder etwas Luft sich mit Flash bzw. mit AS zu beschäftigen.

Zu 1., dass Scrollproblem im Browser:

Nach Betrachten der MouseWheel.as muss ich eingestehen dass ich überhaupt nichts vom Code kapiere. Ich verstehe zum Beispiel nicht warum in den Arrays die ganzen Hexadezimalzahlen drinstehen, was diese bedeuten und wie das alles zusammenläuft. Rundum, ich bin einfach zu blöd für dieses Script. Also interpretiere ich Deinen letzten Satz,

wenn es funzt??!! So what....

und weise daraufhin, dass es auch bei mir geht. DANKE STEPHAN!
Getestet wurde dies mit nachfolgenden Browsern in Verbindung mit Flash Player 10:

Firefox Version 4.0.1
Opera Version 11.10
Google Chrome Version 11
Internet Explorer Version 6.0.29
Netscape Navigator Version 9.0.0.6

Jetzt habe ich aber per Zufall gelesen, dass das Mausrad beim Mac ohne zusätzliches Script gar nicht läuft. Abhilfe würde eine MouseWheel Klasse von pixelbreaker schaffen, die allerdings nur bei eingeschalteten JavaScript funktioniert:

http://blog.pixelbreaker.com/flash/swfmacmousewheel

Gibt es da eine Lösung die auch ohne JavaScript klappt (wie beim MouseWheel.as)?
Ich habe zwar gesucht wie ein blöder und bin auch auf nachfolgenden Link gelandet:

Matt Giger – Simple solution for MOUSE_WHEEL events on Mac
http://blog.earthbrowser.com/2009/01/simple-solution-for-mousewheel-events.html

bin mir aber nicht sicher ob es das richtige ist.

Zusätzliches Problem ist das ich keinen Mac Rechner habe um es vernünftig zu testen.


Zu 2., Codeoptimierung:

Hast ja recht, um ca. 3 KB zu sparen muss man nicht den Aufwand betreiben. So bleibt der Code auch noch übersichtlich.


Zur random-tweening Lösung:

Sei unbesorgt, bin auch schon darauf gespannt welchen Blödsinn ich daraus noch machen werde! ;)

Viele Grüße,

Michael
 

ssandner

Nicht mehr Newbie

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Gibt es da eine Lösung die auch ohne JavaScript klappt (wie beim MouseWheel.as)?
Ich habe zwar gesucht wie ein blöder und bin auch auf nachfolgenden Link gelandet:

Matt Giger – Simple solution for MOUSE_WHEEL events on Mac


bin mir aber nicht sicher ob es das richtige ist.

Zusätzliches Problem ist das ich keinen Mac Rechner habe um es vernünftig zu testen.

Hallo Michael, bin wieder an Bord. Dein Fund auf blog.earthbrowser.com macht einen guten Eindruck, alle Kommentare sagen aus das es funktioniert. Ich habe leider auch keinen Mac (vielleicht schenkt mir ja mal jemand einen ;-) ), also kann ich es auch nicht ausprobieren, ich habe mir den Code heruntergeladen und eingebunden und bekomme auf jeden Fall keine Fehlermeldung und alles bisher erstellte funktioniert weiterhin. Vielleicht kann man ja mal eine Testseite erstellen und die Mac-User hier im Forum bitten unsere Scrollbar zu testen.

Gruß

Stephan
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

willkommen zurück auf dem PSD - Tutorials Flaggschiff!

Ich hoffe Du hattest einen erholsamen Urlaub!

Bezüglich der Klasse vom blog.earthbrowser.com werde ich in den nächsten Tagen eine Testseite erstellen. Ich mache dafür aber einen neuen Diskussionsthread auf.

Viele Grüße,

Michael
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

habe gerade ein neues Thema in zwei Kategorien erstellt wegen dem Mausrad unter MAC!

Flash > Allgemein:


Webbereich > Allgemeines:


Mal schauen was als Antwort kommt! :rolleyes:


Viele Grüße,

Michael
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

möchte Dir kurz mitteilen dass das Scrollen mit der Klasse von Matt Giger unter Mac weitestgehend funktioniert!

Zur random-tweening Lösung empfehle ich Dir meine erste Variante anzuwenden.

Link:

Die ist zwar nicht schick aber problemloser zu bearbeiten, da Caurina einfach zu viele Funktionen bereitstellt, das gebe höchstens nur Chaos.

Eins ist mir aber bei Deiner Array Zufallsfunktion aufgefallen, sie wiederholt oft die gleichen Tweens mehrmals hintereinander. Hast Du da noch eine Möglichkeit das zu unterbinden? Ich finde darüber nichts im Internet, vielleicht auch, weil ich nicht weiß wie ich die Frage richtig stellen soll. Wäre nett von Dir!!!

Ich wünsche Dir noch ein schönes Wochenende und sende viele Grüße,

Michael
 

ssandner

Nicht mehr Newbie

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Michael,

ich habe die Threads zum Scrollen auf dem Mac auch mit Freude zur Kenntnis genommen. Scheint jetzt ja alles zu klappen.
Würde gerne irgendwann mal das Endergebnis sehen.

Zum random Tweening:
Dass sich die Tweens manchmal wiederholen, liegt (vermute ich) daran, dass eine random- Funktion eigentlich kein echter Zufallszahlengenerator ist. Man kann dieses Problem aber umgehen, indem man sich eine Hilfsvariable anlegt, in der der Zufallswert auch abgespeichert wird, nach dem nächsten random-Durchlauf vergleicht man den random-Wert mit dem Inhalt der Hilfsvariable (die den vorherigen Wert noch enthält) und wenn die Werte gleich sind, startet man die random-Funktion einfach nochmal, bis sich die Werte unterscheiden.
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

ich werde Dir das Endergebnis nicht vorenthalten!
Ein wenig Geduld musst Du aber mitbringen, da noch einige Kleinigkeiten implementiert werden müssen. Keine Angst, dass werde ich wohl irgendwie alleine hinbekommen, hoffe ich jedenfalls! :D

Verspreche Dir aber vom Ergebnis nicht zu viel, da dies mein erstes Projekt in Flash bzw. AS ist. Soviel kann ich Dir aber Verraten, dass Projekt ist eine Bildergalerie angelehnt an eine Polaroid Galerie aber dennoch anders. Ich halte diesbezüglich nicht viel davon weil mir persönlich die Einfachheit eher gefallen würde aber ein guter Freund von mir wollte es so haben.

Dein Tipp und die Erklärung zum random Tweening ist eigentlich genau das was ich gesucht habe (Gedanklich). Ich versuche das mal die nächsten Tage irgendwie Umzusetzen. Vielen Dank dafür!!! :daumenhoch:

Wünsche Dir ein schönes Wochenende!

Grüße,

Michael
 

Indium1

Nicht mehr ganz neu hier

AW: Smoothing von Text (CS5 / AS3) / An ssandner

Hallo Stephan,

ich glaube dass ich doch noch mal Deine Hilfe benötige. Ich bekomme das mit dem random Tweening irgendwie nicht in meinen Kopf. Du hast geschrieben man lege sich eine Hilfsvariable an, in dem der Zufallswert abgespeichert wird. Das passt aber irgendwie nicht zusammen, glaube ich zumindest!

Nehmen wir mal an ich nenne die Hilfsvariable var vorheriger_wert:String;
Diese befülle ich mit dem aktuellen Zufallswert. Nach dem nächsten random-Durchlauf wird aber der vorherige Wert automatisch überschrieben, sodass man hier gar keinen Vergleich mehr anstreben könnte. Zufallswert und vorheriger Wert wären ja dann vollkommen Identisch. Wenn man eine Variable in AS3 vor Überschreibung schützen könnte würde es evtl. funktionieren, gefunden habe ich im Internet allerdings nichts darüber. Nachfolgend ein Teil des Zufallscripts:

Code:
[FONT=Arial][SIZE=3]var temp:uint = 0;
var tweener_array:Array = new Array(); 
tweener_array[0] = '0';
tweener_array[1] = '1';
tweener_array[2] = '2';
var tweennum = temp.toString();

function zufallszahl(low:Number = 0, high:Number = 2):Number
{
 return Math.floor(Math.random() * (1+high-low)) + low;
}

function grosses_bild_schliessen():void 
{ 
 temp = zufallszahl(0, 2); 
 tweennum = temp.toString();
 var zufallsausgabe:String = tweener_array [temp];

 if (zufallsausgabe === '0')
   Tweener.addTween(mc_bild_gross, {x: -510, scaleX: 0, scaleY: 0, y: Math.random() * 350 + 5, time: 1.2, transition: "linear", onComplete: grosses_bild_entfernen});
 if (zufallsausgabe === '1')
   Tweener.addTween(mc_bild_gross, {x: -1200, y: 250, scaleX: 0.4, scaleY: 0.4, time: 1.7, transition: "linear", onComplete: grosses_bild_entfernen});
 if (zufallsausgabe === '2')
  {
   Tweener.addTween(mc_bild_gross, {x: 120, y: 90, height: 180, width: 240, time: 0.4, transition: "linear"});
   Tweener.addTween(mc_bild_gross, {x: -120, y: 280, _bezier:[{x: 804.5, y: 89.5}, {x: 804.75, y: 227.75}], time: 1.5, transition:"linear", delay: 0.4, onComplete: grosses_bild_entfernen});
  }
 }[/SIZE][/FONT]


Vielleicht Denke ich einfach zu kompliziert. :uhm: Um auf den Boden der Tatsache zurückzukommen bitte ich Dich um Unterstützung!


Vielen Dank und Grüße,

Michael
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.634
Beiträge
1.538.448
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben