AS3 package importing problems

ActionScript και Flex Προγραμματισμός

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 20 Οκτ 2010 16:18

Καλησπέρα, προσπαθώ να κάνω import ένα package με κάποιες κλάσεις που έχω αποθηκευμένο σε ένα frc.as αρχείο.

Κώδικας: Επιλογή όλων

import frc.FileReXampleC
όμως λαμβάνω το παρακάτω Error

Κώδικας: Επιλογή όλων

1172: Definition frc:FileReXampleC could not be found.
Το αρχείο frc.as περιέχει τον παρακάτω κώδικα

Κώδικας: Επιλογή όλων

package frc{ 
    import flash.display.Sprite; 
    import flash.events.*;  
    import flash.net.FileFilter; 
    import flash.net.FileReference; 
    import flash.net.URLRequest; 
    import flash.utils.ByteArray; 
 
    public class FileReXampleC extends Sprite 
    { 
        private var fileRef:FileReference; 
        public function FileRefXampleF() 
        { 
            fileRef = new FileReference(); 
            fileRef.addEventListener(Event.SELECT, onFileSelected); 
            fileRef.addEventListener(Event.CANCEL, onCancel); 
            fileRef.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
            fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
                        onSecurityError); 
            var textTypeFilter:FileFilter = new FileFilter("Text Files (*.txt, *.rtf, *.xml)", 
                        "*.txt;*.rtf,*.xml"); 
            fileRef.browse([textTypeFilter]); 
        } 
        public function onFileSelected(evt:Event):void 
        { 
            fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress); 
            fileRef.addEventListener(Event.COMPLETE, onComplete); 
            fileRef.load(); 
        } 
 
        public function onProgress(evt:ProgressEvent):void 
        { 
            trace("Loaded " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes."); 
        } 
 
        public function onComplete(evt:Event):void 
        { 
            trace("File was successfully loaded."); 
            trace(fileRef.data); 
        } 
 
        public function onCancel(evt:Event):void 
        { 
            trace("The browse request was canceled by the user."); 
        } 
 
        public function onIOError(evt:IOErrorEvent):void 
        { 
            trace("There was an IO Error."); 
        } 
        public function onSecurityError(evt:Event):void 
        { 
            trace("There was a security error."); 
        } 
    } 
}
ο οποίος είναι ένα παράδειγμα για να καnέις FileReference

νομίζω οτι κάνω ακριβός αυτό που λέει στα παραδείγματα

http://help.adobe.com/en_US/ActionScrip ... 90204-7f94
beware the power of Arrays...

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

AS3 package importing problems

Δημοσίευση από HeRu » 20 Οκτ 2010 17:24

Το όνομα του αρχείου πρέπει να είναι FileReXampleC.as και να βρίσκεται μέσα σε ένα φάκελο με όνομα frc.

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 20 Οκτ 2010 18:42

έκανα το εξής.

εύτιαξα ένα φάκελο scripts και έβαλα το frc.as μέσα. έπειτα το κάλεσα.

Κώδικας: Επιλογή όλων

import scripts.frc
θεωρητικά έχει γίνει import το package, όμως δέν μπορώ να έχω πρόσβαση στις functions που έχει μέσα για κάποιο λόγο.

σε ένα κουμπί έκανα τα παρακάτω πειράματα

Κώδικας: Επιλογή όλων

function aClicked ():void {
	FileRefXampleF()  // η΄function μου στο frc.as
	arguments;  // για να μη μου χτυπάει ο κώδικας για ArgumentError: Error #1063: Argument count mismatch on XMLcreator1_fla::MainTimeline/aClicked(). Expected 0, got 1.
	
}

μου επέστρεψε αυτό 1180: Call to a possibly undefined method FileRefXampleF.

Δοκίμασα να αλλάξω τη διεύθηνση χωρής επιτυχεία.

Κώδικας: Επιλογή όλων

σε
frc.FileRefXampleF()

scripts.frc.FileReXampleC.FileRefXampleF()		

frc.FileReXampleC.FileRefXampleF()

Μου επιστρέφει 
5001: The name of package 'frc' does not reflect the location of this file. Please change the package definition's name inside this file, or move the file. I:\2010b\43.flashxmlcreator\scripts\frc.as

5008: The name of definition 'FileReXampleC' does not reflect the location of this file. Please change the definition's name inside this file, or rename the file. I:\2010b\43.flashxmlcreator\scripts\frc.as
beware the power of Arrays...

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

