Zurück   Flashforum > Flash > Flash erweitern > Flash Entwicklungsumgebung erweitern

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-06-2005, 13:06   #1 (permalink)
Neuer User
 
Benutzerbild von StormLogiX
 
Registriert seit: Jan 2005
Ort: Stuttgart
Beiträge: 8
Mit JSFL alle Elemente zum nächsten vollen Pixel verschieben

Hallo,
kann mir jemand helfen? Ich brauche ein JSFL Skript, dass alle Elemente auf der Bühne in meinem Movie zum nächsten vollen Pixel verschiebt.
Zum Beispiel ein Element auf der Bühne hat x=103,4 und y=204,6
Das Element sollte dann verschoben werden nach x=103 und y=205
Und so weiter mit allen Elementen auf der Bühne.

Geht das?
StormLogiX ist offline   Mit Zitat antworten
Alt 28-06-2005, 16:53   #2 (permalink)
Neuer User
 
Benutzerbild von StormLogiX
 
Registriert seit: Jan 2005
Ort: Stuttgart
Beiträge: 8
So, ich habe mir mal was zusammengebastelt.
Mit trace funktioniert das schon ganz gut. Genau wie ich es haben will. Allerdings wie krieg ich jetzt die Elemente tatsächlich bewegt?
myElement.moveSelectionBy({x:_diffX, y:_diffY}) funktionert irgendwie nicht.



ActionScript:
  1. function getNameWithoutPath(_name){
  2.   var namePartsArray = new Array();
  3.   namePartsArray = _name.split("/");
  4.   return namePartsArray[namePartsArray.length-1]
  5. }
  6.  
  7. function moveToFullPixelEverythingOnStage(){
  8.   var myTimeline = doc.getTimeline();
  9.   //
  10.   // loop through timelines
  11.   //
  12.   for (var k = 0; k < myTimeline.layers.length;k++) {
  13.     var myLayer = myTimeline.layers[k];
  14.     //
  15.     // loop through frames
  16.     //
  17.     for (var j = 0; j < myLayer.frameCount;j++) {
  18.       var myFrame =myLayer.frames[j];
  19.       //
  20.       // loop throught elements
  21.       //
  22.       for (var i = 0;i < myFrame.elements.length; i++) {
  23.         var myElement = myFrame.elements[i];
  24.         var _x=myElement.left;
  25.         var _y=myElement.top;
  26.         var _newX=Math.round(_x);
  27.         var _newY=Math.round(_y);
  28.         var _diffX=_newX-_x;
  29.         var _diffY=_newY-_y;
  30.         //myElement.moveSelectionBy({x:_diffX, y:_diffY}); // <-- funktioniert nicht!
  31.         //tracing:
  32.         if (Math.abs(_diffX)||Math.abs(_diffY)){
  33.           fl.trace("-->layer="+myLayer.name+" "+
  34.                "frame="+j+" "+
  35.                "element="+myElement.name+" ("+getNameWithoutPath(myElement.libraryItem.name)+")"
  36.                );
  37.           if (Math.abs(_diffX)) fl.trace("x="+_x+" to x="+_newX);
  38.           if (Math.abs(_diffY)) fl.trace("y="+_y+" to y="+_newY);
  39.         }
  40.       }
  41.     }
  42.   }
  43. }
  44.  
  45. function disableSmoothingInLibrary(){
  46.   var lib_array = doc.library.items;
  47.   for(var i = 0; i < lib_array.length; i++)
  48.   {
  49.      lib_array[i].compressionType = "lossless";
  50.      lib_array[i].allowSmoothing = false;
  51.   }
  52. }
  53.  
  54. function main(){
  55.   doc = flash.getDocumentDOM();
  56.   fl.outputPanel.clear()
  57.   fl.trace("start");
  58.   disableSmoothingInLibrary();
  59.   moveToFullPixelEverythingOnStage();
  60.   fl.trace("done");
  61. }
  62.  
  63. main();



Zum testen einfach in "C:\Docs... \[Username]\Application Data\Macromedia\Flash MX 2004\en\Configuration\Commands\" speichern und dann im Flash MX 2004 aufrufen über dem "Commands" Menü.

Geändert von StormLogiX (28-06-2005 um 22:33 Uhr)
StormLogiX ist offline   Mit Zitat antworten
Alt 28-06-2005, 20:49   #3 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
aus der doku:
document.moveSelectionBy()
Availability
Flash MX 2004.
Usage
document.moveSelectionBy( distanceToMove )
Parameters
The distanceToMove parameter is a pair of floating point values that specify the x and y
coordinate values by which the method moves the selection. For example, passing ({x:1,y:2})
specifies a location one pixel to the right and two pixels down from the current location.
Returns
Nothing.


das ist keine funktion von myElement, sondern NUR vom dokument.
das geht:

fl.getDocumentDOM().moveSelectionBy({x:1,y:2});

