scroll

Intrebari despre Actionscript 3.0

Re: scroll

Mesajde UnNoob » Mar Apr 26, 2011 7:58 am

Neata,

Normal ca inainte sa intreb aici, am facut sapaturi pe net si am incercat toate tutorialele posibile, inclusiv cele . din link-urile tale.Nu se potrivesc, sau sunt eu blocat si nu-mi dau seama unde gresesc O sa mai incerc sa adaptez ceva.
Proiectul meu este urmatorul:
O aplicatie AS3, care sa permita unor nespecialisti, care nu stiu nimic despre proiectarea mobilierului:

1. stabilirea designu-lui:
-se aleg corpuri de mobilier, standard si se cupleaza intr-un ansamblu.
- se scaleaza aceste corpuri sau se modifica constructiv (se schimba nr de sertare, nr usi, culori, materiale, etc)
-se pozitioneaza oriunde, pe suprafata de perete aleasa,mai putin acolo unde utilizatorul a figurat, usa, fereastra, calorifer,etc.

2. Efectuarea calculelor de proiectare in functie de tipull mobilierului, feroneria folosita, alti factori.
-se calculeaza marimea panourilor din care este confectionata mobila, se stabilesc lateralele pe care se pune cant, alte prelucrari.
-efectueaza desenele de executie sau alte desene necesare pt eventuali furnizori ( usi din sticla, usi cu rama aluminiu, etc)

3.Efectueaza in orice moment calculul valorii materialelor(materiale lemnoase, feronerie, accesorii, lacuri, etc/b]

[b]4.Exporta datele necesare, intr-un program de optimizare, existent