AS3 package importing problems

Δημοσίευση από HeRu » 20 Οκτ 2010 19:11

Το όνομα του package πρέπει να αντίστοιχη στα ονόματα των folders.
Το όνομα του αρχείου πρέπει να είναι ίδιο με το όνομα του class.

Αν έχεις το παρακάτω class.

Κώδικας: Επιλογή όλων

package gr.freestuff.test
{
    public class Utils
    {
    }
}
Σημαίνει ότι έχεις: Ένα φάκελο gr που μέσα έχει ένα φάκελο freestuff που μέσα έχει ένα φάκελο test που μέσα έχει ένα αρχείο με όνομα Utils.as

Κώδικας: Επιλογή όλων

gr
  |-freestuff
    |-test
       |-Utils.as
Επίσης η function που έχει ακριβώς το ίδιο όνομα με το class, ονομάζεται constructor και καλείτε αυτόματα όταν δημιουργείς το class.

Για να χρησιμοποιήσεις την class, θα πρέπει να την δημιουργήσεις. π.χ.

Κώδικας: Επιλογή όλων

var fileRef:FileRefXampleF = new FileRefXampleF();

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 21 Οκτ 2010 12:08

Ευχαρηστώ δούλεψε τέλεια, τώρα έχω φορτώσει ένα αρχείο XML στη μεταβλητή myXML. σκοπός είναι να επεξεργαστώ την XML και μετά να την αποθηκεύσω ξανά.

θα το ψάξω λίγο μόνος μου και μόλης το τελιώσω η αν κολήσω κάπου θα postaro. thanx
beware the power of Arrays...

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 21 Οκτ 2010 14:54

τώρα προσπάθησα να κάνω load και μετά save το αρχείο μου. ακολουθώντας λοιπόν πιστά τον παρακάτω κώδικα του tutorial απο τα livedocs πέρνω το παρακάτω λάθος.

Κώδικας: Επιλογή όλων

package 
{ 
    import flash.display.Sprite; 
    import flash.events.*;  
    import flash.net.FileFilter; 
    import flash.net.FileReference; 
    import flash.net.URLRequest; 
    import flash.utils.ByteArray; 
 
    public class FileReferenceExample2 extends Sprite 
    { 
        private var fileRef:FileReference; 
        public function FileReferenceExample2() 
        { 
            fileRef = new FileReference(); 
            fileRef.addEventListener(Event.SELECT, onFileSelected); 
            fileRef.addEventListener(Event.CANCEL, onCancel); 
            fileRef.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
            fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
                        onSecurityError); 
            var textTypeFilter:FileFilter = new FileFilter("Text Files (*.txt, *.rtf)", 
                        "*.txt;*.rtf"); 
            fileRef.browse([textTypeFilter]); 
        } 
        public function onFileSelected(evt:Event):void 
        { 
            fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress); 
            fileRef.addEventListener(Event.COMPLETE, onComplete); 
            fileRef.load(); 
        } 
 
        public function onProgress(evt:ProgressEvent):void 
        { 
            trace("Loaded " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes."); 
        } 
        public function onCancel(evt:Event):void 
        { 
            trace("The browse request was canceled by the user."); 
        } 
        public function onComplete(evt:Event):void 
        { 
            trace("File was successfully loaded."); 
            fileRef.removeEventListener(Event.SELECT, onFileSelected); 
            fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
            fileRef.removeEventListener(Event.COMPLETE, onComplete); 
            fileRef.removeEventListener(Event.CANCEL, onCancel); 
            saveFile(); 
        } 
        public function saveFile():void 
        { 
            fileRef.addEventListener(Event.SELECT, onSaveFileSelected); 
            fileRef.save(fileRef.data,"NewFileName.txt"); 
        } 
 
        public function onSaveFileSelected(evt:Event):void 
        { 
            fileRef.addEventListener(ProgressEvent.PROGRESS, onSaveProgress); 
            fileRef.addEventListener(Event.COMPLETE, onSaveComplete); 
            fileRef.addEventListener(Event.CANCEL, onSaveCancel); 
        } 
 
        public function onSaveProgress(evt:ProgressEvent):void 
        { 
            trace("Saved " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes."); 
        } 
         
        public function onSaveComplete(evt:Event):void 
        { 
            trace("File saved."); 
            fileRef.removeEventListener(Event.SELECT, onSaveFileSelected); 
            fileRef.removeEventListener(ProgressEvent.PROGRESS, onSaveProgress); 
            fileRef.removeEventListener(Event.COMPLETE, onSaveComplete); 
            fileRef.removeEventListener(Event.CANCEL, onSaveCancel); 
        } 
 
        public function onSaveCancel(evt:Event):void 
        { 
            trace("The save request was canceled by the user."); 
        } 
 
        public function onIOError(evt:IOErrorEvent):void 
        { 
            trace("There was an IO Error."); 
        } 
        public function onSecurityError(evt:Event):void 
        { 
            trace("There was a security error."); 
        } 
    } 
}
και μου επιστρέφει αυτό το σφάλμα

Κώδικας: Επιλογή όλων

Loaded 0 of 7829 bytes.
Loaded 7829 of 7829 bytes.
File was successfully loaded.
Error: Error #2176: Certain actions, such as those that display a pop-up window, may only be invoked upon user interaction, for example by a mouse click or button press.
	at flash.net::FileReference/_save()
	at flash.net::FileReference/save()
	at scripts::fileRefSave/saveFile()
	at scripts::fileRefSave/onComplete()
Loaded 0 of 7829 bytes.
Loaded 7829 of 7829 bytes.
beware the power of Arrays...

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 21 Οκτ 2010 14:56

Αν και εμένα με απασχολεί να κάνω μόνο save εφ' όσων η μεταβλητή fileRef δεν είναι null. εντοπίζω οτι το συγγεκρημένο tutorial είναι λίγο άστοχο.
beware the power of Arrays...

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 21 Οκτ 2010 16:34

έχει κανείς ιδέα πως΄μπορώ να έχω access σε μια μεταβλιτή μέσα σε ένα package? ας πούμε την fileRef απο το παραπάνω πακέτο.
beware the power of Arrays...

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

AS3 package importing problems

Δημοσίευση από HeRu » 21 Οκτ 2010 16:47

Καλό θα ήταν να ξεκινήσεις με κάποια βασικά tutorials για classes.
  1. Δουλεύοντας με Classes (Α)
  2. Δουλεύοντας με Classes (Β)
  3. Εισαγωγή στα Event Listeners

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 21 Οκτ 2010 19:55

Ευχαρηστώ , τα διάβασα και κατάλαβα κάποια πράγματα. αυτό που ήθελα να πετύχω ήταν να βγάλω τη μεταβλητή απο το event onComplete του *.as στο κώδικα του timeline του fla.

δοκίμασα το return του παραδείγματος αλλά έπηξα εκεί.

τελικά βρήκα μια λύση, αλλά δε μου φαίνεται και η ποιό σωστή γιατί αναγκάστηκα να έχω 2 μεταβλητες για το ίδιο πράγμα. "να αποθηκέυσω το object της κλάσης και να έχω πρόσφαση σε αυτό απο όλο το timeline"

την FRef th χρησημοποιώ μέσα στο κουμπί γιατί δεν δέχεται global μεταβλητή και τη GFRef που είναι μια global μεταβλητή, στην οποία κάνω ανάθεση το περιεχόμενο της FRef, ουτος όστε να έχω έλεγχω του περιεχόμενου εκτός του κώδικα του κουμπιού.

Κώδικας: Επιλογή όλων

//XML editor.fla

import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.StageDisplayState;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.MouseEvent;
import flash.events.*;
import scripts.fileRefLoad;
import scripts.fileRefSave;


var GFRef;
var GFRefS;


var myMC:MovieClip=this.aaa;
makeButton(myMC,nothinga,nothinga,aClicked);
var myMCb:MovieClip=this.bbb;
makeButton(myMCb,nothinga,nothinga,bClicked);
var myMCc:MovieClip=this.testfr;
makeButton(myMCc,nothinga,nothinga,testfrCode);


function makeButton(which_mc:MovieClip, overFunction:Function, outFunction:Function, clickFunction:Function):void {
	which_mc.buttonMode=true;
	which_mc.useHandCursor=true;
	which_mc.mouseChildren=false;
	which_mc.addEventListener(MouseEvent.MOUSE_OVER, overFunction);
	which_mc.addEventListener(MouseEvent.MOUSE_OUT, outFunction);
	which_mc.addEventListener(MouseEvent.CLICK, clickFunction);
}


function aClicked():void {
	arguments;
	var FRef:fileRefLoad = new fileRefLoad();
	trace(FRef.returnPlease());
	GFRef= FRef // ανάθεση στη GFRef για να έχω έλεγχω εκτός κουμπιού
}

function bClicked():void {
	arguments;
	var FRefS:fileRefSave = new fileRefSave();

}

function nothinga():void {
	arguments;
}

function testfrCode():void {
	arguments;
	trace(GFRef.fileRef.data); // έλεγχος περιεχόμενου του File Reference Object που ανοίξαμε.
}

function globalizeData(myData):void {

}

Κώδικας: Επιλογή όλων

//// code package  scripts.fileRefLoad.as

package scripts{

	import flash.display.Sprite;
	import flash.events.*;
	import flash.net.FileFilter;
	import flash.net.FileReference;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;

	public class fileRefLoad extends Sprite {
		public var fileRef:FileReference;
		public function fileRefLoad() {
			fileRef = new FileReference();
			fileRef.addEventListener(Event.SELECT, onFileSelected);
			fileRef.addEventListener(Event.CANCEL, onCancel);
			fileRef.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
			fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
			                        onSecurityError);
			var textTypeFilter:FileFilter = new FileFilter("XML Files (*.xml)", 
			                        "*.xml");
			fileRef.browse([textTypeFilter]);
		}
		
		public function onFileSelected(evt:Event):void {
			fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress);
			fileRef.addEventListener(Event.COMPLETE, onComplete);
			fileRef.load();
		}

		public function onProgress(evt:ProgressEvent):void {
			trace("Loaded " + evt.bytesLoaded + " of " + evt.bytesTotal + " bytes.");
		}

		public function onComplete(evt:Event):void {
			trace("File was successfully loaded.");	
			returnPlease(); // exei pleon fortosei to arxeio pou fortwsame mesw browser, kalw th function returnPlease.
		}

		public function onCancel(evt:Event):void {
			trace("The browse request was canceled by the user.");
		}

		public function onIOError(evt:IOErrorEvent):void {
			trace("There was an IO Error.");
		}
		public function onSecurityError(evt:Event):void {
			trace("There was a security error.");
		}
		public function returnPlease():ByteArray{
			var echo:ByteArray = fileRef.data	
			trace ("im trying to echo   ")
			return echo;		// oxi oti katafera na to xrhsimopoihsw	
			}
	}
}
beware the power of Arrays...

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

AS3 package importing problems

Δημοσίευση από HeRu » 22 Οκτ 2010 10:29

Μονό με τα παραδείγματα, δεν πρόκειται να μάθεις πολλά. Θα πρέπει να διαβάσεις λίγο για την σωστή χρήση της AS 3.0 και βασικές αρχές προγραμματισμού.

Απλοποιείσαι λίγο αυτό που θες να κάνεις και ξεκινά από πιο βασικές εφαρμογές και μπορείς να χρησιμοποιείς classes όταν θα είσαι λίγο πιο άνετος στην χρήση AS 3.0.

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

AS3 package importing problems

Δημοσίευση από dapadoupas » 22 Οκτ 2010 14:48

χμμμ... η ActionScript 3.0 σε αναγκάζει να χρησιμοποιήσεις package για να δουλέψεις FileReference. οπότε αναγκαστηκά πάω σε class. :(

Anyway, thanx for the advise Heru. πολύ διάβασμα έπεσε.
beware the power of Arrays...

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

AS3 package importing problems

Δημοσίευση από HeRu » 22 Οκτ 2010 15:22

dapadoupas έγραψε:χμμμ... η ActionScript 3.0 σε αναγκάζει να χρησιμοποιήσεις package για να δουλέψεις FileReference. οπότε αναγκαστηκά πάω σε class. :(
Όχι δεν σε αναγκάζει να χρησιμοποιήσεις classes/packages. Απλά το παράδειγμα που αντιγραφείς είναι έτσι.

Τα classes είναι ένας τρόπος οργάνωσης του κωδικά σου και είναι λίγο προχωρημένο concept. Αν δεν ξέρεις πως να δηλώσεις variables ή τι κάνει το return, τότε σίγουρα δεν θα μπορέσεις να χρησιμοποιήσεις classes αποτελεσματικά.

Απάντηση

Επιστροφή στο “ActionScript και Flex Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες