αποθηκευση ενος running flash

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

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

Απάντηση
vagelismember
Δημοσιεύσεις: 40
Εγγραφή: 14 Φεβ 2010 14:26

αποθηκευση ενος running flash

Δημοσίευση από vagelismember » 20 Μάιος 2010 13:34

καλημερα σας, θα ηθελα να μου πειτε αν υπαρχει τροπος οτι δημιουργω μεσα σε μια εφαρμογη flash να αποθηκευεται καπου, και οταν ξανανοιγω την συγκεκριμενη εφαρμογη να εμφανιζει οτι εχω δημιουργησει μεσα και να μπορω να συνεχισω να κανω αλλα πραγματα(να κανω drag n drop) να δημιουργω νεα αντικειμενα και και και...??????


vagelismember
Δημοσιεύσεις: 40
Εγγραφή: 14 Φεβ 2010 14:26

αποθηκευση ενος running flash

Δημοσίευση από vagelismember » 20 Μάιος 2010 17:14

Δεν μπορω να καταλαβω πολλα απο αυτο, ενα παραδειγμα θα με βοηθουσε(παραδειγμα που θα αποθηκευει ενα movieclip και ολες του τις ιδιοτητες που εχει στο stage). Ευχαριστω εκ των προτερων

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

αποθηκευση ενος running flash

Δημοσίευση από HeRu » 21 Μάιος 2010 12:08

Δεν μπορείς να αποθηκεύσεις γραφικά (DisplayObject) απευθείας. Θα πρέπει να αποθηκεύσεις αρκετά data ώστε να μπορείς να "ξανά-δημιουργήσεις" το DisplayObject. Γιαυτό και είναι καλύτερα αν έχεις κάποιο Class που δημιουργεί το DisplayObject.

π.χ. (το παράδειγμα βασίζεται στο node implementation που έκανα post εδώ)

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

node = new Node();
node.x = 0;
node.y = 0;
node.setFillColor(0x999999);
node.addEventListener(MouseEvent.CLICK, mouseClickHandler);
addChild(node);

var mySo:SharedObject = SharedObject.getLocal("test");
if (!mySo.data.saved)
	mySo.data.saved = new Array();
else
	loadNodes();

function mouseClickHandler(event:MouseEvent):void
{
	// Create random object
	var randomObj:Object = {};
	randomObj.x = Math.random() * 300 + 50;
	randomObj.y = Math.random() * 200 + 50;
	randomObj.width = Math.random() * 200 + 30;
	randomObj.height = Math.random() * 100 + 10;
	// Create node
	var newNode:Node = createNode(randomObj);
	// Save
	saveNode(newNode);
}

function createNode(createObj:Object):Node
{
	node = new Node();
	node.x = createObj.x;
	node.y = createObj.y;
	node.width = createObj.width;
	node.height = createObj.height;
	node.draw();
	addChild(node);
	return node;
}

function saveNode(node:Node):void
{
	var saveObj:Object = {}
	saveObj.x = node.x;
	saveObj.y = node.y;
	saveObj.width = node.width;
	saveObj.height = node.height;
	(mySo.data.saved as Array).push(saveObj);
}

function loadNodes():void
{
	var nodes:Array = mySo.data.saved as Array;
	var len:uint = nodes.length;
	for &#40;var i&#58;uint = 0; i < len; i++&#41;
	&#123;
		createNode&#40;nodes&#91;i&#93;&#41;;
	&#125;
&#125;
Πάτα μερικές φόρες το γκρι button, κανε refresh την σελίδα και τα nodes θα υπάρχουν.
Συνημμένα

nodeRemember.swf [ 1.45 KiB | Προβλήθηκε 24760 φορές ]


vagelismember
Δημοσιεύσεις: 40
Εγγραφή: 14 Φεβ 2010 14:26

αποθηκευση ενος running flash

Δημοσίευση από vagelismember » 21 Μάιος 2010 16:17

πολυ καλο αυτo. πρεπει να το δουλεψω ομως γιατι τα nodes θα ναι dragable. και θα πρεπει να μενουν στις ιδιες θεσεις οταν θα ξανατρεξω την εφαρμογη. ομως οι συναρτησεις drag and drop ειναι μεσα στην κλαση node. και δεν ξερω γιατι δημιουργεις το object, με μπερδευει αυτο. Ευχαριστω παντως για τον χρονο σου

vagelismember
Δημοσιεύσεις: 40
Εγγραφή: 14 Φεβ 2010 14:26

αποθηκευση ενος running flash

Δημοσίευση από vagelismember » 23 Μάιος 2010 15:00

Το παλεψα αλλα δεν καταφερα κατι. Θελω να αποθηκευονται και τα input textfields τα οποια θα συμπληρωνει ο χρηστης αλλα δεν το καταφερα. θα χρειαστουν setters/getters??
αν εχεις χρονο, στο παραδειγμα σου να ενσωματωσεις μεσα στο node της κλασης και ενα input textfield και οταν γραφεις κατι και πατας ενα save button να αποθηκευεται η πληροφορια που εγραψες μαζι με τα x και y που αποθηκευονται στο sharedObjects.
Ευχαριστω

cyprog
Δημοσιεύσεις: 46
Εγγραφή: 12 Ιαν 2008 11:05

αποθηκευση ενος running flash

Δημοσίευση από cyprog » 23 Μάιος 2010 17:19

Αν ξέρεις αγγλικά δες εδώ έχει μια έτοιμη κλάση που δείχνει τις δυνατότητες του shared object

vagelismember
Δημοσιεύσεις: 40
Εγγραφή: 14 Φεβ 2010 14:26

αποθηκευση ενος running flash

Δημοσίευση από vagelismember » 25 Μάιος 2010 20:36

θα ηθελα ενα παραδειγμα στο οποιο οταν δημιουργουνται αντικειμενα μιας κλασης, να μπορει ο χρηστης να κανει καποιες τροποποιησεις(να αλλαζει το χ και υ του αντικειμενου, να γραφει ενα String κα) και οταν θα ξανατρεχει την εφαρμογη να εμφανιζονται τα αντικειμεντης κλασης με τις τροποποιησεις που εχουν γινει την τελευταια φορα απο τον χρηστη. Ο HERU εφτασε μεχρι ενα σημειο δηλωνοντας μονο το χ και το y για το που θα δημιουργηθει το αντικειμενο. Ενα τετοιο πραδειγμα θα μου ελυνε ειλικρινα τα χερια.. Ευχαριστω

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

αποθηκευση ενος running flash

Δημοσίευση από HeRu » 26 Μάιος 2010 09:48

@vagelismember γιαυτό χρησιμοποίησα στο save ένα object, για να μπορείς να αποθηκεύεις ότι πληροφορία θέλεις ελευθερα. Στα object μπορείς να φτιάχνεις δυναμικά variables.

π.χ.

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

function saveNode&#40;node&#58;Node&#41;&#58;void
&#123;
   var saveObj&#58;Object = &#123;&#125;
   saveObj.x = node.x;
   saveObj.y = node.y;
   saveObj.width = node.width;
   saveObj.height = node.height;

   saveObj.text1 = node.label.text;
   saveObj.text2 = "mplampla";
   saveObj.vagelismember = 1;
   saveObj.freestuff= true;

   &#40;mySo.data.saved as Array&#41;.push&#40;saveObj&#41;;
&#125;
έπειτα όταν κάνεις load, όλα αυτά τα variables θα υπάρχουν.

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

function loadNodes&#40;&#41;&#58;void
&#123;
   var nodes&#58;Array = mySo.data.saved as Array;
   var len&#58;uint = nodes.length;
   for &#40;var i&#58;uint = 0; i < len; i++&#41;
   &#123;
      var savedObj&#58;Object = nodes&#91;i&#93;;
      // To savedObj έχει ότι variable και τιμές του αποθήκευσες
      // π.χ. savedObj.text1, savedObj.freestuff etc
      createNode&#40;savedObj&#41;;
   &#125;
&#125;

vagelismember
Δημοσιεύσεις: 40
Εγγραφή: 14 Φεβ 2010 14:26

αποθηκευση ενος running flash

Δημοσίευση από vagelismember » 27 Μάιος 2010 19:04

εδω εχω τα αρχεια, δεν γινεται ομως τιποτα συμφωνα με αυτα που μου εχεις πει. ριξε μια ματια:

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

video_button.addEventListener&#40;MouseEvent.MOUSE_UP, mouseClickHandler&#41;;

var mySo&#58;SharedObject = SharedObject.getLocal&#40;"test32"&#41;;
if &#40;!mySo.data.saved&#41;
   mySo.data.saved = new Array&#40;&#41;;
else
   loadNodes&#40;&#41;; 
   

function mouseClickHandler&#40;event&#58;MouseEvent&#41;&#58;void
&#123; 
   	var randomObj&#58;Object = &#123;&#125;;
    var newNode&#58;video_node = create_video_node&#40;randomObj&#41;;
&#125;
	 
function create_video_node&#40;localObj&#58;Object&#41;&#58;video_node
&#123;
	var video&#58;video_node = new video_node&#40;&#41;;
	addChild&#40;video&#41;;
	video.addEventListener&#40;MouseEvent.CLICK, highest_depth&#41;;
	
	function highest_depth&#40;e&#58;MouseEvent&#41;&#58;void&#123;
		setChildIndex&#40;video,numChildren-1&#41;;
	&#125;
	function startNodeDrag&#40;e&#58;MouseEvent&#41;&#58;void &#123;
		video.startDrag&#40;&#41;;
	&#125;
	function stopNodeDrag&#40;e&#58;MouseEvent&#41;&#58;void &#123;
		video.stopDrag&#40;&#41;;
	&#125;
	
	video.vtitle=video.video_title.text;
	trace&#40;video.video_title.text&#41;;
	
	audio_button.addEventListener&#40;MouseEvent.MOUSE_UP, create_audio_node&#41;;
	function create_audio_node&#40;event&#58;MouseEvent&#41;&#58;void
	&#123;
		saveNode&#40;video&#41;;
	&#125;
	
	return video;
&#125;



function saveNode&#40;node&#58;video_node&#41;&#58;void
&#123;
   var saveObj&#58;Object = &#123;&#125;
   saveObj.x=node.x;
   saveObj.y=node.y;
   saveObj.vtitle = node.vtitle;
   saveObj.video_title = node.vtitle;
   trace&#40;saveObj.vtitle&#41;;
  &#40;mySo.data.saved as Array&#41;.push&#40;saveObj&#41;; 
&#125;

function loadNodes&#40;&#41;&#58;void
&#123;
   var nodes&#58;Array = mySo.data.saved as Array;
   var len&#58;uint = nodes.length;
  
   for &#40;var i&#58;uint = 0; i < len; i++&#41;
   &#123;
	  var savedObj&#58;Object = nodes&#91;i&#93;;
      create_video_node&#40;savedObj&#41;;
   &#125;
&#125;


						

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

package &#123;
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.*;

	dynamic public class video_node extends Sprite
	&#123;
		public var vtitle&#58;String;
		public var videox&#58;Number;
		public var videoy&#58;Number;
		
		public function video_node&#40;vx&#58;Number=600,vy&#58;Number=400&#41; 
		&#123;
			this.x=vx;
			this.y=vy;
			this.addEventListener&#40;MouseEvent.MOUSE_DOWN, startNodeDrag&#41;;
			this.addEventListener&#40;MouseEvent.MOUSE_UP, stopNodeDrag&#41;;
			this.doubleClickEnabled = true;
			this.addEventListener&#40;MouseEvent.DOUBLE_CLICK, createforma&#41;;
			//this.video_title.text = Title;
		&#125;
		
		function createforma&#40;e&#58;MouseEvent&#41;&#58;void
		&#123;
			this.doubleClickEnabled = false;
			this.removeEventListener&#40;MouseEvent.MOUSE_DOWN,startNodeDrag&#41;;
			var vforma&#58;videoforma = new videoforma&#40;&#41;;
			vforma.x=this.x+200;
			vforma.y=this.y;
			vforma.alpha=0.85;
			stage.addChild&#40;vforma&#41;;
			vforma.forma_save_button.addEventListener&#40;MouseEvent.CLICK,save&#41;;
			
			function save&#40;e&#58;MouseEvent&#41;&#58;void
			&#123;
				video_title.text = vforma.forma_video_title.text;
				vtitle=video_title.text;
				trace&#40;video_title.text&#41;;
			&#125;
		&#125;
		
		function startNodeDrag&#40;e&#58;MouseEvent&#41;&#58;void &#123;
			if&#40;e.target is SimpleButton&#41;&#123;&#125;
			else &#123;this.startDrag&#40;&#41;;&#125;
		&#125;
		function stopNodeDrag&#40;e&#58;MouseEvent&#41;&#58;void &#123;
			this.stopDrag&#40;&#41;;
		&#125;
		
	&#125;
&#125;

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

package
&#123;
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	
	dynamic public class videoforma extends Sprite
	&#123;	
		public var forma_title&#58;String;
		public var forma_description&#58;String;
		public var forma_url&#58;String;
		
		public function videoforma&#40;&#41;
		&#123;
			trace&#40;"done forma"&#41;;
			this.addEventListener&#40;MouseEvent.MOUSE_DOWN, startNodeDrag&#41;;
			this.addEventListener&#40;MouseEvent.MOUSE_UP, stopNodeDrag&#41;;
		&#125;
		
		function startNodeDrag&#40;e&#58;MouseEvent&#41;&#58;void &#123;
			this.startDrag&#40;&#41;;
		&#125;
		function stopNodeDrag&#40;e&#58;MouseEvent&#41;&#58;void &#123;
			this.stopDrag&#40;&#41;;
		&#125;
	&#125;
&#125;
			
		
αν μπορειτε πειτε μου που ειμαι λαθος. Στα αρχεια που επισυναπτω εδω υπαρχουν τα 3 αυτα αρχεια μεσα μαζι με τα κουμπια και το γραφικο περιεχομενο.
Προσπαθω να το φτιαξω να δουλευει ως εξης: οταν θα πατας το βιντεο κουμπι να δημιουργειται ενας κομβος, οταν θα πατας διπλο κλικ στον κομβο(καπου κατω απο το title) εμφανιζεται μια φορμα, συμπληρωνεις το title και οταν πατας save εμφανιζεται και στο title του κομβου. υστερα πατας στο audio button(προσωρινα το εχω για αποθηκευση) και κανει save. οταν ομως το ξανατρεχω εμφανζονται οσοι κομβοι δημιουργησα πριν χωρις ομως το περιεχομενο τους που ειχα εισαγαγει πριν. Αν μου πειτε για το title θα μπορεσω να φτιαξω και τα υπολοιπα που θελω, μια βοηθεια για να κανω την αρχη. Ευχαριστω
Συνημμένα
freestuff.rar
(167.81 KiB) Μεταφορτώθηκε 379 φορές

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

αποθηκευση ενος running flash

Δημοσίευση από HeRu » 27 Μάιος 2010 20:35

Πρόσεξε λίγο τι κάνω στο παράδειγμα, στο createNode(createObj:Object) με το createObj και ανάλογα τι κάνεις εσύ στο create_video_node(localObj:Object) με το localObj.

vagelismember
Δημοσιεύσεις: 40
Εγγραφή: 14 Φεβ 2010 14:26

αποθηκευση ενος running flash

Δημοσίευση από vagelismember » 29 Ιαν 2011 13:32

καλημερα σας. Αν και αρκετο καιρο μετα απο τις ερωτησεις μου πανω στο θεμα, επανερχομαι να ρωτησω τον τροπο λειτουργιας αποθηκευσης αυτου ου κωδικα παραπανω. κατι σαν να το λεγαμε με δικα μας λογια σε καποιον που εχει μια ιδεα, χωρις να τον μπερδεψουμε. για ποιο λογο χρησιμοποιουμε τοσα αντικειμενα και και ....

Απάντηση

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

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

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