Deci, patratelele mele, formeaza, toate elementele constructive, ale unui ansamblu de n dulapuri (unde n=1, la....cat vrea utilizatorul).Laterale, polite, usi, spate, sertare, etc. Acestea apar pe scena (sau dispar cu undo) in mod treptat. Toate acestea se regasesc cu denumiri specifice in planul de croire (care in final ajunge la o firma specializata), de aici nevoia de denumire a fiecarui patratel, in plus pt a avea undo, a fost singura metoda gasita pe net.(removeChild(getChildByName('camp0')

Pana acum am reusit sa desenez-calculez un nr de n corpuri de mobilier, apar desenele pe scena.In orice moment al proiectarii, apas un buton, peste desene apare o masca se efectueaza toate calculele si peste masca apar textele respective, calculate cu multe functii.Deci mai multe texte,nu unul singur..Asa cum scriam, intr-un mesaj mai sus, singura posibilitate gasita de mine, pt a transforma, mai multe texte intr-un singur text cu scroll, a fost cu text TLF
Cod: Selectaţi tot
// Creare instanta la clasa ScrollTxt
var setScrol:ScrollTxt = new ScrollTxt(zona_txt, btn_sus, btn_jos, scrol_bar);
setScrol.nrLines = 2;         // Optional, modificare nr. de linii derulate la scroll (initial e 1)


// Apelare metoda "addTxt()", cu adresa fisierului in care e textul ce trebuie afisat
setScrol.addTxt('extern.txt');

bineinteles, impreuna cu clasa respectiva.
Cod: Selectaţi tot
package  {
  // Importare clase native AS3 a caror functii sunt folosite in aceasta
  import flash.display.SimpleButton;        // Pt. obiectele Symbol Button
  import flash.display.MovieClip;           // Pt. bara de scroll (care e Movie Clip)
  import flash.display.Sprite;              // Pt. Dragg
  import flash.events.*;                    // Pt. evenimente
  import flash.net.*;                       // Pt. incarcare date externe
  import fl.text.TLFTextField;              // Pt. campul de text
  import flash.geom.Rectangle;              // Pt. zona Rectangle a suprafetei de Dragg

 
  public class ScrollTxt
  {
    // Definire proprietati pt. obiectele din scenna: zona_text, buton_sus, buton_jos si scroll_bar
    public var zonaTxt:TLFTextField;
    public var btnSus:SimpleButton;
    public var btnJos:SimpleButton;
    public var scrolBar:MovieClip;

    public var textul:String = 'www.marplo.net';           // Pt. stocarea textului
    public var nrLines:uint = 1;         // Defineste numarul de linii derulate la fiecare apasare pe butoanele de scroll

    private var luScroll:Number;        // Retine lungimea de deplasare a barei de scroll

    private var bounds:Rectangle;                // Pt. definire zona de Dragg
    private var dragging:Boolean = false;        // Pt. activare /dezactivare Draqg

    // Metoda Constructor
    public function ScrollTxt(zonaTxt, btnSus, btnJos, scrolBar, fileUrl=null)
    {
      // Transfera valorile din parametri la proprietati
      this.zonaTxt = zonaTxt;
      this.btnSus = btnSus;
      this.btnJos = btnJos;
      this.scrolBar = scrolBar;
      this.scrolBar.buttonMode = true;         // Face aspect de manuta la bara de scroll

     // Afla distanta de derulare dintre bara de scroll si butonul de jos
      this.luScroll = this.btnJos.y-this.btnSus.y-this.btnSus.height-this.scrolBar.height;

      // Definire obiect prin care e setata zona permisa de miscare a barei de scroll
      bounds = new Rectangle(this.scrolBar.x, this.scrolBar.y,0,luScroll);

      // Inregistrare Evenimente pt. cele 2 butoane de scroll
      this.btnSus.addEventListener(MouseEvent.MOUSE_DOWN, scrollUp);
      this.btnJos.addEventListener(MouseEvent.MOUSE_DOWN, scrollDown);

      // Inregistrare evenimente pt. bara de scroll (detecteaza cand e apasata, eliberata, miscata)
      this.scrolBar.addEventListener(MouseEvent.MOUSE_DOWN, draBar);
      this.scrolBar.stage.addEventListener(MouseEvent.MOUSE_UP, dropBar);
      this.scrolBar.stage.addEventListener(Event.ENTER_FRAME, checkBar);

      // Inregistrare eveniment pt. zona de text, cand e rulat sa se miste si bara de scroll
      this.zonaTxt.addEventListener(Event.SCROLL, textScrolled);
    }

    // Metoda care preia si adauga textul in zona de text
    public function addTxt(file_url:String=null):void
    {
      // Daca parametrul 'file_url' e diferit de null, incarca textul de la adresa din el
      if(file_url!=null)
      {
        // Definire obiecte pt. adresa URL si incarcare date din ea
        var obj_url:URLRequest = new URLRequest(file_url);
        var loader:URLLoader = new URLLoader();

        loader.load(obj_url);        // Executa incarcarea datelor de la adresa adaugata la 'file_url'

        // Inregistrare eveniment pt. detectare cand incarcarea datelor e completa
        loader.addEventListener(Event.COMPLETE, onComplete);

        // Functia apelata la evenimentul de incarcare
        function onComplete(event:Event):void
        {
          zonaTxt.text = event.target.data;        // Adauga datele incarcate in zoona de text
          loader.removeEventListener(Event.COMPLETE, onComplete);       // Stergere detectare eveniment
        }
      }
      // Altfel adauga datele din proprietatea 'textul'
      else { this.zonaTxt.text = this.textul; }
    }

            /* Definire functii apelate de evenimentele inregistrate in metoda constructor */

    // Functia apelata la evenimentul pt. 'btnSus'
    private function scrollUp(event:MouseEvent):void
    {
      this.zonaTxt.scrollV -= this.nrLines;       // Coboara textul cu un numar de linii dat la 'nrLines';
    }

    // Functia apelata la evenimentul pt. 'btnJos'
    function scrollDown(event:MouseEvent):void
    {
      this.zonaTxt.scrollV += this.nrLines;       // Ridica textul cu un numar de linii dat la 'nrLines'
    }

    // Functia apelata la evenimentul pt. tragere bara de scroll
    function draBar(event:MouseEvent):void
    {
      // Activeaza posibilitatea de tragere cu mouse-ul, in zona permisa
      this.scrolBar.startDrag(false,bounds);
      dragging = true;
    }
   

    // Functia apelata la evenimentul cand e eliberata bara de scroll
    function dropBar(event:MouseEvent):void
    {
      // Dezactiveaza posibilitatea de tragere cu mouse-ul
      this.scrolBar.stopDrag();
      dragging = false;
    }

    // Functia apelata la evenimentul ENTER_FRAME pt. scrolBar
    function checkBar(event:Event):void
    {
      // Muta textul din 'zonaTxt' in functie de miscarea barei de scroll
      this.zonaTxt.scrollV = Math.round ((this.scrolBar.y - bounds.y)* this.zonaTxt.maxScrollV/this.luScroll)
    }


    // Functia apelata la evenimentul SCRLL, cand e rulat texul
    function textScrolled(event:Event):void
    {
      // Schimba pozitia la bara de scroll, in functie de rularea facuta
      this.scrolBar.y = bounds.y + (this.zonaTxt.scrollV * this.luScroll/this.zonaTxt.maxScrollV);
    }
  }
}
- Salvati documentul cu aceasta clasa (cu n


Asa cum mai spuneam, am reusit, dar acest tip de text, nu poate fi folosit ca masca si desenele din scena, apar sub text.Cel mai simplu era sa pot "acoperii" desenele cu o masca si apoi sa vin cu textul, dar asta insemna sa "generez" acest tip de text cu AS3,(ca sa apara peste masca, nu sub ea) dar nu am reusit, si nu am gasit nici un tutorial.

In concluzie, acum am doua variante salvate.Asta de mai sus, cu text cu scroll si (din pacate) desene sub el si alta cu
o masca si multe texte peste ea, dar pt care nu stiu sa adaptez un scroll, pt ca tot ce gasesc pe net, este pt scroll la un movie clip (si nu stiu cum sa transform prin cod AS3, masca+textele, intr-un movie clip, ca atunci ar fi simplu, sunt zeci de tutoriale) scroll la galerie de imagini, sau la un text unitar, provenit dintr-o sursa externa sau nu.
Am cerut ajutorul pt ca sunt convins, ca fac o greseala de logica, ca totusi problema are o rezolvare simpla, dar sunt eu blocat (ca sa nu ma caracterizez mai dur).
In exemplul dat de mine, realizez acum, ca trebuia sa mai am inca o coloana cu text, pt a simula perfect, cazul in care ma aflu.

Probabil am debitat si prostii, scuze, dar poate am reusit sa explic mai bine situatia.

O zi buna tuturor.
UnNoob
 
Mesaje: 22
Membru din: Sâm Mar 05, 2011 7:51 am

Re: scroll

Mesajde UnNoob » Mar Apr 26, 2011 8:04 am

de fapt cred ca folosesc aiurea expresia "masca", este un movie clip, care acopera desenele.Scuze.
UnNoob
 
Mesaje: 22
Membru din: Sâm Mar 05, 2011 7:51 am

Re: scroll

Mesajde UnNoob » Mar Apr 26, 2011 9:41 am

alexxcz am atasa fisierul (un pic modificat), salvat cum ai cerut.Multumesc mult pt ca incerci sa-mi dai o solutie, dar incep sa cred ca nu am cunostintele necesare,nici macar sa ma fac inteles.
Voiam sa sar niste etape, din graba si mai ales ca am considerat ca ce vreau eu sa realizez, pare o chestie complicata, dar pana la urma se reduce la dimensionarea unor dreptunghiuri, restul e aritmetica. Dar se pare ca m-am inselat, trebuie sa aprofundez , notiunile de baza, din moment ce nu reusesc, macar sa pun o intrebare si sa inteleaga lumea ce vreau.
Fişiere ataşate
exemplu.CS4.fla
(39.5 KiB) Descărcat de 233 ori
UnNoob
 
Mesaje: 22
Membru din: Sâm Mar 05, 2011 7:51 am

Re: scroll

Mesajde alexxcz » Mar Apr 26, 2011 12:07 pm

Asa, pentru inceput sa enumerez ce cred ca incerci sa faci:

- Faci un tabel de 2 coloane si n randuri folosind cate un TextField pentru fiecare celula
- Creezi un movie clip "ins_masca" care vrei sa iti defineasca regiunea visibila din tabel
- Daca tabelul este mai lung decat inaltimea mastii vrei sa iti apara niste scrollbar-uri pentru a "derula" tabelul.

Am inteles bine pana acum?
Daca da care e treaba cu deptunghiul "ins_cadru" ? Este doar o parte de interfata? Adica reprezinta background-ul tabelului respectiv marginile acestuia?

Acum daca ce am zis sus e corect ar trebui sa-ti dau urmatoarele explicatii:

- Masca trebuie aplicata unui DisplayObject folosit proprietatea mask pentru a obtine rezultatul de mascare.
ex:
Cod: Selectaţi tot
obj.mask = masca;

unde obj este un MovieClip, sa zicem, iar masca este un alt MovieClip care defineste regiunea mascata.

- Un obiect poate avea o singura masca si viceversa, o masca poate fi atribuita unui singur obiect.
- Daca vrei sa maschezi toate TextField-urile create cu o singura masca (presupun ca asta iti trebuie) va trebui sa le adaugi pe toate intr-ul alt MovieClip care sa fie container pentru acestea si mai apoi sa aplici masca acelui container.


Eu am facut urmatoarele modificari la fisierul postat de tine:
- Am adus masca la acelasi dimensiuni cu obiectul ins_cadru
- Am instantiat un nou MovieClip denumit container in care sunt adaugate TextField-urile txt1 si txt2 in acel for-loop
- TextField-urile le adaug incepand de la coordonatele x = 0 si y = 0 pentru ca pana la urma doar containerul va avea coordonatele necesare si sa nu existe deplasari in care sa te incurci
- Am mascat containerul cu masca si l-am adus la acelasi coordonate cu aceasta si cu cadrul

Compileaza si vezi daca rezultatul e cel pe care il cauti. Daca da si daca ai inteles te pot ajuta sa adaugi si scrollbar-uri pentru a misca continutul.

exemplu.CS4.zip
(12.42 KiB) Descărcat de 245 ori
“First, solve the problem. Then, write the code.”
(John Johnson)
Avatar utilizator
alexxcz
 
Mesaje: 620
Membru din: Lun Iul 21, 2008 9:12 pm
Localitate: Braila

Re: scroll

Mesajde UnNoob » Mar Apr 26, 2011 1:05 pm

Multumesc tuturor.Este foarte clar, atata timp cat nu pot explica, macar ce vreau, abuzez de bunavointa, timpul si rabdarea voastra. O sa caut niste cursuri adevarate, sa fac ce trebuia sa fac, de la inceput. Studiu aprofundat, fara incercari penibile si intrebari prostesti.
Voi sunteti de treaba, eu sunt....varza!

O zi buna.
UnNoob
 
Mesaje: 22
Membru din: Sâm Mar 05, 2011 7:51 am

Re: scroll

Mesajde UnNoob » Mar Apr 26, 2011 4:28 pm

Am reluat cu rabdare, fara nervi si cu un pic mai multa incredere in mine, codul trimis de colegul nostru. Este exact ce cautam, in plus, in cateva minute, am reusit sa fac din capul meu, un scroll primitiv, dar daca merge asta.... merge si unul misto, de pe net.
Oricum, hotararea de a invata, cu adevarat AS3, ramane...Nu pot continua la infinit cu ineptiiile.
Multumesc, cand veti auzii de mine, sper sa fie vorba despre chestii mai serioase.

Mult succes in proiectele voastre.
Marian,

Mesaje: 21
Sus
UnNoob
 
Mesaje: 22
Membru din: Sâm Mar 05, 2011 7:51 am

Re: scroll

Mesajde Barna Biro » Mar Apr 26, 2011 5:06 pm

Hmm... Chiar ma bucur sa aud ca ai reusit sa faci ceea ce doreai ( sincer, eu inca si acuma-s oarecum "in aer" )! Alex se pare ca e mult mai "pe frecventa ta" decat am fost eu... :)

Referitor la AS 3.0: exista un thread cu "carti care merita sa fie citite" si unde gasesti si un link catre o pagina web de unde poti descarca foarte multe carti pe AS 3.0. Personal, "jur pe carti"... cu tutoriale n-o sa ajungi sa faci niciodata mai nimica, deci daca vrei ca lucrurile sa fie din ce in ce mai frumoase, va trebui sa inveti neaparat lucrurile de baza si sa incepi sa cladesti cunostiinte pe acea baza ( o sa te tot lovesti de probleme atat banale cat si mai complicate, dar fara o baza solida, o sa te tot lovesti cu capul de pereti )
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: scroll

Mesajde alexxcz » Mie Apr 27, 2011 1:43 am

Asa, ca de obicei ma apuca la ore tarzii :) .
Am refacut codul initial pentru a-l compacta, a scapa de chestiile inutile (si costisitoare) si a-l face mai usor de inteles (sper).
Nu am cautat nimic concret pe net, doar am folosit ce poti gasi in Flash deja si anume componenta ScrollPane.
Am comentat fiecare linie de cod deci cred ca o sa fie usor de digerat. Daca totusi ceva e neclar nu ezita sa ma intrebi.

Am atasat fisierul aici datorita dimensiunii prea mari. Download
“First, solve the problem. Then, write the code.”
(John Johnson)
Avatar utilizator
alexxcz
 
Mesaje: 620
Membru din: Lun Iul 21, 2008 9:12 pm
Localitate: Braila

Re: scroll

Mesajde UnNoob » Mie Apr 27, 2011 11:39 am

multumesc mult , raman dator. Pe bune!
UnNoob
 
Mesaje: 22
Membru din: Sâm Mar 05, 2011 7:51 am

Anterior

Înapoi la ActionScript 3.0

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator

cron