<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>flaschdevelop.de</title>
	<atom:link href="http://www.flashdevelop.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.flashdevelop.de</link>
	<description>a fool with a tool is still a fool</description>
	<lastBuildDate>Tue, 24 Aug 2010 21:53:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Unterschiede zwischen den drei Includes der SWC in FlashDevelop</title>
		<link>http://www.flashdevelop.de/allgemein/unterschiede-zwischen-den-drei-includes-der-swc-in-flashdevelop.html</link>
		<comments>http://www.flashdevelop.de/allgemein/unterschiede-zwischen-den-drei-includes-der-swc-in-flashdevelop.html#comments</comments>
		<pubDate>Tue, 24 Aug 2010 20:52:53 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[SWC]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=606</guid>
		<description><![CDATA[Wie ihr sicher bemerkt habt, gibt es drei verschiedene Möglichkeiten eine SWC einzubinden. Nach dem die SWC mit Add To Library dem Projekt hinzugefügt wurde, gibt es die Optionen Library (inlcude referenced classs) Include library (include completely) External libratry (not included) Zu Punkt 1: Hier werden nur die Klassen importiert, die auch tatsächlich genutzt werden. [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ihr sicher bemerkt habt, gibt es drei verschiedene Möglichkeiten eine SWC einzubinden.</p>
<p>Nach dem die SWC mit <em>Add To Library </em>dem Projekt hinzugefügt wurde, gibt es die Optionen</p>
<ol>
<li>Library (inlcude referenced classs)</li>
<li>Include library (include completely)</li>
<li>External libratry (not included)</li>
</ol>
<p><span id="more-606"></span>Zu Punkt 1:<br />
Hier werden nur die Klassen importiert, die auch tatsächlich genutzt werden. Es ist nicht möglich dynamisch Klassen zu nutzen, die vorher noch nicht referenziert wurden. Habe ich zum Beispiel zwei Verlinkungen in der SWC, einmal <em>assets.ball</em> und <em>assets.korb</em>. Wenn ich nun im Code <em>new assets.korb();</em> schreibe aber niemals new<em> assets.korb(); </em>so würde ich eine Fehlermeldung bekommen, wenn ich<em> loaderInfo.applicationDomain.getDefinition(&#8220;assets.korb&#8221;); </em>benutzen würde.<em> </em>Der Grund ist, da die Klasse zuvor nicht referenziert wurde. Nur ein <em>import assets.korb;</em> würde auch nicht ausreichen.</p>
<p>Zu Punkt 2:<br />
Mit dieser Option wird alles aus der SWC importiert, egal ob es benutzt oder nicht benutzt wird. Hier stehen alle Klassen aus der SWC zur Verfügung.</p>
<p>Zu Punkt 3:<br />
Hier wird die SWC nicht importiert und dient lediglich der Autovervollständigung. Die SWF muss zwingend vom Programm nachgeladen werden, ansonsten gibt es eine Fehlermeldung, da alle Klassen der SWC nicht vorhanden sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/unterschiede-zwischen-den-drei-includes-der-swc-in-flashdevelop.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie realisiert man ein Bubble Spiel objektorientiert</title>
		<link>http://www.flashdevelop.de/actionscript-3/wie-realisiert-man-ein-bubble-spiel-objektorientiert.html</link>
		<comments>http://www.flashdevelop.de/actionscript-3/wie-realisiert-man-ein-bubble-spiel-objektorientiert.html#comments</comments>
		<pubDate>Sun, 15 Aug 2010 20:58:20 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[Spiel]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=586</guid>
		<description><![CDATA[An dieser Stelle möchte ich euch zeigen, wie man ein Puzzlespiel schnell und einfach erstellen kann. Das Puzzle Spiel soll ein Feld mit verschiedenfarbigen Kugeln haben, mit Klick auf einer dieser Kugeln, sollen die gleichfarbigen Nachbarkugeln entfernt werden. Einstellbare Größen sind Feldbreite und Feldhöhe, minimale Farbkette und maximale Farben pro Feldaufbau. Ist ein Feld komplett [...]]]></description>
			<content:encoded><![CDATA[<p>An dieser Stelle möchte ich euch zeigen, wie man ein Puzzlespiel schnell und einfach erstellen kann. Das Puzzle Spiel soll ein Feld mit verschiedenfarbigen Kugeln haben, mit Klick auf einer dieser Kugeln, sollen die gleichfarbigen Nachbarkugeln entfernt werden. Einstellbare Größen sind Feldbreite und Feldhöhe, minimale Farbkette und maximale Farben pro Feldaufbau. Ist ein Feld komplett abgebaut, startet das neue Level mit mehr Farben, andernfalls beginnt das Spiel von vorne.</p>
<p>Nun müssen wir überlegen, was für Klassen wir brauchen. Wir haben ein Feld und Kugeln, mehr nicht, daher bietet sich an, jeweils eine Klasse für das Feld und eine für die Kugel zu erstellen.  Dann benötigen wir noch einen Levelzyklus und eine Event-Klasse. Somit ergibt eine Struktur wie folgt (kurzer Anriss, eine genau Struktur kann in der jeweiligen Klassendatei eingesehen werden:<span id="more-586"></span></p>
<p><strong>Main.as<br />
</strong>Hauptprogramm zur Steuerung der Level und ein paar Anzeigen, Punktestand und Level.<br />
Mögliche Methoden:</p>
<ul>
<li>zur Aktualisierung der Anzeige</li>
<li>erstellen neuer Level</li>
</ul>
<p><strong>Field.as</strong><br />
Aufbau des Feldes und Steuerung der Kugeln, also für die Spielelogik.<br />
Mögliche Methoden:</p>
<ul>
<li>Feld erstellen</li>
<li>suchen nach Kombinationen</li>
<li>Mauseingabe verarbeiten</li>
<li>Atome hinzufügen und entfernen</li>
<li>Ereignisse auslösen für Levelende und Abbau von Atomen. Natürlich könnte man noch mehr Ereignisse auslösen, das sollte aber fürs erste reichen</li>
</ul>
<p><strong>Atom.as</strong><br />
Die Kugel, ich nenne das kleinste Teil mal Atom, muss ja nicht unbedingt eine Kugel sein.<br />
Mögliche Methoden:</p>
<ul>
<li>Anzeige der Grafik</li>
<li>Positionieren der Grafik</li>
</ul>
<p><strong>FieldEvent.as</strong><br />
Für die Ereignisse, die von Field geworfen werden. Diese erbt von <em>Event</em>, der Event Klasse von Flash. Dies müssen wir, da der <em>EventDispatcher</em>, mit dem wir Ereignisse werfen können, nur <em>Events </em>verarbeiten kann.</p>
<p>Für ein einfaches Spiel reichen uns diese vier Klassen.</p>
<p>Wir verzichten auch auf ein Grafikasset und Zeichnen uns die Textfelder und Kugeln per ActionScript 3.0, nur für die Soundeffekte benötigen wir eine Flashdatei.</p>
<p>Ich habe das ganze mit FlashDevelop realisiert, wie man ein Projekt einrichtet wurde zuvor unter &#8220;<a title="Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen" href="http://www.flashdevelop.de/programmierung/anleitung-teil-1-actionscript-3-projekt-mit-flashdevelop-erstellen.html">Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen</a>&#8221; beschrieben.</p>
<h3>Die fertigen Klassen</h3>
<p>Main.as</p>
<pre class="brush:as3">public class Main extends Sprite
	{

		/* Punkte */
		private var _score:int;

		/* Spielfeld */
		private var _field:Field;

		/* Zähler für abgebaute Atome pro Feldaufbau*/
		private var _deleteCount:int;

		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point

			// Verschiebung der Ansicht
			Atom.OFFSET_X = 5;
			Atom.OFFSET_Y = 0;

			// Minimale Anzahl der Kette
			Field.MIN_CHAIN = 2;
			// Maximale Anzahl der Farben
			Field.MAX_COLOR = 1;

			// Feld erstellen
			_field = new Field(17, 15);

			//Listener hinzufügen
			_field.addEventListener(FieldEvent.ATOMS_DELETED, updateHUD);
			_field.addEventListener(FieldEvent.NO_MORE_MOVES, onNoMoreMoves);

			// Auf Bühne legen
			addChild(_field);

			// Texfeld für die Punkte erstellen
			var tf:TextField = new TextField();
			tf.x = 10;
			tf.y = 255;
			tf.defaultTextFormat = new TextFormat("Verdana", 12, 0x000000, true);
			tf.name = "score";
			addChild(tf);

			// Punkte aktualisieren
			score = 0;

			// Atomzähler auf 0 setzen
			_deleteCount = 0;
		}

		/**
		 * Wird von FieldEvent aufgerufen
		 * @param	evt		FieldEvent
		 */
		private function updateHUD(evt:FieldEvent):void
		{
			// Punkte addieren
			score += (evt.amount * evt.amount);

			// Atomzähler setzen
			_deleteCount += evt.amount;
		}

		/**
		 * Wird von FieldEvent aufgerufen wenn keine Züge mehr möglich sind
		 * @param	evt			FieldEvent
		 * @param	count		für den setTimeout
		 */
		private function onNoMoreMoves(evt:FieldEvent, count:int = 0):void
		{
			// Nach Textfeld für den Countdown und Level suchen
			var ctf:TextField = getChildByName("counter_txt") as TextField;
			var tf:TextField = getChildByName("level_info_txt") as TextField;

			// Drei Sekunden Zähler
			if (count < 3)
			{
				if (ctf == null) // Textfeld für Countdown erstellen, falls nicht vorhanden
				{
					ctf = new TextField();
					ctf.defaultTextFormat = new TextFormat("Verdana", 20, 0xFF8000, true);

					ctf.autoSize = TextFieldAutoSize.CENTER;
					ctf.multiline = true;
					ctf.x = 150;
					ctf.y = 150;
					ctf.name = "counter_txt";
					ctf.filters = new Array(new BevelFilter(), new DropShadowFilter(10, 45, 0x4B4B4B, .5, 10, 10));
					addChild(ctf);
				}

				if (tf == null) // Textfeld für Level erstellen, falls nicht vorhanden
				{
					tf = new TextField();
					tf.defaultTextFormat = new TextFormat("Verdana", 20, 0xFF8000, true);

					tf.autoSize = TextFieldAutoSize.CENTER;
					tf.multiline = true;
					tf.x = 150;
					tf.y = 130;
					tf.name = "level_info_txt";
					tf.filters = new Array(new BevelFilter(), new DropShadowFilter(10, 45, 0x4B4B4B, .5, 10, 10));
					addChild(tf);
				}

				// Auswertung nur beim ersten Aufruf
				if (count == 0)
				{
					// Nach drei Aufrufe Feld zurücksetzen
					if (_deleteCount == _field.fieldWidth * _field.fieldHeight)
					{
						// Alle Atome abgebaut
						// Nächstes Level mit mehr Farben, maximale Farben, dann von vorne
						Field.MAX_COLOR = ++Field.MAX_COLOR > Atom.COLOR.length ? 1 : Field.MAX_COLOR;

						tf.text = "Level " + Field.MAX_COLOR + " ...";
					}
					else
					{
						// nicht alle Atome abgebaut
						tf.text = "Nicht geschafft, " + score + " Punkte";

						score = 0;
						Field.MAX_COLOR = 1;
					}
				}

				ctf.text = "Weiter in " + (3 - count) + " Sekunden";

				// nach einer Sekunde noch mal aufrufen
				setTimeout(onNoMoreMoves, 1000, evt, ++count);
				return;
			}

			removeChild(ctf);
			removeChild(tf);
			evt.target.reset();

			_deleteCount = 0;
		}

		/**
		 * Get und Set für Punkte
		 */
		public function set score(value:int):void
		{
			_score = value;
			var tf:TextField = getChildByName("score") as TextField;
			tf.text = _score + " Punkte";
		}

		public function get score():int
		{
			return _score;
		}

	}
</pre>
<p>Field.as</p>
<pre class="brush:as3">	public class Field extends MovieClip
	{
		/* Minimale Kette */
		public static var MIN_CHAIN:int = 2;

		/* Maximale Farben */
		public static var MAX_COLOR:int = -1;

		/* Feld Array länge max. Anzahl der Atome*/
		private var _field:Array;

		/* Feldgröße, Anzahl Atome horizontal und vertikal */
		private var _width:int;
		private var _height:int;

		/* Ausgewählte Kette */
		private var _selectedChain:Array;

		/* Angeklickets Atom */
		private var _clickedAtom:Atom;

		/**
		 * Konstruktor Feld
		 * @param	width		Atome horizontal
		 * @param	height		Atome vertikal
		 */
		public function Field(width:int, height:int)
		{

			// Feldhintergrund
			graphics.beginFill(0xffffff);
			graphics.drawRect(0, 0, 300, 300)
			graphics.endFill();

			// Feld maximale Atomanzahl
			_field = new Array(width * height);

			// Größe setzen
			_width = width;
			_height = height;

			// Atome erstellen
			for (var x:int = 0; x &lt; width; x++)
			{
				for (var y:int = 0; y &lt; height; y++)
				{
					var atom:Atom = new Atom(x, y, MAX_COLOR);
					addAtomAt(x, y, atom);
				}
			}

			// Listener für die Maus erstellen
			addEventListener(MouseEvent.MOUSE_DOWN, handleMouse);
			addEventListener(MouseEvent.MOUSE_UP, handleMouse);

		}

		/**
		 * Kobinationen suchen
		 * @param	x				ab Position x
		 * @param	y				ab Position y
		 * @param	depth			Rekursionstiefe
		 * @param	combination		Gefundene Kombinationen
		 * @param	checked			Bereits geprüfte Atome
		 * @return					Kombination
		 */
		public function findCombinations(x:int, y:int, depth:int = 0, combination:Array = null, checked:Dictionary = null):Array
		{
			// Leere Kombination erstellen
			if (combination == null)
				combination = new Array();

			// Für bereits geprüfte steine.
			if (checked == null)
				checked = new Dictionary(true);

			// prüfen ob im zulässigem Bereich
			if (!isInBounds(x, y)) return null;

			// Zuprüfendes Atom holen
			var atom:Atom = getAtomAt(x, y);

			// Wenn leere Position beenden
			if (atom == null)
				return combination;

			// Atom als überprüft merken
			checked[atom] = atom;

			// Atom in die Kobination einfügen
			combination.push(atom);

			if (atom != null)
			{
				// In alle Richtungen suchen
				var a1:Atom = getAtomAt(x + 1, y) ;
				var a2:Atom = getAtomAt(x - 1, y) ;
				var a3:Atom = getAtomAt(x    , y + 1) ;
				var a4:Atom = getAtomAt(x    , y - 1) ;

				// Für Suche in X-Richtung rechts
				// Wenn Atom in Suchrichung existiert (Feldposition nicht leer)
				if (a1 != null)
				{
					// dann, wenn das Atom in Suchrichtung die gleiche Farbe hat und wenn das Atom noch nicht geprüft wurde
					if (a1.color == atom.color &amp;&amp; checked[a1] == undefined)
					{
						// weiter in X-Richtung nach rechts suchen.
						findCombinations(x + 1, y    , depth + 1, combination, checked);
					}
				}

				// Kürzere schreibweise in die anderen Richtungen
				if (a2 != null) if (a2.color == atom.color &amp;&amp; checked[a2] == undefined ) findCombinations(x - 1, y    , depth + 1, combination, checked);
				if (a3 != null) if (a3.color == atom.color &amp;&amp; checked[a3] == undefined ) findCombinations(x    , y + 1, depth + 1, combination, checked);
				if (a4 != null) if (a4.color == atom.color &amp;&amp; checked[a4] == undefined ) findCombinations(x    , y - 1, depth + 1, combination, checked);
			}

			// Depth = 0, wenn es der erste Aufruf war (nullte Rekursion) und wenn die Kobination nicht die minimale Kette hat wird null zurück gegeben (nichts gefunden)
			if (depth == 0 &amp;&amp; combination.length &lt; MIN_CHAIN)
			{
				combination = null;
			}

			// Ansosnten die gefundenen Atome zurückgeben
			return combination;
		}

		/**
		 * Wird vom MouseEvent aufgerufen
		 * @param	evt		MausEvent
		 */
		public function handleMouse(evt:MouseEvent):void
		{
			// Nacht type schauen
			switch (evt.type)
			{
				case MouseEvent.MOUSE_DOWN:
						/// Maus gedrückt und das Ziel ein Atom ist
						if (evt.target is Atom)
						{
							// Gedrücktes Atom merken
							_clickedAtom = evt.target as Atom;

							if (_selectedChain == null) // Wenn keine aktieve Kombination
							{
								// Klicksound abspielen
								new click().play();
								// Atom als ausgewählt markieren
								_clickedAtom.selected = true;
								// Kombination Auswählen
								selectCombination();
							}
							else
							{
								// Wenn eine Kombination ausgewählt ist
								//Flag für Atome entfernt
								var combiRemoved:Boolean = false;

								// Für alle Atome in Kombination
								for (var i:int = 0; i &lt; _selectedChain.length; i++)
								{
									// Atom nicht mehr ausgewählt markieren
									Atom(_selectedChain[i]).selected = false;

									// Wenn das das geklickte Atom in der Kobination ist, wurde ein weiteres mal auf die Kobination geklickt
									if (_selectedChain[i] == _clickedAtom)
									{
										// Dann Kombination auflösen und Atome löschen
										combiRemoved = true;
										removeAndDeleteAtoms(_selectedChain);

										// Löschsound abspielen
										new push().play();
									}
								}

								// Ausgewählte Kobination auf null setzen
								_selectedChain = null;

								// Wenn Kombination nicht gelöscht, dann wurde eine andere Kombination gewählt
								if (!combiRemoved)
								{
									// Klicksound abspielen
									new click().play();
									// Neue Kombination auswählen
									selectCombination();
								}
							}
						}

					break;

				case MouseEvent.MOUSE_UP:
					// Wenn die Maus losgelassen wurde, keine Kombination und Atom ausgewählt ist
					if (_selectedChain == null &amp;&amp; _clickedAtom != null)
					{
						// Das Atom auf normal setzen
						_clickedAtom.selected = false;
					}
					break;

			}
		}

		/**
		 * Eine Kombination auswählen
		 */
		public function selectCombination():void
		{
			// Nach Kombination suchen, anhand des ausgewählten Atoms
			_selectedChain = findCombinations(_clickedAtom.fieldX, _clickedAtom.fieldY);

			// Wenn Kombination gefunden
			if (_selectedChain != null)
			{
				// Alle Atome in der Kombination als ausgewählt markieren
				for (var i:int = 0; i &lt; _selectedChain.length; i++)
				{
					Atom(_selectedChain[i]).selected = true;
				}
			}
		}

		/**
		 * GET und SET für Feldgröße
		 */
		public function get fieldHeight():int
		{
			return _height
		}

		public function get fieldWidth():int
		{
			return _width;
		}

		/**
		 * Holt ein Atom an einer gegebenen Position
		 * @param	x		Feld X
		 * @param	y		Feld Y
		 * @return			Atom oder null
		 */
		public function getAtomAt(x:int, y:int):Atom
		{
			// Bei ungültiger Position null
			if (!isInBounds(x, y)) return null;

			return _field[x + (y * fieldWidth)];
		}

		/**
		 * Fügt ein Atom an eienr gegebenen Feldpositon ein
		 * @param	x		Feld X
		 * @param	y		Feld Y
		 * @param	atom	Atom
		 */
		public function addAtomAt(x:int, y:int, atom:Atom):void
		{
			// Ungültige Position abfangen
			if (!isInBounds(x, y)) return;

			// Atom suchen
			_field[x + (y * fieldWidth)] = atom;

			// Atom gefunden
			if (atom != null)
			{
				// Positionieren und hinzufügen
				atom.fieldX = x;
				atom.fieldY = y;
				atom.move();
				addChild(atom);
			}
		}

		/**
		 * Löscht ein Atom an einer gegebenen Position und überschreibt diese mit null
		 * @param	x		Feld X
		 * @param	y		Feld Y
		 * @return			Gelöschte Atom
		 */
		public function removeAtomAt(x:int, y:int):Atom
		{
			// Ungültige Position abfangen
			if (!isInBounds(x, y)) return null;

			// Atom holen
			var a:Atom = getAtomAt(x, y);

			// Atom gefunden
			if (a != null)
			{
				// Atom löschen
				removeChild(a);
				// Position mit null überschreiben
				addAtomAt(x, y, null);
			}

			// Gelöschtes Atom zurückgeben
			return a;
		}

		/**
		 * Löscht und entfern mehrere Atome
		 * @param	atoms		Atom Array
		 */
		public function removeAndDeleteAtoms(atoms:Array):void
		{
			// Für alle Atome im Array
			for (var i:int = 0; i &lt; atoms.length; i++)
			{
				// Atom löschen
				var a:Atom = removeAtomAt(atoms[i].fieldX, atoms[i].fieldY);

				// Wenn Atom gelöscht
				if (a != null)
				{
					// Frei gewordene Position melden zum nachrücken
					invokeFreePosistion(a.fieldX, a.fieldY);
				}
			}

			// Ereignis werfen, dass eine Kobination gelöscht wurde mit Kobinationslänge
			dispatchEvent(new FieldEvent(FieldEvent.ATOMS_DELETED, atoms.length));

			// Wenn es keine Kobinationen mehr gibt Ende melden
			if (hasMoreMoves() == null)
				dispatchEvent(new FieldEvent(FieldEvent.NO_MORE_MOVES));
		}

		/**
		 * Verarbeitet freigewordene Positionen. Aufrüken von Oben nach Unten und von Links nach Rechts
		 * @param	x		Feld X
		 * @param	y		Feld Y
		 */
		public function invokeFreePosistion(x:int, y:int):void
		{
			// Ungültige Positionnen abfangen
			if (!isInBounds(x, y)) return;

			// Atom von Oben
			var a:Atom = getAtomAt(x, y - 1);

			if (a != null) // Atom von Oben gefunden
			{
				// Atom löschen
				removeAtomAt(a.fieldX, a.fieldY);

				// Und an neue tiefere Position einfügen
				addAtomAt(x, y, a);

				// Nächstes Atom zum Nachrücken suchen
				invokeFreePosistion(x, y - 1);
			}
			else // Kein Atom gefunden, Atome nach rechts
			{
				// Atom in Linksrichtung suchen
				a = getAtomAt(x - 1, y);

				// Atom gefunden
				if (a != null)
				{
					// Atom entfernen
					removeAtomAt(a.fieldX, a.fieldY);

					// An neue Position setzen
					addAtomAt(x, y, a);

					// Weier nach links suchen
					invokeFreePosistion(x -1, y);
				}
			}
		}

		/**
		 * Überprüft ob x und y im gültigem Bereich sind
		 * @param	x		Feld X
		 * @param	y		Feld Y
		 * @return			Gültig true, ungültig false
		 */
		public function isInBounds(x:int, y:int):Boolean
		{
			if (x &lt; 0 || y &lt; 0 || x &gt;= fieldWidth || y &gt;= fieldHeight)
				return false;

			return true;
		}

		/**
		 * Überprüft anch weiteren Kombinationen
		 * @return	Gefundene Kobination oder null
		 */
		public function hasMoreMoves():Array
		{
			// Kombination
			var combi:Array = null;

			// Durch alle Atome im Feld
			for (var x:int = 0; x &lt; fieldWidth; x += MIN_CHAIN)
			{
				for (var y:int = 0; y &lt; fieldHeight; y += MIN_CHAIN) 				{ 					// Nach Kobination suchen 					combi = findCombinations(x, y); 					 					// Kombination gefunden dann Funktion beenden und Kobination zurückgeben  					if (combi != null) 					{ 						if (combi.length &gt; 0)
						{
							return combi;
						}
					}
				}
			}

			// keine Kombinationen mehr
			return null;
		}

		/**
		 * Feld zurücksetzen
		 */
		public function reset():void
		{
			// Alle Atome löschen
			for (var i:int = 0; i &lt; _field.length; i++)
			{
				var a:Atom = _field[i] as Atom;
				if (a != null) removeAtomAt(a.fieldX, a.fieldY);
			}

			// Feld mit neuen Atomen befüllen
			for (var x:int = 0; x &lt; width; x++)
			{
				// Reihe für Reihe
				setTimeout(addOneLine, x * 200, x);
			}
		}

		/**
		 * Fügt eine Reihe vertikal an gegebener Position ein
		 * @param	x	Feld X
		 */
		private function addOneLine(x:int):void
		{
			// Für komplette Spalte
			for (var y:int = 0; y &lt; height; y++)
			{
				var atom:Atom = new Atom(x, y, MAX_COLOR);
				addAtomAt(x, y, atom);
			}
		}

	}
</pre>
<p>FieldEvent.as</p>
<pre class="brush:as3">public class FieldEvent extends Event
	{
		public static const ATOMS_DELETED:String = "onAtomsDeleted";
		public static const NO_MORE_MOVES:String = "onNoMoreMoves";

		/* Atomzähler */
		public var amount:int;

		public function FieldEvent(type:String, amount:int = 0)
		{
			super(type, true);

			this.amount = amount;
		}

	}
</pre>
<p>Atom.as</p>
<pre class="brush:as3">	public class Atom extends MovieClip
	{
		/* Farbtabelle */
		public static const COLOR:Array = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff];

		/* Atom größe*/
		public static const SIZE:int = 8;

		/* Verschiebung auf x und y der Bühne*/
		public static var OFFSET_X:Number = 0;
		public static var OFFSET_Y:Number = 0;

		/* X und Y Position im Feld*/
		private var _x:int;
		private var _y:int;

		/* Atomfarbe */
		private var _color:int;

		/**
		 * Konstruktor für ein Atom
		 * @param	x			x Position
		 * @param	y			y Position
		 * @param	maxColor	Maximale Farben
		 */
		public function Atom(x:int, y:int, maxColor:int)
		{
			// x und y der Feldposition setzen nicht x und y der Bühne
			_x = x;
			_y = y;

			// Farbe setzen
			_color = getRandomColor(maxColor);

			// Zeichenen
			draw();

			// Auf Bühnenposition bewegen
			move();

			// Hand an der Maus anzeigen
			buttonMode = true;
			useHandCursor = true;
		}

		/**
		 * Atom zeichnen
		 */
		public function draw():void
		{
			// Wir zeichnen hier eine Kugel
			var g:Graphics = graphics;
			g.lineStyle(1, 0x000000, .2);
			g.beginFill(_color, 8);
			g.drawCircle(0, 0, SIZE);
			g.endFill();
			filters = new Array(new BevelFilter(2));
		}

		/**
		 * An Bühnenposition bringen
		 */
		public function move():void
		{
			// x und y setzen
			x = _x * width + (OFFSET_X + SIZE);
			y = _y * height + (OFFSET_Y + SIZE);
		}

		/**
		 * Zufallsfarbe holen
		 * @param	amout	Anzahl der Farben
		 * @return			HEX Farbwert
		 */
		public function getRandomColor(amout:int = -1):uint
		{
			// Überprüfen ob im zulässigem Farbbereich
			if (amout &gt; COLOR.length || amout == -1)
				amout = COLOR.length;

			// Farbe zurückgeben
			return COLOR[Math.floor(Math.random() * amout)];
		}

		/**
		 * Atom als String
		 * @return		String
		 */
		override public function toString():String
		{
			return "[Atom x=" + _x + ", y=" + _y + ", color=" + _color + "]";
		}

		/**
		 * GET und SET X Feldposition
		 */
		public function get fieldX():int
		{
			return _x;
		}

		public function set fieldX(value:int):void
		{
			_x = value;
		}

		/**
		 * GET und SET Y Feldposition
		 */
		public function get fieldY():int
		{
			return _y;
		}

		public function set fieldY(value:int):void
		{
			_y = value;
		}

		/**
		 * GET Farbe
		 */
		public function get color():uint
		{
			return _color;
		}

		/**
		 * SET Ausgewählt
		 */
		public function set selected(value:Boolean):void
		{
			if (value)
			{
				// Wenn ausgewählt ein paar Filder setzen und Alpha runterschrauben
				filters = new Array(new BevelFilter(2), new GlowFilter(0x000000));
				alpha = .4;
			}
			else
			{
				// Nicht ausgewählt normale Ansicht
				filters = new Array(new BevelFilter(2));
				alpha = 1;
			}
		}
	}
</pre>
<p>Auf Angabe der Pakete habe ich im Artikel verzichtet.</p>
<h3>Das Spiel</h3>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="300" height="300" align="center">
      <param name="movie" value="http://www.flashdevelop.de/wp-content/uploads/2010/08/Balls.swf" />
      <param name="align" value="center" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://www.flashdevelop.de/wp-content/uploads/2010/08/Balls.swf" width="300" height="300" align="center">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<h3>Die Sourcen</h3>
<p><a rel="attachment wp-att-590" href="http://www.flashdevelop.de/actionscript-3/wie-realisiert-man-ein-bubble-spiel-objektorientiert.html/attachment/balls-2">Balls Flash Game Sourcen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/actionscript-3/wie-realisiert-man-ein-bubble-spiel-objektorientiert.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anleitung Teil 3 : Apache Ant mit FlashDevelop</title>
		<link>http://www.flashdevelop.de/programmierung/anleitung-teil-3-apache-ant-mit-flashdevelop.html</link>
		<comments>http://www.flashdevelop.de/programmierung/anleitung-teil-3-apache-ant-mit-flashdevelop.html#comments</comments>
		<pubDate>Thu, 12 Aug 2010 08:00:40 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[mxmlc]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=548</guid>
		<description><![CDATA[Nun beschreibe ich einen Weg, das Projekt mit Apache Ant zu veröffentlichen. Wir benötigen dafür Ant &#8220;Apache-Ant (http://ant.apache.org/)&#8221;. Ich verwende momentan Apache Ant 1.8.1. Apache Ant vorbereiten Als erstes wird Ant installiert, bzw. es muss nur entpackt werden, zum Beispiel in C:\Programme\. Damit Ant ohne Pfadangabe gestartet werden kann, tragen wir diesen in die Systemvariablen [...]]]></description>
			<content:encoded><![CDATA[<p>Nun beschreibe ich einen Weg, das Projekt mit Apache Ant zu veröffentlichen.</p>
<p>Wir benötigen dafür Ant &#8220;<a title="Apache-Ant" href="http://ant.apache.org/">Apache-Ant (http://ant.apache.org/</a>)&#8221;. Ich verwende momentan Apache Ant 1.8.1.</p>
<h3>Apache Ant vorbereiten</h3>
<p>Als erstes wird Ant installiert, bzw. es muss nur entpackt werden, zum Beispiel in <em>C:\Programme\</em>. Damit Ant ohne Pfadangabe gestartet werden kann, tragen wir diesen in die Systemvariablen ein.<br />
Dazu klicken wir mit der rechten Maustaste auf<em> Arbeitsplatz -&gt; Eigenschaften</em> und auf die Registrierkarte <em>Erweitert</em>. Nun sollte das Fenster wie im folgendem Bild aussehen, dort gehen wir auf <em>Umgebungsvariablen</em>.<span id="more-548"></span><br />
<a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/umgebungsvariablen1.jpg" rel="lightbox[548]"><img class="aligncenter size-medium wp-image-454" title="umgebungsvariablen Ant 1" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/umgebungsvariablen1-236x300.jpg" alt="" width="236" height="300" /></a></p>
<p>Ein weiteres Fenster öffnet sich, dort suchen wir unter Systemvariablen den Eintrag <em>Path</em> und machen einen Doppelklick drauf.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/umgebungsvariablen2.jpg" rel="lightbox[548]"><img class="aligncenter size-medium wp-image-455" title="umgebungsvariablen Ant 2" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/umgebungsvariablen2-236x300.jpg" alt="" width="236" height="300" /></a></p>
<p>Jetzt muss nur noch der Eintrag unter<span style="color: #888888;"> <em>Wert der Variablen:</em></span> mit <span style="color: #888888;"><em>;C:\Programme\apache-ant-1.8.1\bin\</em></span> erweitert und mit <em>OK </em>bestätigt werden.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/umgebungsvariablen3.jpg" rel="lightbox[548]"><img class="aligncenter size-medium wp-image-456" title="umgebungsvariablen Ant 3" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/umgebungsvariablen3-236x300.jpg" alt="" width="236" height="300" /></a></p>
<h4>FlashDevelop vorbereiten</h4>
<p>Da wir später ein Release-Build per Knopfdruck erstellen wollen,   müssen wir ein Button in die <em>ToolBar.xml</em> eintragen. Diese liegt im Installationsverzeichnis von FlashDevelop, für gewöhnlich in <em>C:\Programme</em>.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_toolbar_xml.jpg" rel="lightbox[548]"><img class="aligncenter size-medium wp-image-470" title="FlashDevelop ToolBar XML" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_toolbar_xml-300x244.jpg" alt="" width="300" height="244" /></a></p>
<p>In dieser Datei muss nun der folgende Code vor <em>&lt;/toolbar&gt;</em> eingefügt werden.</p>
<pre class="brush:xml">&lt;seperator /&gt;
 &lt;button label="Ant Build (Release)" click="RunProcessCaptured" image="487" tag="c:\windows\system32\cmd.exe;/c $(Quote)ant -buildfile $(Quote)$(ProjectDir)/ant/build.xml$(Quote) release$(Quote)" /&gt;</pre>
<p>Nach einem Neustart von FlashDevelop sollte dann ein neuer Button zu sehen sein.<a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/anticon1.jpg" rel="lightbox[548]"><br />
</a><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/anticon1.jpg" rel="lightbox[548]"><img class="aligncenter size-full wp-image-477" title="Ant Icon in FD Toolbar" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/anticon1.jpg" alt="" width="239" height="139" /></a></p>
<ol>
<li><em>label</em> wird als Tooltip angezeigt.</li>
<li>Was beim Klicken passiert steht in <em>click</em>, hier soll ein Prozess  ausgeführt werden.</li>
<li><em>image=&#8221;487&#8243;</em> bedeutet, dass das Icon 487 aus der Iconsammlung genommen wird.</li>
<li><em>tag</em> sagt dem <em>RunProcessCaptured</em> was er ausführen soll. Er soll die cmd.exe mit dem Befehl <em>&#8220;ant -buildfile &#8220;$(ProjectDir)/build/build.xml&#8221; release</em>. In etwa so: cmd.exe starte bitte bitte ant mit der build.xml und führe das <em>target</em> release aus. $(Quote) ist ein Anführungszeichen und $(ProjectDir) der absolute Pfad zum Projekt für FlashDevelop.</li>
</ol>
<p>Möchte man per Knopfdruck noch ein anderes <em>target </em>starten, so müsste ein Weiterer Knopf hinzugefügt werden. Wer gerne mein Plugin benutzen möchte kann sich dies unter <a title="Ant Plugin für FlashDevelop" href="http://www.flashdevelop.de/programmierung/ant-plugin-fuer-flashdevelop.html">http://www.flashdevelop.de/programmierung/ant-plugin-fuer-flashdevelop.html</a> anschauen und installieren, somit bleibt einem der ganze Schritt <em>FlashDevelop vorbereiten</em> erspart.</p>
<h3>Das Projekt Stechen mit Ant erweitern</h3>
<p>Warum wollen wir das Projekt überhaupt mit Ant erstellen, wenn FlashDevelop das auch kann?</p>
<p><em>trace </em>Ausgaben könnten Informationen preisgeben, die der Anwender missbrauchen könnte, um sich z. B. Vorteile zu verschaffen, daher müssten wir diese vorher löschen. Der <em>DEBUGMODE </em>muss für den Release von <em>true </em>auf <em>false </em>und wieder zurück geändert werden. Unsere Versionsnummer braucht eine Erhöhung. Dies und noch viel mehr kann Ant für uns übernehmen.</p>
<p>D. h. Ant soll für <em>Stechen</em>:</p>
<ol>
<li><em>DEBUGMODE </em>auf <em>false </em>stellen.</li>
<li><em>trace </em>Ausgaben löschen.</li>
<li>Versionsnummer erhöhen.</li>
<li>Release Version erstellen und als ZIP speichern.</li>
<li>Debug Version erstellen und starten.</li>
</ol>
<p>Also erstellen wir zu erst ein neues Verzeichnis und nennen es <em>ant, </em>dort legen wir alle Dateien für Ant hinein.<em> E</em>ine<em> build.xml (New XML File&#8230;)</em>, eine <em>build.property </em><em>(New Empty File&#8230;) </em>und <em>eine build.number.<br />
</em></p>
<p>Vorab: hier findet ihr die Anleitung von Apache Ant <a title="Apache Ant Anleitung" href="http://ant.apache.org/manual" target="_blank">http://ant.apache.org/manual</a></p>
<h3>build.xml</h3>
<p>Ein Ant Projekt besteht immer aus einer XML Datei, wir haben unsere build.xml genannt.</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;!-- Jedes Ant Script wird von einem Project Tag umschlossen.
	Dem geben wir den Namen Stechen und als default Target debug.
	Das Hauptverzeichnis soll das gesamte Projektverzeichnis sein, also ../.
--&gt;
&lt;project name="Stechen" default="debug" basedir="../"&gt;

&lt;!--
Vordefinierte Variablen können in Dateien ausgelagert werden.
Variablen werden mit ${name xyz} angesprochen.
Geladen oder erstellt werden diese mit dem Tag property,
sie können aber auch als Parameter übergeben werden.
Mit file geben wir an dass eine Datei geladen werden soll.
Wir wollen die build.property im Hauptverzeichnis unter ant laden.
--&gt;
	&lt;property file="${basedir}/ant/build.property" /&gt;

&lt;!--
Dann erstellen wir noch drei weitere Variablen, die jeweils
den Pfad zu bin, lib und src angeben, ausgehend vom Hauptverzeichnis.
--&gt;
	&lt;property name="bin" value="${basedir}/bin" /&gt;
	&lt;property name="lib" value="${basedir}/lib" /&gt;
	&lt;property name="src" value="${basedir}/src" /&gt;

&lt;!--
Nun beginnen wir mit dem ersten Target und nennen ihn debug.
Eine kleine Beschreibung mit description vergeben wir auch noch.
debug soll:
1. die Buildnummer erhöhen
2. das Projekt kompilieren
3. die SWF starten
--&gt;
	&lt;target name="debug" description="Erstellt eine Debug Version"&gt;

&lt;!--
Mit dem Tag antcall sagen wir dem debug er soll einen anderes Target ausführen.
Man kann sich dies wie Funktionsaufrufe vorstellen. Hier wollen wir gerne buildnumber
ausführen und übergeben noch einen Parameter mit dem namen increment und dem Wert build.
Dieser kann später im Target buildnumber genutzt werden.
--&gt;
		&lt;antcall target="buildnumber"&gt;
			&lt;param name="increment" value="build" /&gt;
		&lt;/antcall&gt;

&lt;!--
Nun starten wir compile und übergeben drei Variablen, dessen Bedeutung später erläutert werden.
--&gt;
		&lt;antcall target="compile"&gt;
			&lt;param name="debugmode" value="true" /&gt;
			&lt;param name="srcpath" value="${src}" /&gt;
			&lt;param name="benchmark" value="false" /&gt;
		&lt;/antcall&gt;

&lt;!--
Mit exec können wir andere Programme starten.
executable gibt das zu startende Programm an.
failonerror besagt, dass dies bei Fehlern abgebrochen werden soll.
Mit arg wird dem Programm alles übergeben, was in line steht.
Aufgelöst würde hier stehen &lt;arg line="../bin/Stechen.swf"
--&gt;
		&lt;exec executable="${flashPlayerDebug}" failonerror="true"&gt;
			&lt;arg line="${bin}/${outputfile}" /&gt;
		&lt;/exec&gt;
	&lt;/target&gt;

&lt;!--
Unser release Target soll bevor es ausgeführt wird noch clean ausführen, dies besagt depends.
--&gt;
	&lt;target name="release" depends="clean" description="Erstellt eine Release Version"&gt;

&lt;!--
buildnumber ausführen für patch Nummer
--&gt;
		&lt;antcall target="buildnumber"&gt;
			&lt;param name="increment" value="patch" /&gt;
		&lt;/antcall&gt;

&lt;!--
Die soeben mit buildnumber geänderte Datei muss nun noch in das temporäre Verzeichnis kopiert werden.
Dateien kopiert man mit copyfile.
src ist die Datei, die kopiert werden soll.
dest ist das Ziel.
Mit forceoverwrite überscheiben wir die bestehende Datei.
--&gt;
		&lt;copyfile src="${src}/BuildVersion.as" dest="${basedir}/tmp/BuildVersion.as" forceoverwrite="true" /&gt;

&lt;!--
Nun kompilieren wir die Dateien im tmp Verzeichnis, welches wir mit clean erstellt haben.
--&gt;
		&lt;antcall target="compile"&gt;
			&lt;param name="debugmode" value="false" /&gt;
			&lt;param name="srcpath" value="${basedir}/tmp" /&gt;
			&lt;param name="benchmark" value="true" /&gt;
		&lt;/antcall&gt;

&lt;!--
Anschließend kann das temporäre Verzeichnis gelöscht werden, mit delete.
--&gt;
		&lt;delete dir="${basedir}/tmp" includeEmptyDirs="true" /&gt;
	&lt;/target&gt;

&lt;!--
compile soll das Projekt mit dem Adobe Flex Compiler kompilieren. Den Source Path übergeben wir mit dem antcall, debugmode und benchmark ebenfalls.
Eine detaillierte Beschreibung bekommt ihr, in dem ihr im cmd [mxmlc -help list details] oder [mxmlc -help list aliases details] eingebt.
-sp alle benötigten Sourcen, das src oder tmp Verzeichnis und der Tweener.
-include-libraries unsere benötigten SWC's, hier nur die assets.swc
Dann kommen Angaben zur SWF, ja könnten in die build.property ausgelagert werden.
Zum Schluss noch den Einstiegspunkt angeben und mit -o die Ausgabedatei Stechen.swf
--&gt;
	&lt;target name="compile"&gt;
		&lt;exec executable="${mxmlc}" failonerror="true"&gt;
			&lt;arg line="
						-sp '${srcpath}' ${addClassPaths} 

						-include-libraries '${lib}/assets.swc'

						-default-size 300 400
						-default-frame-rate 31
						-default-background-color 0xFFFFFF
						-debug=${debugmode}
						-incremental=false
						-benchmark=${benchmark}
						-target-player=10.0.0

						'${srcpath}/Main.as'
						-o '${bin}/${outputfile}'
						"/&gt;
		&lt;/exec&gt;
	&lt;/target&gt;

&lt;!--
clean soll:
1. src Verzeichnis zwischenspeichern, für die Änderungen.
2. DEBUGMODE auf false setzen
3. trace Ausgaben löschen
4. Projekt als ZIP speichern
--&gt;
	&lt;target name="clean"&gt;
		&lt;property name="tmp" value="${basedir}/tmp" /&gt;

&lt;!--
Zur Sicherheit altes tmp löschen.
--&gt;
		&lt;delete dir="${basedir}/tmp" includeEmptyDirs="true" /&gt;

&lt;!--
Verzeichnis kopieren von dir nach todir.
--&gt;
		&lt;copy todir="${tmp}"&gt;
			&lt;fileset dir="${src}" /&gt;
		&lt;/copy&gt;

&lt;!--
Mit replace können Zeichenketten gesucht und ersetzt werden.
In der Datai file und Kodierung encoding.
token wird gesucht und mit value ersetzt.
--&gt;
		&lt;replace file="${tmp}/Main.as" encoding="UTF-8" token="DEBUGMODE:Boolean = true" value="DEBUGMODE:Boolean = false" /&gt;

&lt;!--
Mit replaceregexp können reguläre Ausdrücke benutzt werden.
Wir wollen alle trace Ausgaben löschen, suchen also mit dem Ausdruck in match nach trace(....) und ersetzen diesen mit replace.
flags -g sucht und ersetzt in der ganzen Datei.
fileset dir bedeutet nichts anderes als im gesamten tmp Verzeichnis zu suchen.
--&gt;
		&lt;replaceregexp match="trace\(.*\)" replace="" flags="-g"&gt;
			&lt;fileset dir="${basedir}/tmp" /&gt;
		&lt;/replaceregexp&gt;

&lt;!--
build.number auslesen.
Mit zip ein ZIP File erstellen, unter destfile bin/release/Stechen_(versionsnummer).zip.
basedir wird gezipt.
exludes werden ausgeschlossen, unsere Releaseversionen. Debug habe ich wohl nicht mehr gemacht.
INFO: mit dem Tag ftp könnte man auch Dateien auf einem Server schieben.
--&gt;
		&lt;property file="${basedir}/ant/build.number" /&gt;
		&lt;zip destfile="${bin}/release/${ant.project.name}_${major}.${minor}.${patch}-${build}.zip" basedir="${bin}" excludes="release/**,debug/**" /&gt;

	&lt;/target&gt;

&lt;!--
buildnumber soll für release die patch Nummer erhöhen und im debug die build Nummer.
--&gt;
	&lt;target name="buildnumber"&gt;

&lt;!--
propertyfile build.number laden.
entry nimmt einen Eintrag aus der Datei, der mit key angegeben wird. Wir übergeben diesen als param und haben die Variable increment genannt.
Mit type setzen wir den Datentype des Eintrages fest, wir brauchen ein Integer.
default setzt den Wert auf 0 falls keiner vorhanden ist.
Dann wollen wir mit operation + den Wert um eins erhöhen.
--&gt;
		&lt;propertyfile file="${basedir}/ant/build.number"&gt;
			&lt;entry key="${increment}" type="int" default="0" operation="+" /&gt;
		&lt;/propertyfile&gt;

&lt;!--
Die neuen Versionsnummern auslesen und wie gehabt, unsere BuildVersion.as aktualisieren.
--&gt;
		&lt;property file="${basedir}/ant/build.number" /&gt;
		&lt;replaceregexp file="${src}/BuildVersion.as"
							match="VERSION:String = '(.*)'"
							replace="VERSION:String = '${major}.${minor}.${patch}-${build}'"
							byline="true"  /&gt;
	&lt;/target&gt;

&lt;/project&gt;
</pre>
<h3>build.property</h3>
<p>Die <em>build.property</em> ist eine normale Textdatei und nicht sonderlich spannend. Ant liest diese aus und verwendet die Variablen.</p>
<pre class="brush:bash">#Name der Ausgabedatei
outputfile = Stechen.swf

#Zusätzliche Klassenpfade
addClassPaths = 'c:/Dokumente und Einstellungen/akhon/Eigene Dateien/Classes/greensock-tweening-platform-as3/'

#Flash Player, Debug Player und die Version
flashPlayer = c:/Programme/Adobe/Adobe Flash CS4/Players FlashPlayer.exe
flashPlayerDebug = c:/Develop/flashplayer_10_sa_debug.exe
playerVersion = 10

#Der Pfad zum Flex SDK
flexSDK = c:/Develop/flex_sdk_3.4.1.10084
#Adobe Flex Compiler
#Auch hier können Variablen benutzt werden
mxmlc = ${flexSDK}/bin/mxmlc.exe
</pre>
<h3>build.number</h3>
<p>Die Nummern werden von Ant ausgelesen und in die BuildVersion.as eingefügt. Erhöht werden in diesem Projekt nur <em>patch </em>und <em>build</em></p>
<pre class="brush:bash">#Thu, 12 Aug 2010 09:38:54 +0200
#Build Number
#Tue Aug 10 21:23:55 CEST 2010
major=0
minor=0
patch=1
build=9
</pre>
<h3>ProjektDateien</h3>
<p><a rel="attachment wp-att-563" href="http://www.flashdevelop.de/programmierung/anleitung-teil-3-apache-ant-mit-flashdevelop.html/attachment/stechen-ant">Projekt Stechen mit Ant runterladen</a></p>
<ul>
<li><a title="Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen" href="../programmierung/anleitung-teil-1-actionscript-3-projekt-mit-flashdevelop-erstellen.html">Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen</a></li>
<li><a title="Anleitung Teil 2 : Kartenspiel Stechen mit FlashDevelop" href="../programmierung/anleitung-teil-2-kartenspiel-stechen-mit-flashdevelop.html">Anleitung Teil 2 : Kartenspiel Stechen mit FlashDevelop</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/programmierung/anleitung-teil-3-apache-ant-mit-flashdevelop.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anleitung Teil 2 :  Kartenspiel Stechen mit FlashDevelop</title>
		<link>http://www.flashdevelop.de/programmierung/anleitung-teil-2-kartenspiel-stechen-mit-flashdevelop.html</link>
		<comments>http://www.flashdevelop.de/programmierung/anleitung-teil-2-kartenspiel-stechen-mit-flashdevelop.html#comments</comments>
		<pubDate>Mon, 09 Aug 2010 16:48:48 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[FlashDevelop]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=526</guid>
		<description><![CDATA[Dies ist der zweite Teil der Anleitung und soll einen praktischen Einblick in die objektorientierte Programmierung (OOP) geben, mit Hilfe von FlashDevelop. Wie das Projekt erstellt wird, wurde im Artikel Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen beschrieben. Im weiterem Verlauf gehe ich davon aus, dass ihr mit Adobe Flash CS4 umgehen [...]]]></description>
			<content:encoded><![CDATA[<p>Dies ist der zweite Teil der Anleitung und soll einen praktischen Einblick in die objektorientierte Programmierung (OOP) geben, mit Hilfe von FlashDevelop. Wie das Projekt erstellt wird, wurde im Artikel <a title="Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen" href="http://www.flashdevelop.de/programmierung/anleitung-teil-1-actionscript-3-projekt-mit-flashdevelop-erstellen.html">Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen</a> beschrieben. Im weiterem Verlauf gehe ich davon aus, dass ihr mit Adobe Flash CS4 umgehen könnt und euch in der Programmierung auskennt.</p>
<h3>Unser Ziel</h3>
<p>Ein kleines Kartenspiel <em>Stechen</em>. Zwei Spieler bekommen aus 32 Karten jeweils die Hälfte. Jeder deckt die oberste Karte seines Stapels auf, die höhere Karte gewinnt und der Gewinner bekommt den Stich. Bei einem Gleichstand bleiben die Karten im Stich liegen. Der Gewinner des Spiels ist, wer nach 16 Zügen die meisten Karten gesammelt hat.<span id="more-526"></span></p>
<h3>Vorbereitung</h3>
<p>Was brauchen wir?</p>
<p><strong>Karten: </strong>Handelsübliche Karten 7-10, Bube, Dame, König und Ass mit den Farben Kreuz, Pik, Herz und Karo.</p>
<p><strong>Spielfenster : </strong>Mit den Kartenstapel, Hilfe Button, Spieletitel, Versionsanzeige und Modusanzeige.</p>
<p><strong>Popupfenster: </strong>Mit einem Textfeld und einem Button, für die Anleitung und der Gameoveranzeige.</p>
<h3>Die benötigten Klassen</h3>
<ul>
<li><strong>Main</strong>: Startet das Spiel</li>
<li><strong>BuildVersion</strong>: Versionsanzeige</li>
<li><strong>Utils</strong>: Hilfsmethoden</li>
<li><strong>Trick</strong>: Kartenstich</li>
<li><strong>Pile</strong>: Kartenstapel</li>
<li><strong>PileEvent</strong>: Ereignisse die vom Kartenstapel geworfen werden.</li>
<li><strong>Card</strong>: Eine Karte</li>
<li><strong>Screen</strong>: Stellt verschiedene Methoden zur Verfügung, die für ein Fenster nötig sind.</li>
<li><strong>ScreenStechen</strong>: Erbt von Screen und ist zugleich für die Spiellogik zuständig.</li>
<li><strong>ScreenPopup</strong>: Erbt von Screen und zeigt ein Text an. Benötigt für die Hilfe und Auswertung.</li>
</ul>
<p>Eine genau Beschreibung was jede einzelne Klasse macht, kann den Kommentaren entnommen werden.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_12.jpg" rel="lightbox[526]"><img class="aligncenter size-medium wp-image-533" title="fd_project_12" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_12-136x300.jpg" alt="" width="136" height="300" /></a></p>
<h3>Die benötigten Grafiken (assets.fla)</h3>
<ul>
<li><strong>Button</strong>: Mit einem Textfeld in <em>up</em> und <em>over</em>.</li>
<li><strong>Card Back</strong>: Der Kartenrücken einer Karte. Verknüpft mit <em>assets.GFXCardBack</em>. Wird von <em>Card.as</em> benötigt.</li>
<li><strong>Cards</strong>: Die Karten. Enthält drei <em>Symbol</em>s mit den Instanznamen <em>symbol1, symbol2, symbol3</em> und zwei Textfelder mit Instanznamen <em>value1_txt</em> und <em>value2_txt</em>. Die Textfelder zeigen den Kartenwert 7-10,  B,  D, K oder A an<strong>.</strong></li>
<li><strong>Popup</strong>: Popupfenster für die Klasse <em>ScreenPopup. </em>Enthält ein Textfeld mit Instanznamen <em>info_txt</em> und den <em>Button</em> mit Instanznamen <em>ok_btn</em>. Verknüpft mit <em>assets.GFXPopup</em>.</li>
<li><strong>ScreenStechen</strong>: Enthält ein paar Grafiken, eine <em>Button</em> mit Instanznamen <em>help_btn </em>und ein Textfeld <em>header_txt</em>. Verknüpft mit <em>assets.GFXScreen</em> und wird von <em>ScreenStechen.as </em>benötigt.</li>
<li><strong>Symbols</strong>: Enthält vier Bilder in der Zeitleiste 1 = Kreuz, 2 = Pik, 3 = Herz und 4 Karo.</li>
</ul>
<p>In FLA Dateien hat ActionScript nicht zu suchen.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_13.jpg" rel="lightbox[526]"><img class="aligncenter size-medium wp-image-532" title="fd_project_13" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_13-300x216.jpg" alt="" width="300" height="216" /></a></p>
<h3>Das gezipte Projekt</h3>
<p><a rel="attachment wp-att-535" href="http://www.flashdevelop.de/programmierung/anleitung-teil-2-kartenspiel-stechen-mit-flashdevelop.html/attachment/stechen">Kartenspiel Stechen kann hier geladen werden</a> .</p>
<p>Das Ergebnis:</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_1" width="300" height="400" align="center">
      <param name="movie" value="http://www.flashdevelop.de/wp-content/uploads/2010/08/Stechen.swf" />
      <param name="align" value="center" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://www.flashdevelop.de/wp-content/uploads/2010/08/Stechen.swf" width="300" height="400" align="center">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>Weitere Teile:</p>
<ul>
<li><a title="Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen" href="../programmierung/anleitung-teil-1-actionscript-3-projekt-mit-flashdevelop-erstellen.html">Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen</a></li>
<li><a title="Anleitung Teil 3: Apache Ant mit FlashDevelop" href="http://www.flashdevelop.de/programmierung/anleitung-teil-3-apache-ant-mit-flashdevelop.html">Anleitung Teil 3 : Apache Ant mit FlashDevelop</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/programmierung/anleitung-teil-2-kartenspiel-stechen-mit-flashdevelop.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anleitung Teil 1 : ActionScript 3 Projekt mit FlashDevelop erstellen</title>
		<link>http://www.flashdevelop.de/programmierung/anleitung-teil-1-actionscript-3-projekt-mit-flashdevelop-erstellen.html</link>
		<comments>http://www.flashdevelop.de/programmierung/anleitung-teil-1-actionscript-3-projekt-mit-flashdevelop-erstellen.html#comments</comments>
		<pubDate>Mon, 09 Aug 2010 11:20:40 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[FlashDevelop]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=496</guid>
		<description><![CDATA[Es gibt verschiedene Wege ein Projekt zu erstellen und viele Sachen zu erklären. Ich versuche mich nur auf das Wichtigste zu beschränken. Ich benutze hier: FlashDevelop 3.2.2 RTM Adobe Flash CS 4. Flex SDK 3.4.1.10084 Projekt aufsetzen FlashDevelop öffnen und über das Menü Project -&#62; New Project wird ein neues Projekt erstellt. Wir wollen nun [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt verschiedene Wege ein Projekt zu erstellen und viele Sachen zu erklären. Ich versuche mich nur auf das Wichtigste zu beschränken.</p>
<p>Ich benutze hier:</p>
<ul>
<li>FlashDevelop 3.2.2 RTM</li>
<li>Adobe Flash CS 4.</li>
<li>Flex SDK 3.4.1.10084</li>
</ul>
<h3>Projekt aufsetzen</h3>
<p><span id="more-496"></span>FlashDevelop öffnen und über das Menü <em>Project -&gt; New Project </em>wird ein neues Projekt erstellt.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_1.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-497" title="fd_project_1" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_1-300x209.jpg" alt="" width="300" height="209" /></a></p>
<p>Wir wollen nun ein Actionscript 3 Projekt erstellen, mit dem Namen <em>Stechen</em>.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_2.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-499" title="fd_project_2" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_2-300x262.jpg" alt="" width="300" height="262" /></a></p>
<p>Also wählen wir in der linken Liste <em>AS3 Project</em> aus und geben dem Projekt unter <em>Name </em>den Namen <em>Stechen</em> ein. Unter <em>Location </em>könnt ihr dann das Zielverzeichnis angeben, in dem das Projekt später liegen soll. Mit <em>Create directory for project </em>sagt ihr dem Progarmm, dass er das Projekt in einem Unterverzeichnis mit dem Projektnamen erstellen soll. Anschließend bestätigen wir unsere Eingaben mit <em>OK</em>.</p>
<p>Nun ist die Grundstruktur des Projektes fertig.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_3.jpg" rel="lightbox[496]"><br />
</a><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_3.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-502" title="fd_project_3" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_3-300x178.jpg" alt="" width="300" height="178" /></a></p>
<p>Rechts sehen wir normalerweise die Struktur des Projektes, unter <em>Project.</em> <em> </em></p>
<p>Im <em>bin</em> liegen alle Dateien, die für die Veröffentlichung benötigt werden. Dies sind z. B. XML&#8217;s, Bilder und SWF&#8217;s. Standartmäßig liegt hir schon eine <em>index.html</em> bei. Diese bindet die Flashdatei des Projektes ein, mittels JavaScript und überprüft gleich, ob der passende Flashplayer vorhanden ist.</p>
<p>Im lib<em> </em>sollten später alle Bibliotheken liegen, dies dient der Übersicht.</p>
<p>Im <em>src </em>sind unsere Actionscript Dateien. Hier liegt schon eine vorgefertigte <em>Main.as </em>und ist schon als Einstiegspunkt markiert. Mit Rechtsklick auf eine Datei können wir den Einstiegspunkt zu jeder Zeit ändern, <em>Always Compile</em>. Das ist die Datei, die beim Start ausgeführt wird.</p>
<h4><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_4.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-503" title="fd_project_4" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_4-222x300.jpg" alt="" width="222" height="300" /></a>Main.as</h4>
<pre class="brush:as3">package
{
	import flash.display.Sprite;
	import flash.events.Event;

	/**
	 * ...
	 * @author Dein Name
	 */
	public class Main extends Sprite
	{

		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
		}

	}

}</pre>
<p>Bei<span style="color: #339966;"> </span><em><span style="color: #339966;">//entry point </span> </em>ist unser Einstiegspunkt.</p>
<p>Da ich bei mir einige Plugins installiert habe, kann die Ansicht etwas anders aussehen.</p>
<p>Unter <em>Project -&gt; Properties</em> (im Menü) müssen wir nun noch weitere Einstellungen vornehmen. Zwei Bilder zuvor habe ich einen Button grün umrandet, welcher den gleichen Effekt hat.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_5.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-504" title="fd_project_5" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_5-258x300.jpg" alt="" width="258" height="300" /></a>Im Reiter <em>Output</em> stellen wir unter <em>Target </em>den <em>Flash Player 10</em> ein.  <em>No output, only run pre/post build command</em> benötigen wir nicht, der <em>pre </em>und <em>post command </em>kann im Reiter <em>Build</em> eingegeben werden.</p>
<p><em>Output file </em>ist unsere Ausgabedatei und wird in <em>bin </em>mit dem Projektnamen abgelegt. Dann noch schnell die Größe <em>Dimensions, </em>Hintergrundfarbe <em>Background color</em> und <em> </em>Bildrate<em> Framerate</em> eingeben.</p>
<p>Unter <em>Test Movie</em> können wir einstellen, wie das Projekt in FlashDevelop gestartet werden soll. Ich benutze <em>Play in external player</em>.  Probiert einfach die verschiedenen Möglichkeiten aus und schaut was passiert und welche euch am besten gefällt.  Ich habe die Erfahrung gemacht, wenn es zu Abstürzen oder Hängern kommen sollte, schmiert nur der externe Player ab und nicht das ganze FlashDevelop, sofern <em> Play in external player </em>ausgewählt wurde.</p>
<p>Im Reiter <em>Compiler Options </em>können weitere Einstellungen vorgenommen werden, die wir in unserem Projekt nicht verändern.</p>
<p>Da wir noch den Tweener von <a title="GreenSock" href="http://www.greensock.com/" target="_blank">http://www.greensock.com/</a> benutzen wollen, müssen wir diesen unter <em>Classpaths </em>eintragen, <em>Add Classpath&#8230; </em>und dann das Verzeichnis vom GreenSock Tweener auswählen.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_6.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-508" title="fd_project_6" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_6-258x300.jpg" alt="" width="258" height="300" /></a></p>
<p>Wie ihr seht, ist hier schon <em>scr</em> eingetragen, in dem unsere Actionscript Dateien liegen werden.</p>
<p>Jetzt wollen wir im Hauptverzeichnis ein neuen Ordner <em>assets </em>erstellen, dort legen wir unsere FLA Dateien ab. Rechte Maustaste auf <em>Stechen </em>-&gt;  <em>add -&gt; New Folder&#8230;</em></p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_7.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-509" title="fd_project_7" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_7-284x300.jpg" alt="" width="284" height="300" /></a></p>
<h4>Flashdatei erstellen</h4>
<p>Jetzt erstellen wir in <em>Adobe Falsh CS4</em> eine <em>Flash-Datei (ActionScript 3.0)</em> und geben der die gleiche größe 300 x 4oo Pixel, damit wir die Bühnengröße vor Augen haben. Gespeichert wird diese unter <em>assets.fla </em>in <em>assets.</em> In den <em>Einstellung für Veroffentlichungen </em>wählen wir im Reiter <em>Formate</em> HTML ab und schicken Flash ins <em>../lib/assets.swf. </em><strong>Wichtig:</strong><em> </em>Unter dem Reiter <em>Flash </em>müssen wir nur noch <em>SWC Exportieren </em>auswählen.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_8.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-512" title="fd_project_8" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_8-195x300.jpg" alt="" width="195" height="300" /></a></p>
<p>Sobald in der Bibliothek etwas verknüpft und anschließen veröffentlicht wurde, erscheint die <em>SWC </em>im gleichen Ornder der <em>SWF</em>.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_11.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-517" title="fd_project_11" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_11-300x209.jpg" alt="" width="300" height="209" /></a></p>
<p>Die SWC muss dem Projekt hinzugefügt werden, befor die Verknüpfungen genutzt werden können.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_9.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-514" title="fd_project_9" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_9-272x300.jpg" alt="" width="272" height="300" /></a></p>
<p>Rechte Maustaste auf die <em>SWC </em>und <em>Add To Library</em> klicken. Nun müssen wir noch dem Projekt mitteilen, wie diese eingebunden sein soll. Hierzu gehen wir ein zweites mal auf die <em>SWC </em>und klicken auf das neu hinzugekommene <em>Options&#8230;</em>. Es öffnet sich ein neues Fenster.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_10.jpg" rel="lightbox[496]"><img class="aligncenter size-medium wp-image-515" title="fd_project_10" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_project_10-300x270.jpg" alt="" width="300" height="270" /></a></p>
<p>1. Hier werden alle verendeten Klassen eingebunde, die SWF muss also nicht nachgeladen werden.</p>
<p>2. Hier wird die Komplette SWC eingefügt, inkl. der Grafiken und pipapo. Ein Nachladen der SWF ist nicht nötig. Für user Projekt verwenden wir diesen Weg.</p>
<p>3. Hier wird nichts eingefüht. Die Klassendefinitionen werden erkannt und können benutzt werden.  Damit das Projekt läuft muss die SWF nachgeladen werden.</p>
<p>Vergewissert euch noch, ob unter <em>Tools -&gt; Programm Settings.. </em>-&gt; <em>AS3Context -&gt; Flex SDK Location </em>der Pfad zum Flex SDK richtig gesetzt wurde.</p>
<p>Fortsetzung folgt &#8230;</p>
<p>Vorschau:</p>
<ul>
<li><a title="Anleitung Teil 2 : Kartenspiel Stechen mit FlashDevelop" href="http://www.flashdevelop.de/programmierung/anleitung-teil-2-kartenspiel-stechen-mit-flashdevelop.html">Anleitung Teil 2 : Kartenspiel Stechen mit FlashDevelop</a></li>
<li><a title="Anleitung Teil 3: Apache Ant mit FlashDevelop" href="http://www.flashdevelop.de/programmierung/anleitung-teil-3-apache-ant-mit-flashdevelop.html">Anleitung Teil 3 : Apache Ant mit FlashDevelop</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/programmierung/anleitung-teil-1-actionscript-3-projekt-mit-flashdevelop-erstellen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ant Plugin für FlashDevelop</title>
		<link>http://www.flashdevelop.de/programmierung/ant-plugin-fuer-flashdevelop.html</link>
		<comments>http://www.flashdevelop.de/programmierung/ant-plugin-fuer-flashdevelop.html#comments</comments>
		<pubDate>Wed, 04 Aug 2010 22:25:13 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=472</guid>
		<description><![CDATA[Ich habe mir ein kleines Ant Plugin gebaut und SimpleAntPlugin genannt. Wer dies auch gerne benutzen möchte, kann dies gerne tun. Der Einsatz geschieht auf eigener Gefahr. SimpleAntPlugin SimpleAntPlugin erstellt ein Button in der Toolbar, liest ein Buildfile aus und zeigt die verschiedenen Targets an. Alle gefundenen Ant Targets. Der hervorgehobene ist der im default [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mir ein kleines Ant Plugin gebaut und SimpleAntPlugin genannt. Wer dies auch gerne benutzen möchte, kann dies gerne tun. <strong>Der Einsatz geschieht auf eigener Gefahr.</strong></p>
<h4>SimpleAntPlugin</h4>
<p>SimpleAntPlugin erstellt ein Button in der Toolbar, liest ein Buildfile aus und zeigt die verschiedenen Targets an.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/simpleantplugin1.jpg" rel="lightbox[472]"><img class="aligncenter size-full wp-image-479" title="simpleantplugin1" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/simpleantplugin1.jpg" alt="" width="263" height="237" /></a></p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/simpleantplugin1.jpg" rel="lightbox[472]"></a><span id="more-472"></span></p>
<ol>
<li>Alle gefundenen Ant Targets. Der hervorgehobene ist der im <em>default</em> angegebene.</li>
<li>Mit <em>Neu laden </em>kann das Buildfile neu eingelesen werden.</li>
<li>Ausführen der Pre-Build Command Line und Post-Build Command Line ein- oder ausschalten.</li>
</ol>
<h4>Plugin Settings</h4>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/simpleantplugin2.jpg" rel="lightbox[472]"><img class="aligncenter size-medium wp-image-480" title="simpleantplugin2" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/simpleantplugin2-300x217.jpg" alt="" width="300" height="217" /></a></p>
<ul>
<li><strong>AntPath</strong> = Der Pfad zu Ant, sollte eingetragen werden, wenn dieser nicht in den Systemvariablen seht.</li>
<li><strong>BuilDir</strong> = Verzeichis in der die Buildanweisungen sind.</li>
<li><strong>BuildFile</strong> = Die XML Datei (buildfile)</li>
<li><strong>PreBuild</strong> =  Pre-Build Command Line (ausführen = true)</li>
<li><strong>PostBuild</strong> = Post-Build Command Line (ausführen = true)</li>
</ul>
<h4>Ant Build starten</h4>
<p>Targets werden gestartet, in dem man eines der <em>Ant Targets</em> aus wählt.  Mit Klick auf das Ant Icon startet immer <em>default</em> Target.</p>
<p><a rel="attachment wp-att-481" href="http://www.flashdevelop.de/programmierung/ant-plugin-fuer-flashdevelop.html/attachment/simpleantplugin">SimpleAntPlugin Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/programmierung/ant-plugin-fuer-flashdevelop.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugger in FlashDevelop ausschalten.</title>
		<link>http://www.flashdevelop.de/allgemein/debugger-in-flashdevelop-ausschalten.html</link>
		<comments>http://www.flashdevelop.de/allgemein/debugger-in-flashdevelop-ausschalten.html#comments</comments>
		<pubDate>Sun, 01 Aug 2010 13:18:24 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[FlashDevelop]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=430</guid>
		<description><![CDATA[Ich habe die Erfahrung gemacht, dass es manchmal sinnvoller ist, den Debugger von FlashDevelop aus zu haben. In den Programmsettings kann dieser ausgeschaltet werden, danach startet der Debugger nicht mehr automatisch. In Programmsettings Tools -&#62; Programmsettings oder [F10] drücken -&#62; FlashDebugger -&#62; Start Debugger On Test Movie muss False ausgewählt werden. Möchte man den Debugger [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe die Erfahrung gemacht, dass es manchmal sinnvoller ist, den Debugger von FlashDevelop aus zu haben. In den Programmsettings kann dieser ausgeschaltet werden, danach startet der Debugger nicht mehr automatisch.</p>
<p>In <em>Programmsettings Tools -&gt; Programmsettings</em> oder [F10] drücken -&gt; <em>FlashDebugger -&gt; Start Debugger On Test Movie</em> muss <strong>False </strong>ausgewählt werden.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_settings_debugger_off.jpg" rel="lightbox[430]"><img class="aligncenter size-medium wp-image-431" title="FlashDevelop Debugger Settings" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_settings_debugger_off-300x218.jpg" alt="Autostart des Debuggers in FlashDevelop ausstellen" width="300" height="218" /></a></p>
<p>Möchte man den Debugger zu einem späteren Zeitpunkt nutzen, so muss dieser vor dem <em>Test </em>gestartet werden.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_manual_start_debugger.jpg" rel="lightbox[430]"><img class="aligncenter size-medium wp-image-432" title="FlashDevelop Debugger start" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_manual_start_debugger-300x137.jpg" alt="So startet man den Debugger in FlashDevelop" width="300" height="137" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/debugger-in-flashdevelop-ausschalten.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashDevelop hat wieder eine neue Version 3.2.2 RTM</title>
		<link>http://www.flashdevelop.de/allgemein/flashdevelop-hat-wieder-eine-neue-version-3-2-2-rtm.html</link>
		<comments>http://www.flashdevelop.de/allgemein/flashdevelop-hat-wieder-eine-neue-version-3-2-2-rtm.html#comments</comments>
		<pubDate>Sun, 01 Aug 2010 12:25:36 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[FlashDevelop]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=421</guid>
		<description><![CDATA[FlashDevelop 3.2.2 RTM ist kompatibel mit RC2 &#8211; 3.2.1 RTM. In dieser Version wurden einige Fehler behoben, im Codegenerator, Haxe, japanische Lokalisation, in der IDE Integration, im Refactoring,  im Debugger, Completion und das Ausklappen der View. Das Programm findet ihr auf der Seite von FlashDevelop unter http://www.flashdevelop.org/community/viewtopic.php?f=11&#38;t=6956 Vor dem Update ist es sinnvoll die vorherigen [...]]]></description>
			<content:encoded><![CDATA[<p>FlashDevelop 3.2.2 RTM ist kompatibel mit RC2 &#8211; 3.2.1 RTM.</p>
<p>In dieser Version wurden einige Fehler behoben, im Codegenerator, Haxe, japanische Lokalisation, in der IDE Integration, im Refactoring,  im Debugger, Completion und das Ausklappen der View.</p>
<p>Das Programm findet ihr auf der Seite von FlashDevelop unter <a title="FlashDevelop 2.2.1 RTM" href="http://www.flashdevelop.org/community/viewtopic.php?f=11&amp;t=6956" target="_blank">http://www.flashdevelop.org/community/viewtopic.php?f=11&amp;t=6956</a></p>
<p><span style="color: #ff0000;">Vor dem Update ist es sinnvoll die vorherigen Settings zu Sichern, unter Tools -&gt; Backup all Settings.</span></p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_backup_settings.jpg" rel="lightbox[421]"><img class="aligncenter size-medium wp-image-426" title="FlashDevelop Backup All Settings" src="http://www.flashdevelop.de/wp-content/uploads/2010/08/fd_backup_settings-300x257.jpg" alt="So können alle Settings gesichert werden" width="300" height="257" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/flashdevelop-hat-wieder-eine-neue-version-3-2-2-rtm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eine neue Version von FlashDevelop 3.2.1 RTM</title>
		<link>http://www.flashdevelop.de/allgemein/eine-neue-version-von-flashdevelop-3-2-1-rtm.html</link>
		<comments>http://www.flashdevelop.de/allgemein/eine-neue-version-von-flashdevelop-3-2-1-rtm.html#comments</comments>
		<pubDate>Mon, 14 Jun 2010 10:45:07 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[FlashDevelop]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=410</guid>
		<description><![CDATA[FalshDevelop 3.2.1 RMT ist kompatibel mit RC2 &#8211; 3.2.0 RTM. Die Version 3.2.1 RTM behebt einige Fehler aus der Version 3.2.0 RTM. Geändert hat sich einiges ab 3.2 FlashDevelop 3.2.1 RTM gibt es wie immer bei FlashDevelop.org unter  http://www.flashdevelop.org/community/viewtopic.php?f=11&#38;t=6709 Die vorherige Version 3.2.0 RTM brachte umfangreiche Neuerungen mit sich. Nun hat FlashDevelop einen echten Debugger [...]]]></description>
			<content:encoded><![CDATA[<p>FalshDevelop 3.2.1 RMT ist kompatibel mit RC2 &#8211; 3.2.0 RTM. Die Version 3.2.1 RTM behebt einige Fehler aus der Version 3.2.0 RTM. Geändert hat sich einiges ab 3.2</p>
<p>FlashDevelop 3.2.1 RTM gibt es wie immer bei FlashDevelop.org unter  <a title="FlashDevelop 23.2.1 RTM" href="http://www.flashdevelop.org/community/viewtopic.php?f=11&amp;t=6709">http://www.flashdevelop.org/community/viewtopic.php?f=11&amp;t=6709</a></p>
<p>Die vorherige Version 3.2.0 RTM brachte umfangreiche Neuerungen mit sich.</p>
<ol>
<li> Nun hat FlashDevelop einen echten Debugger eingebaut.</li>
<li>Die Einstellungen können importiert und exportiert werden.</li>
<li>Es wird Fat SWC (SWC + ASDocs für Codehinweise) unterstützt.</li>
<li>Mit CTRL + rechte Maustaste im Projektmanager bekommt man nun den normalen Kontext angezeigt.</li>
<li>Besseres Adobe CS* Unterstützung.</li>
<li>FlashDevelop und Plugin Einstellungen können gesucht werden (Filter settings).</li>
<li>Das Result-Fenster kann ebenfalls durchsucht werden und hat jetzt verschiedene Filter.</li>
<li>Auch ein CodeAnalyzer Plugin ist hinzugekommen, welches Flex PMD integriert</li>
<li>&#8230; und noch ein paar andere Dinge&#8230;.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/eine-neue-version-von-flashdevelop-3-2-1-rtm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashDevelop 3.1.1 RTM erschienen</title>
		<link>http://www.flashdevelop.de/allgemein/flashdevelop-3-1-1-rtm-erschienen.html</link>
		<comments>http://www.flashdevelop.de/allgemein/flashdevelop-3-1-1-rtm-erschienen.html#comments</comments>
		<pubDate>Tue, 11 May 2010 13:36:10 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[programm]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=396</guid>
		<description><![CDATA[Anfang Mai wurde wieder eine neue Version von FlashDevelop herausgegeben, mit der Verseionsnummer 3.1.1 RTM. Diese aktuelle Version ist abwärtskompatibel bis RC2. Die neueste Errungenschaft des Programms ist der Profiler. Dieser Listet alle Objekte auf mit Speicherverbrauch etc.  Mit Doppelklick auf einem Objekt zeigt der Profiler auch die aufgerufenen Methoden auf inklusive Zeilennummer. FlashDevelop 3.1.1 [...]]]></description>
			<content:encoded><![CDATA[<p>Anfang Mai wurde wieder eine neue Version von FlashDevelop herausgegeben, mit der Verseionsnummer 3.1.1 RTM. Diese aktuelle Version ist abwärtskompatibel bis RC2. Die neueste Errungenschaft des Programms ist der Profiler. Dieser Listet alle Objekte auf mit Speicherverbrauch etc.  Mit Doppelklick auf einem Objekt zeigt der Profiler auch die aufgerufenen Methoden auf inklusive Zeilennummer.</p>
<p><a title="FalshDevelop 3.1.1 RTM" href="http://www.flashdevelop.org/community/viewtopic.php?f=11&amp;t=6496" target="_blank">FlashDevelop 3.1.1 RTM kann wie immer direkt von deren Seite geladen werden.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/flashdevelop-3-1-1-rtm-erschienen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