das verschiebt, was gerade selectiert ist. wenn myElement selectiert ist, dann halt das.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (28-06-2005 um 20:51 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 28-06-2005, 22:43   #4 (permalink)
Neuer User
 
Benutzerbild von StormLogiX
 
Registriert seit: Jan 2005
Ort: Stuttgart
Beiträge: 8
Danke! Aber wenn ich nun
fl.getDocumentDOM().moveSelectionBy({x:_diffX,y:_d iffY})
oder
doc.moveSelectionBy({x:_diffX,y:_diffY})
verwende, kommt bei mir immer die Fehlermeldung "moveSelectionBy: no selection" - also keine Elemente wurde selektiert.

Ich muss also eine Zeile vorher das "myElement" soz. selektieren.
Wie kann ich das machen?
Habe per Suche dazu nichts in der Doku gefunden.
StormLogiX ist offline   Mit Zitat antworten
Alt 28-06-2005, 23:17   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
wenn du keine selection hast, warum benütze du dann moveSelectionBy?
(ich habe mir dein programm jetzt nicht zeile für zeile angesehen, was es macht und warum)

myElement.left+= _diffX;
myElement.top+= _diffY;
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 29-06-2005, 21:28   #6 (permalink)
Neuer User
 
Benutzerbild von StormLogiX
 
Registriert seit: Jan 2005
Ort: Stuttgart
Beiträge: 8
Geht leider nicht. Ich dachte auch, dass das so gehen würde. Die sind laut Doku "read-only property" und man kann sie nur über spezielle Methoden verändern.
Hier die beschreibung aus der Doku:

Usage

element.top

Description
Read-only property; top side of the element. The value of element.top is relative to the upper left of the Stage for elements that are in a scene, and is relative to the symbol's registration point if the element is stored within a symbol. Use document.setSelectionBounds() or
document.moveSelectionBy() to set this property.
StormLogiX ist offline   Mit Zitat antworten
Alt 29-06-2005, 23:11   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
ja dann, dumm gelaufen.

da bliebe dir nur noch, die einzelnen elemente per programm anzuklicken. da du die aber nicht 'sehen' kannst, weisst du auch nicht, wohin du klicken sollst. also müsste man beim erstellen jede grafik auf eine eigene ebene legen (das kann man per programm selectieren). da kann ich die position aber auch per hand einfingern bzw. ich benütze einfach das raster.

und mc's kann ich sowieso per AS positionieren, dafür brauch ichs dann auch nicht.

-----------
element.matrix
über die element.matrix könntest du es noch versuchen, ist aber nicht so einfach, weil damit keine absoluten werte eingegeben werden, sondern die scalierung und die rotation in %.

-----------
und ist generell vielleicht garkeine so gute idee :-(
wenn du zwei rechtecke übereinander zeichnest, dann schneidet das die fläche beim darunterliegenden weg.
angenommen dein rücken würde klappen. dann rückst du eventuell schlitze in die konturen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 21-07-2005, 11:03   #8 (permalink)
in and out
 
Benutzerbild von Nikolai
 
Registriert seit: Jun 2001
Ort: hamburg
Beiträge: 142
holla zusammen

hat der gute jesse das schon in eurem sinne gelöst?
siehe: http://www.jessewarden.com/archives/...sh_blurri.html
__________________
stay tuned, play hard, be real

Nikolai™
Nikolai ist offline   Mit Zitat antworten
Alt 26-07-2005, 23:46   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 593
was es alles gibt...
sehr nett!
__________________
mfg
L.M. ist offline   Mit Zitat antworten
Alt 03-09-2005, 16:00   #10 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Bei mir funktioniert das jsfl-Script nicht mit shape's.

Wenn ich mehrere Formen erstelle ( zeichne ), und diese dann auf "unrunde" Koordinaten ausrichte, den Frame selektiere und diese Datei anwende listet er mir ersteinmal nur einen von den shape's auf und richtet keinen auf gerade pixel aus.

Ist das bei euch auch so oder spinnt mein Flash ( MX 2004 ) etwas???

Könnte ich eigentlich auch irgedwie bei einer Instanz abfragen ob es sich um einen MovieClip oder Button handelt?
__________________
ERROR: Signature is too large

Geändert von rendner[i] (03-09-2005 um 16:14 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 03-09-2005, 18:44   #11 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
einzeln gezeichnete elemente sind halt keine objekte.
folglich kann man die auch nicht einzeln abfragen.
zumindest nicht so, das du mit jsfl erkennen könntest, das da ein rechteck mit abgerundeten ecken rumliegt.

stell das raster ein, wenn du etwas ausrichten willst,
oder halt: mc's - button - grafiken
objeke kann man mit jsfl erkennen.

oder,
wenn du etwas ausgefallenes machen willst, dann z.b. mit jsfl zeichnen! 'erzeugen' geht ganz gut zu machen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib 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 aus.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele