Variables / μεταβλητές

Λύσεις προβλημάτων για το δημοφιλές πρόγραμμα κατασκευής παρουσιάσεων στο διαδίκτυο.

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

Απάντηση
spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Variables / μεταβλητές

Δημοσίευση από spookyb52 » 09 Ιούλ 2004 15:57

Στις μεταβλητές μπορούμε να αποθηκεύσουμε κάποια δεδομένα τα οποία μπορούμε να χρησιμοποιήσουμε στη συνέχεια μέσα στο έργο μας

Τα δεδομένα αυτά μπορέι να είναι

1) Strings πχ : myVariable = "keimeno"
2) Boolean values πχ : myVariable = true ή myVariable = false
3) Αριθμοί πχ : myVariable = 22

Μια μεταβλητή μπορεί να έχει οποιαδήποτε ονομασία, δέν μπορεί όμως να περιλαμβάνει κενά σημεία στίξης και χαρακτήρες όπως @!$% κτλ

Επιπλέον καλό θα είναι οι μεταβλητές να μήν έχουν ένα γενικό όνομα όπως myvar αλλά κάτι που θα θυμίζει τα δεδομένα τα οποία κρατάνε

πχ σε ένα παιχνίδι με αυτοκίνητα για να μήν μπερδευόμασταν θα γράφαμε

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

maxSpeed = 11
acceleration = 1.2
brake = .98
Δύο μεταβλητές θα μπορούσαμε να τις προσθέσουμε άν είναι αριθμοί

πχ το παρακάτω θα έδινε 23

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

varOne = 12;
varTwo = 11;
trace(varOne+varTwo)
//-------------------------------------

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

varOne = metablhth;
varTwo = 11;
trace(varOne+varTwo);
Άν όμως κάποια από τις μεταβλητές δέν ήταν αριθμός αλλά undefined μεταβλητή όπως πιό πάνω τοτε αυτό θα επέστρεφε αποτέλεσμα NaN (not a number)

Τι θα γινόταν όμως άν η μιά μεταβλητή ήταν αριθμός και η άλλη κείμενο?

Το παρακάτω επιστρέφει spookyb52

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

varOne = "spookyb"
varTwo = 52;
trace(varOne+varTwo);
Αυτό γίνεται γιατί το flash τις ενώνει όπως θα ένωνε ένα κείμενο

Το πρόβλημα μπορεί να υπάρξει οπως θα δούμε πιό κάτω σε φόρτωμα μεταβλητών από εξωτερικό αρχείο όπου ένας αριθμός μπορεί να αναγνωσθεί ως κείμενο με αποτέλεσμα το 11+23 αντί για 34 να δώσει 1123

Εδώ να πούμε ότι το flash δίνει στο false την τιμή 0 και στη true την τιμή 0

Έτσι το παρακάτω

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

if (clip.hitTest("_root.myclip")==true) {
	trace("good")
}
θα μπορούσε να γραφτεί και ώς
if (clip.hitTest("_root.myclip")==1) {
trace("good")
}
όπου true βάλαμε 1
:arrow:Άσχετο με μεταβλητές

Το παραπάνω θα μπορούσε να γραφτεί και ώς

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

if (clip.hitTest("_root.myclip")) {
	trace("good");
}
άν θέλαμε να πούμε ότι η συνθήκη είναι true

και ώς

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

if (!clip.hitTest("_root.myclip")) {
	trace("good");
}
άν θέλαμε να πούμε ότι η συνθήκη είναι false
Στο mx2004 [flash 7] το παρακάτω

mygod
trace(mygod)

θα επέστρεφε undefined γιατί η μεταβλητή mygod δέν έχει κάποια τίμή. Στο flash 6 όμως θα επέστρεφε 0

έτσι και το παρακάτω

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

mygod;
mygod += 5;
trace(mygod);
επιστρέφει στο mx2004 NaN και στο mx2003 5, οπότε χρειάζεται λίγη προσοχή σε αυτό και γενικά αφού το flash έχει αλλάξει συνήθειες θα πρέπει να προσαρμοστούμε και εμείς και να δηλώνουμε πάντα κάποια τιμή για τις μεταβλητές μας

Αντί για myVar τώρα θα γράφετε myVar = 0 πχ

//------------------

Αντί να γράφουμε τη μια μεταβλητή κάτω από την άλλη μπορούμε να τις γράφουμε και στην ίδια σειρά άν θέλουμε

πχ αντί για
a = 0;
b = 1;
c = 2;
d = 3;
e = 4;
μπορούμε να γράψουμε
a=0, b=1, c=2, d=3, e=4;
αφού τις χωρίσουμε με κόμμα

ακόμα άν πολλές μεταβλητές χρειάζονται την ίδια τιμή μπορούμε να τις γράψουμε πάλι σε μιά ευθεία

Αντί για
me = 0;
you = 0;
he = 0;
she = 0;
it = 0;
they = 0;
μπορούμε να έχουμε
me=you=he=she=it=they=0;
Ακόμα οι μεταβλητές μπορεί να περιέχουν τιμές αντικειμένων στο flash μας

πχ

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

xmousepos = _root._xmouse;
trace(xmousepos);
το παραπάνω επιστρέφει την θέση του ποντικιού στον άξονα των x

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

stageAlpha = _root._alpha;
trace(stageAlpha);
η την τιμή του alpha στην σκηνή κτλ

//----------------------------------
Οι μεταβλητές γενικά υπάρχουν μέσα στο timeline στο οποίο χρησιμοποιούνται. Άν θέλήσουμε να τις προσπελάσουμε θα πρέπει να δώσουμε την διαδρομή τους

η διαδρομή της μεταβλητής myVar που βρίσκεται στο main timeline είναι _root.myVar

η διαδρομή της μεταβλητής myVar που βρίσκεται στο movieclip spooky είναι _root.spooky.myVar

η διαδρομή της μεταβλητής myVar που βρίσκεται στο movieclip b52 που βρίσκεται με τη σειρά του στο movie clip spooky είναι _root.spooky.b52.myVar

//-----------------------------------

Μπορούμε να θέσουμε όμως μια global μεταβλητή που θα είναι προσπελάσιμη από κάθε timeline με τό όνομά της

Αυτό γίνεται βάζοντας το _global πρίν κάθε μεταβλητή

πχ στο main timeline γράφουμε
_global.stageAlpha = 111
Άν στη συνέχεια μέσα σε ένα clip γράψουμε το παρακάτω
trace(stageAlpha);
θα επιστρέψει 111 ανεξάρτητα από το γεγονός ότι δέν δηλώσαμε την διαδρομή της μεταβλητής

//------------------------------------

Δέν μπορούμε να έχουμε δύο μεταβλητές με το ίδιο όνομα στο ίδιο timeline

πχ το παρακάτω

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

variable = 1;
variable = 2;
trace(variable);
θα επέστρεφε 2 γιατί είναι η τελευταία δήλωση της τιμής της μεταβλητής

Μπορούμε όμως να έχουμε σε διαφορετικά timelines κοινές ονομασίες μεταβλητών

//-------------------------------------------

Mόνη εξαίρεση στον κανόνα ότι δύο μεταβλητές στο ίδιο timeline δέν μπορούν να έχουν ίδια ονομασία αποτελούν οι τοπικές μεταβλητές

Μπορούμε να δηλώσουμε μια μεταβλητή ώς τοπική με την παρακάτω σύνταξη

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

var myVariableName = 1982
Η τοπική μεταβλητή έχει έννοια μόνο για την συνάρτηση για την οποία δημιουργείτε και διαγράφετε μετά την εκτέλεση της συνάρτησης

πχ

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

myVariableName = "spooky";
function myFunction() {
	var myVariableName = 1982;
	trace(myVariableName);
}
myFunction();
trace(myVariableName);
το παραπάνω θα επέστρεφε 1982 και spooky έχουμε δύο μεταβλητές με την ίδια ονομασία αλλά η μία έιναι τοπική και έτσι δέν υπάρχει κάποια διένεξη με αποτέλεσμα να αναγνωρίζονται και οι δύο

και για να γίνει περισσότερο κατανοητό

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

function myFunction() {
	var myVariableName = 1982;
	varMe = 2004;
}
myFunction();
trace(myVariableName);
trace(varMe)
το παραπάνω επιστρέφει undefined για την τοπική μεταβλητή myVariableName και 2004 για την μεταβλητή varMe που δέν είναι τοπική

//------------------------------

Άς πάμε και σε κάτι άλλο τώρα. Τα περισσότερα στοιχεία σε ένα flash μπορούν να αντιμετωπιστούν σαν αντικείμενα

η σύνταξη για τη δημιουργία σε ένα αντικείμενο είναι

panatha = new Object(); η εναλλακτικά panatha = {}

Σε ένα αντικείμενο μπορούμε να προσδώσουμε ιδιότητες

πχ

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

panatha = {name:"spooky", birth:1982};
trace(panatha.name)
θα επέστρεφε spooky

Αυτό μπορούμε να το κάνουμε και σε ένα clip

πχ στο movie symbol myclip

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

myclip.name = "light_filter_girl_dd";
trace(myclip.name);
το παραπάνω θα επέστρεφε

light_filter_girl_dd

Αυτό όμως δέν μπορούμε να το κάνουμε με τις μεταβλητές, τουλάχιστον όχι με τον ίδιο τρόπο

το παρακάτω θα επέστρεφε undefined
myVar.name = "light_filter_girl_dd";
trace(myVar.name);
Πώς μπορούμε λοιπόν να δημιουργήσουμε ιδιότητες για μιά μεταβλητή?

με τον παρακάτω τρόπο, δηλώνοντας τον τύπο της μεταβλητής

πχ

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

myVar = new String();
myVar.name = "spooky";
trace(myVar.name);
θα επέστρεφε spooky

η το επόμενο

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

myVar = new Number();
myVar.age = 22;
trace(myVar.age);
θα επέστρεφε 22

το Loading θα το συνεχίσω άλλη φορά
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

Απάντηση

Επιστροφή στο “Flash γενικά”

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

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